Проблема с маршрутизацией автомобиля: VRP с временным окном должен учитывать TimeWindowedDepot.getDueTime () - PullRequest
0 голосов
/ 22 января 2019

Я работаю с проблемой маршрутизации окна с временным окном.

Мои ограничения:

  1. У меня есть клиенты (100), у которых есть готовые и ожидаемые сроки.
  2. И транспортные средства (10), которые также имеют готовые и ожидаемые сроки.
  3. Солвер работает в течение 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

1 Ответ

0 голосов
/ 24 января 2019

После множества итераций вот правило, которое решает мою проблему / вариант использования.

// TimeWindowedDepot: extra hard constraints
rule "arrivalAfterDueTimeInDepot"
when
    TimeWindowedDepot($dueTime : dueTime)
    TimeWindowedCustomer(vehicle != null && previousStandstill!=null && previousStandstill==vehicle && $dueTime < arrivalTime + serviceDuration + getDistanceTo(vehicle), $arrivalTime : arrivalTime, $distance : getDistanceTo(vehicle), $serviceDuration : serviceDuration)
then
    scoreHolder.addHardConstraintMatch(kcontext, ($dueTime-$arrivalTime+$serviceDuration+$distance));
end

Я думаю, что это может помочь кому-то в будущем.

...