繁体   English   中英

如何使用OptaPlanner和Spring Boot减少SoftScore?

[英]How to reduce SoftScore with OptaPlanner and Spring Boot?

我试图在.drl -file中为软约束指定规则。 它应该从PlanningSolutionSchedule -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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM