Я работаю с проблемой маршрутизации окна с временным окном.
Мои ограничения:
- У меня есть клиенты (100), у которых есть готовые и ожидаемые сроки.
- И транспортные средства (10), которые также имеют готовые и ожидаемые сроки.
- Солвер работает в течение 150 секунд.
Результат учитывает срок оплаты клиентов, но не учитывает срок хранения депо (или автомобиля).
Я пытался добавить жесткие ограничения для автомобиля в срок. Но это позволяет многим клиентам не инициализироваться, хотя у меня достаточно автомобиля.
Вот жесткое ограничение, которое я использовал.
// TimeWindowedDept: extra hard constraints
rule "arrivalAfterDueTimeInDepot"
when
TimeWindowedCustomer($arrivalTime : arrivalTime, $vehicle : vehicle)
$customer : Customer(previousStandstill != null)
TimeWindowedDepot($vehicle != null && dueTime<($arrivalTime+$customer.getDistanceTo($vehicle)), $dueTime : dueTime)
then
scoreHolder.addHardConstraintMatch(kcontext, ($dueTime-($arrivalTime+$customer.getDistanceTo($vehicle))));
end
Пожалуйста, предложите, если я написал неправильное правило. Или есть другое решение для этой проблемы. Спросите любую необходимую деталь. Спасибо.
РЕДАКТ. 1:
Я немного изменил правило, но результат все тот же.
// TimeWindowedDepot: extra hard constraints
rule "arrivalAfterDueTimeInDepot"
when
TimeWindowedDepot($dueTime : dueTime)
TimeWindowedCustomer(vehicle != null && $dueTime < arrivalTime+ getDistanceTo(vehicle), $arrivalTime : arrivalTime, $distance : getDistanceTo(vehicle))
then
scoreHolder.addHardConstraintMatch(kcontext, ($dueTime-$arrivalTime+$distance));
end