| 238 | |
| 239 | template <CostEvaluatable T> |
| 240 | Cost CostEvaluator::penalisedCost(T const &arg) const |
| 241 | { |
| 242 | if (arg.empty()) |
| 243 | { |
| 244 | if constexpr (PrizeCostEvaluatable<T>) |
| 245 | return arg.uncollectedPrizes(); |
| 246 | return 0; |
| 247 | } |
| 248 | |
| 249 | // Standard objective plus infeasibility-related penalty terms. |
| 250 | auto const cost |
| 251 | = arg.distanceCost() + arg.durationCost() + arg.fixedVehicleCost() |
| 252 | + excessLoadPenalties(arg.excessLoad()) + twPenalty(arg.timeWarp()) |
| 253 | + distPenalty(arg.excessDistance(), 0); |
| 254 | |
| 255 | if constexpr (PrizeCostEvaluatable<T>) |
| 256 | return cost + arg.uncollectedPrizes(); |
| 257 | |
| 258 | return cost; |
| 259 | } |
| 260 | |
| 261 | template <CostEvaluatable T> Cost CostEvaluator::cost(T const &arg) const |
| 262 | { |
no test coverage detected