如何在Optaplanner的课程XML文件中设置积极的软约束(奖励)

时间:2013-10-05 14:57:50

标签: java optaplanner

我们在OptaPlanner的XML文件中添加了负面的软约束,用于课程课程问题,比如

<unavailablePeriodPenaltyList id="737">
    <UnavailablePeriodPenalty id="738">
            <id>0</id>
            <course reference="66" />
            <period reference="678" />
    </UnavailablePeriodPenalty>
</unavailablePeriodPenaltyList>

但如何在xml文件中为课程课程问题添加积极的软约束?

使用哪个XML标记?

积极的软约束例子:B老师喜欢在星期一早上教学

1 个答案:

答案 0 :(得分:1)

开箱即用,课程表示例仅支持许多约束(请参阅完整列表的文档)。你提到的一个新的不是其中的一部分。但它很容易添加(假设你是一个Java程序员):

以下是该得分规则的样子:

// Availabilities: Each lecture in a period unavailable for that course.
rule "unavailablePeriodPenalty"
    when
        $unavailablePeriodPenalty : UnavailablePeriodPenalty($course : course, $period : period)
        $lecture : Lecture(course == $course, period == $period)
    then
        scoreHolder.addHardConstraintMatch(kcontext, -1);
end

同样,您可以定义:

  • 一个FavoritePeriodReward.java域对象(也在CurriculumCourseSchedule中为它添加一个列表)

  • XML元素<FavoritePeriodReward>

  • 以及奖励它的分数规则。

例如:

rule "FavoritePeriodReward"
    when
        $reward : FavoritePeriodReward($teacher : teacher, $period : period)
        $lecture : Lecture(teacher == $teacher, period == $period)
    then
        scoreHolder.addHardConstraintMatch(kcontext, 1); // +1 instead of -1
end