Я хочу создать вычисление добавочной оценки для VRP, чтобы минимизировать стоимость, где стоимость - это переменная стоимость транспортного средства (долл. США / км) плюс стоимость водителя (долл. США / ч), и у меня также есть жесткое ограничение, которое является общейпродолжительность поездки (8 ч / водитель), (для которой я добавил параметр скорости движения для всего транспортного средства, а также водителя usd / ч).Я уже реализовал это в простом вычислении баллов, но с большим набором данных он должен работать намного больше, чем я хочу, поэтому я попробовал пошаговый способ.
Я попытался просто вставить дополнительные строки в исходный инкремент.оценка счета, но, похоже, не удалось.Поскольку я читаю другие источники, и я думаю, что проблема может быть связана с последовательностью обновлений previousStandstill, vehicle и nextCustomer.Поэтому, когда он обновляет предыдущий стандарт, клиенты иногда еще не добавляют автомобиль, поэтому я не могу сопоставить время вождения (расстояние от предыдущего уровня / скорость движения) с данным транспортным средством.
Я уже проверил, чтов домене Customer есть аннотация @PlanningEntity, а в методе getVehicle - аннотация @AnchorShadowVariable.
Я действительно застрял здесь.Буду признателен за любую помощь.
Обновление: я добавил некоторый код в incrementalScore -> insertPreviousStandstill, чтобы получить транспортное средство предыдущегоStandstill:
Vehicle vehicle = null;
Vehicle vehicle2 = null;
Standstill previousStandstill2 = customer.getPreviousStandstill();
while (vehicle == null) {
if (previousStandstill2 instanceof Vehicle) {
vehicle = previousStandstill2.getVehicle();
} else {
Customer customer2 = (Customer) previousStandstill2;
vehicle2 = customer2.getVehicle();
if (vehicle2 == null) {
previousStandstill2 = customer2.getPreviousStandstill();
} else {
vehicle = vehicle2;
}
}
}
Long vehicle_varcost = vehicle.getVarCost();
softScore -= customer.getDistanceFromPreviousStandstill() * vehicle_varcost / 1000;
(также добавлено vehicle_varcost для всехдо и после изменения кода) Работает нормально, пока не будет построена эвристика (я получаю тот же результат с EasyScore), но если впоследствии не получится.