* Simple wrapper class that implements the required evaluation interface for * a single reload depot. */
| 13 | * a single reload depot. |
| 14 | */ |
| 15 | class ReloadDepotSegment |
| 16 | { |
| 17 | pyvrp::ProblemData const &data_; |
| 18 | size_t depot_; |
| 19 | |
| 20 | public: |
| 21 | ReloadDepotSegment(pyvrp::ProblemData const &data, size_t depot) |
| 22 | : data_(data), depot_(depot) |
| 23 | { |
| 24 | assert(depot < data.numDepots()); // must be an actual depot |
| 25 | } |
| 26 | |
| 27 | pyvrp::search::Route const *route() const { return nullptr; } |
| 28 | |
| 29 | size_t first() const { return depot_; } |
| 30 | size_t last() const { return depot_; } |
| 31 | size_t size() const { return 1; } |
| 32 | |
| 33 | bool startsAtReloadDepot() const { return true; } |
| 34 | bool endsAtReloadDepot() const { return true; } |
| 35 | |
| 36 | pyvrp::Distance distance([[maybe_unused]] size_t profile) const |
| 37 | { |
| 38 | return 0; |
| 39 | } |
| 40 | |
| 41 | pyvrp::DurationSegment duration([[maybe_unused]] size_t profile) const |
| 42 | { |
| 43 | pyvrp::ProblemData::Depot const &depot = data_.location(depot_); |
| 44 | return {depot, 0}; // service is handled while evaluating proposal |
| 45 | } |
| 46 | |
| 47 | pyvrp::LoadSegment load([[maybe_unused]] size_t dimension) const |
| 48 | { |
| 49 | return {}; |
| 50 | } |
| 51 | }; |
| 52 | } // namespace |
| 53 | |
| 54 | void RelocateWithDepot::evalDepotBefore(Cost fixedCost, |
no outgoing calls
no test coverage detected