Я пытаюсь указать правило для мягкого ограничения в моем .drl
-файле. Предполагается взять два параметра из PlanningSolution
(Schedule
-класса) и затем выполнить Java-функцию с ними. К сожалению, код, похоже, не выполняется (SoftScore не модифицируется, даже если я заменю вызов функции getBlockNumberDifference
на простой -10
). Может кто-нибудь относится к этой проблеме?
У меня есть другое правило, которое определяет HardConstraint, которое также использует вызов функции, который работает отлично.
Планировочное решение:
@PlanningSolution
public class Schedule {
private Semester semester;
@PlanningEntityCollectionProperty
public List<Lecture> getLectureList() {
return lectureList;
}
public void setLectureList(List<Lecture> lectureList) {
this.lectureList = lectureList;
}
public Semester getSemester() {
return semester;
}
public void setSemester(Semester semester) {
this.semester = semester;
}
}
Правило:
import function (...).getBlockNumberDifference;
//...
rule "rule"
when
Schedule ( $s : semester != null && $l : lectureList != null)
then
scoreHolder.addSoftConstraintMatch(kcontext, getBlockNumberDifference($l, $s));
end
Тест:
public static int getBlockNumberDifference(List<Lecture> lectureList, Semester semester) {
System.out.println("Calling Block number Difference " + lectureList.size() + " and " + semester.getBezeichnung());
return -1;
}
Я использую OptaPlanner
в версии 7.9.0 с Spring Boot и Java 8.