Повторное планирование: объект всегда получает присвоение перегруженному объекту - PullRequest
0 голосов
/ 30 января 2019

Подход

Попытка реализовать повторное планирование, выполнив следующие шаги:

  1. Запустите решатель с начальными входными данными и дайте ему поработать некоторое время

  2. Завершить решатель - перед завершением сохраните наилучшее решение в ScoreDirectorFactory.buildScoreDirector ()

  3. Добавление новых клиентов с использованием экземпляра solver.addProblemFactChange (AddCustomerProblemFactChange instance)

Соблюдается руководство по оптаплане 7.10, раздел 16.5.1 для захода на посадку.Мы используем чрезмерно ограниченное планирование в нашем проекте

Код

Метод завершения (с помощью вызова покоя):

 VehicleRoutingSolution sol = solver.getBestSolution();
 scoreDirectorFactory = solver.getScoreDirectorFactory();
 director = scoreDirectorFactory.buildScoreDirector();
 director.setWorkingSolution(sol);
 solver.terminateEarly();

CustomerList - Список клиентов, которых я хочу добавить после решателя

for (Customer customer : customerList) {
          AddCustomerProblemFactChange add = new 
          AddCustomerProblemFactChange(customer);
          solver.addProblemFactChange(add);
            }

        if (!solver.isSolving()) {
            VehicleRoutingSolution solution = solver.solve(director.getWorkingSolution());
        }

AddCustomerProblemFactChange

public class AddCustomerProblemFactChange implements ProblemFactChange<VehicleRoutingSolution> {

private Customer customer;

public AddCustomerProblemFactChange1(Customer customer) {
    this.customer = customer;
}

@Override
public void doChange(ScoreDirector<VehicleRoutingSolution> scoreDirector) {
    VehicleRoutingSolution solution = scoreDirector.getWorkingSolution();

    solution.setCustomerList( new ArrayList<>(solution.getCustomerList()));
    //solution.buildConnectedCustomer(this.distances, this.customer);

    scoreDirector.beforeEntityAdded(customer);
    solution.getCustomerList().add(customer);
    scoreDirector.afterEntityAdded(customer);
    scoreDirector.triggerVariableListeners();
}
}

Журналы

13:31:01.738 [-8080-exec-7] INFO  Solving restarted: time spent (3), best score (-1init/0hard/0medium/-39840000soft), environment mode (REPRODUCIBLE), random (JDK with seed 0).
13:31:01.749 [-8080-exec-7] DEBUG     CH step (0), time spent (14), score (0hard/-70medium/-39840000soft), selected move count (11), picked move (TimeWindowedCustomer-123{null -> Vehicle-2}).

Вопрос

Проблема с вышеуказанным подходом заключается в добавлении новых клиентов, новыхдобавленная сущность всегда присваивается слишком ограниченному объекту (Vehicle-2).Я не могу понять, как optalanner выбирает Vehicle для назначения клиенту на этапе эвристики строительства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...