optaplanner слюни забил коррупцию
У меня есть упрощенный файл drools с жестким ограничением для чрезмерно ограниченной проблемы; Я аннотирую переменную планирования как nullable=true. Наилучшим результатом является 0hard/0medium/0soft при начале решения, локальном поиске и окончании решения. Но когда я распечатываю объекты планирования и их значения для лучшего решения, возникают жесткие нарушения ограничений. Вот мое жесткое ограничение (суммировано):
when
Task (interval!=null, $interval1 : interval, $id : id)
Task (interval!=null, $interval2 : interval, id > $id, ..., interval.getOverlap($interval1))
then
scoreHolder.addHardConstraintMatch(kcontext,-1 *$interval1.getOverlap($interval2));
В более сложных наборах правил у меня есть средние ограничения, которые уменьшают оценку для любых задач с нулевыми интервалами.
Я прочитал несколько веток искажения здесь и считаю, что это скорее проблема с моей реализацией, чем ошибка optaplanner/drools. Я пробовал:
- Сокращение правил до одного жесткого ограничения
- Включение регистрации TRACE
- Включение FULL_ASSERT
- Бенчмаркинг
И ищу больше идей по устранению неполадок.
Проблема 2: я вижу много невыполнимых ходов, как показано ниже. У меня нет никаких пользовательских шагов, и я не могу понять, почему эти шаги не выполнимы. В документации утверждается, что две причины недопустимых перемещений: 1) отсутствие изменений в решении (очевидно, это не относится к идентификаторам объектов и что значения, которые я печатаю в toString()), или 2) перемещение, которое невозможно - я не понимаю У меня нет пользовательского isDoable, поэтому я не вижу, как это будет иметь место.
2015-11-11 22:48:42,143 [main] TRACE Move index (0) not doable, ignoring move (...Task@26b1a589@ {132865 3754 3766 20724} <-> ...Task@7b7a17ed@ {44312 27525 27542 19090}).
Помимо компараторов силы и сложности, я выполняю только действительно собственный код, который возвращает мне подмножество всех возможных значений планирования в поставщике диапазонов значений класса объекта планирования, которые относятся к этому объекту.
Использование Optaplanner 6.3 / Drools 6.3
Я сделал плановую переменную аннотацией nullable=false и не могу понять, как можно получить лучший результат 0/0/0 при нарушении двух видов жестких ограничений.
2015-11-13 21:35:17,269 [main] INFO Solving started: time spent (305), best score (uninitialized/0hard/-2795medium/0soft), environment mode (REPRODUCIBLE), random (WELL44497B with seed 4409383736).
2015-11-13 21:35:21,458 [main] INFO Construction Heuristic phase (0) ended: step total (559), time spent (4496), best score (0hard/0medium/0soft).
2015-11-13 21:35:26,962 [main] INFO Local Search phase (1) ended: step total (5106), time spent (10000), best score (0hard/0medium/0soft).
2015-11-13 21:35:26,962 [main] INFO Solving ended: time spent (10000), best score (0hard/0medium/0soft), average calculate count per second (3271), environment mode (REPRODUCIBLE).
Я удалил ONLY_DOWN из конфигурации решателя плана, и это меняет оценку, но я все еще вижу 0 для жестких ограничений, несмотря на некоторые жесткие ограничения, возникающие в лучшем решении. Например:
2015-11-15 13:54:49,058 [main] INFO Solving started: time spent (352), best score (uninitialized/0hard/-1095medium/0soft), environment mode (REPRODUCIBLE), random (WELL44497B with seed 4409383736).
2015-11-15 13:55:07,634 [main] INFO Construction Heuristic phase (0) ended: step total (219), time spent (18930), best score (0hard/0medium/-5052665soft).
2015-11-15 13:55:18,704 [main] INFO Local Search phase (1) ended: step total (5862), time spent (30000), best score (0hard/0medium/-4958070soft).
2015-11-15 13:55:18,704 [main] INFO Solving ended: time spent (30000), best score (0hard/0medium/-4958070soft), average calculate count per second (11905), environment mode (REPRODUCIBLE).