столкновение optaplanner с закрепленными объектами

#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 исправляет обе переменные одновременно. Таким образом, номер останется нулевым.