我正在尝试在我的 .drl
文件中指定软约束规则。它应该从 PlanningSolution
(Schedule
类)获取两个参数,然后用这些参数执行 Java 函数。遗憾的是,代码似乎没有被执行(即使我用普通的 -10
替换函数调用 getBlockNumberDifference
,也没有修改 SoftScore)。有人可以解决这个问题吗?
我有另一个规则,指定一个 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;
}
我在版本 7.9.0 中使用 OptaPlanner
以及 Spring Boot 和 Java 8。
最佳答案
规划解决方案未插入 Drools IIRC 的工作内存中,因此该规则的 LHS(when 侧)永远不会匹配。
我在这一点上可能是错的 - 为了证明这一点,将其设置为 when Schedule() then System.out.println("not in wm");end
并看看您是否看到它出现。
关于java - 如何使用 OptaPlanner 和 Spring Boot 降低 SoftScore?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56701763/