示例#1
0
文件: Solver.cpp 项目: JeGa/mknap_pso
    int Solver::calculatePenalty(Solution &newPosition, int pBestTmp)
    {
        int penaltyValue = 0;

        // Penalty function if constraint is violated
        for (int i = 0; i < currentProblem->m; ++i) {

            // Check constraint i
            int dist = checkConstraint(newPosition, i);

            if (dist) {
                // Constraint violated

                // Get total of all weights (TW)
                int diff = std::min(currentProblem->capacity.at(i),
                                    abs(getTotalOfAllWeights(i) - currentProblem->capacity.at(i)));

                // Penalty function
                int penalty = (int) (pBestTmp * (((double) dist) / (double) diff));

                // Sum up with penalty function
                penaltyValue += penalty;
            }
        }

        return penaltyValue;
    }
示例#2
0
C_FLOAT64 CFitItem::getConstraintViolation() const
{
  switch (checkConstraint())
    {
      case - 1:
        return *mpLowerBound - mLocalValue;
        break;

      case 1:
        return mLocalValue - *mpUpperBound;
        break;
    }

  return 0.0;
}