Я создаю решатель, используя шаблон временного зерна. Это похоже на планирование встреч. В нем есть неподвижные объекты, реализованные для поддержки фиксированного расписания пользователя. При запуске решателя эвристика построения завершается, оставляя -2 балла инициализации. Критерий завершения - 30 секунд. После этого решение прекращается без правильного решения, как показано в журнале ниже.
Где я ошибаюсь?
19:23:25.587 [main] INFO o.o.core.impl.solver.DefaultSolver - Solving started: time spent (22), best score (-4init/0hard/0soft), environment mode (REPRODUCIBLE), random (JDK with seed 0).
19:23:25.613 [main] DEBUG o.o.c.i.c.DefaultConstructionHeuristicPhase - CH step (0), time spent (50), score (-3init/1522656532800hard/12soft), selected move count (96), picked move (com.atomiton.vopak.activities.Activity@762ef0ea {null -> TimeGrain - 95 [1524180600000]}).
19:23:25.620 [main] DEBUG o.o.c.i.c.DefaultConstructionHeuristicPhase - CH step (1), time spent (57), score (-2init/3045313098000hard/24soft), selected move count (96), picked move (com.atomiton.vopak.activities.Activity@31f9b85e {null -> TimeGrain - 95 [1524180600000]}).
19:23:25.621 [main] INFO o.o.c.i.c.DefaultConstructionHeuristicPhase - Construction Heuristic phase (0) ended: time spent (58), best score (-2init/3045313098000hard/24soft), score calculation speed (6655/sec), step total (2).
19:23:55.563 [main] DEBUG o.o.c.i.l.DefaultLocalSearchPhase - LS step (0), time spent (30000), score (-2init/3045311298000hard/24soft), best score (-2init/3045313098000hard/24soft), accepted/selected move count (0/6961207), picked move (com.atomiton.vopak.activities.Activity@76ed1b7c {TimeGrain - 95 [1524180600000] -> TimeGrain - 94 [1524178800000]}).
19:23:55.563 [main] INFO o.o.c.i.l.DefaultLocalSearchPhase - Local Search phase (1) ended: time spent (30000), best score (-2init/3045313098000hard/24soft), score calculation speed (232497/sec), step total (1).
19:23:55.564 [main] INFO o.o.core.impl.solver.DefaultSolver - Solving ended: time spent (30001), best score (-2init/3045313098000hard/24soft), score calculation speed (232038/sec), phase total (2), environment mode (REPRODUCIBLE).




Construction Heuristic phase (0) ended:
time spent (58),
best score (-2init/3045313098000hard/24soft),
score calculation speed (6655/sec),
step total (2).
2 ступени, поэтому можно перемещать только 2 объекта. Остальные должны быть неподвижными, в том числе и те, которые вызывают -2init.
PS: Что-то не так с жесткой оценкой. Либо он переполняется (используйте варианты с длинным счетом), либо это неправильный знак ограничения.
CH step (1), time spent (57), score (-2init/3045313098000hard/24soft),
selected move count (96),
picked move (...Activity@31f9b85e {null -> TimeGrain - 95 [1524180600000]})
Выбранный ход кажется простым ChangeMove, поэтому есть только одна переменная планирования.
Спасибо, Geoffery. Я уже использую варианты с длинным счетом. Проверю знак. Но тогда почему LS ждет 30 секунд (мои критерии завершения), а затем просто делает 2 хода и заканчивает?
Позднее принятие (алгоритм по умолчанию) застрянет в глобальном или локальном оптимуме. Это происходит только с действительно небольшими наборами данных. Включите ведение журнала TRACE, чтобы увидеть, что на самом деле происходит.
Включил ведение журнала TRACE и при программировании попал в самые распространенные ловушки. Сравнение миллисекунд и секунд! API Java DateTime действительно нуждаются в улучшении. Спасибо за помощь @Geoffrey.
Удалите имена классов из вывода журнала, чтобы отступ работал