[英]How to reduce SoftScore with OptaPlanner and Spring Boot?
我试图在.drl
-file中为软约束指定规则。 它应该从PlanningSolution
( Schedule
-class)中获取两个参数,然后使用这些参数执行Java函数。 遗憾的是代码似乎没有被执行(没有修改SoftScore,即使我用普通的-10
替换函数调用getBlockNumberDifference
)。 有人可以解决这个问题吗?
我有另一个规则,指定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 Schedule() then System.out.println("not in wm");end
制作它when Schedule() then System.out.println("not in wm");end
并看看你是否看到它出现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.