#optaplanner
#optaplanner
Вопрос:
В моем проекте планирования курса optaplanner пользователь добавляет несколько лекций по исправлению перед запуском алгоритма планирования. Они становятся неподвижными с помощью @PlanningPin
.
Проблема в том, что как только они закреплены, они не распространяются по ConstratinsStream. Таким образом, ограничение столкновения не работает, и они не сталкиваются с нефиксированными объектами. Вот минимальное нерабочее ограничение hello-world:
определение ограничения:
factory.from(Lecture.class).filter(t -> helloWorld(t)).penalize...
функция hello world:
public static boolean helloWorld(Lecture m) {
if (m.isFixed()) {System.out.println("hello world"); }
return true;
}
Правильно ли я предполагаю, что фиксированные объекты должны распространяться по потоку, и если да, может ли кто-нибудь дать какой-либо совет о том, где может быть моя ошибка?
Ответ №1:
Объекты распространяются по потоку, независимо от того, закреплены они или нет.
Но если объект закреплен, а переменная планирования — null
, то, как и в случае с не закрепленными объектами, он не будет распространяться с .from()
, только с .fromUnfiltered()
. Разница в том, что не закрепленный объект будет сделан ненулевым с помощью эвристики построения.
Комментарии:
1. Спасибо, это помогло: у меня есть две переменные планирования (временной интервал и комната), и комната была нулевой с фиксированными объектами, поэтому они не были распространены. Я почему-то думал, что исправлен только временной интервал, но optaplanner @PlanningPin исправляет обе переменные одновременно. Таким образом, номер останется нулевым.