在OptaPlanner中,如何限制将事实分配给实体的次数?

时间:2018-11-16 23:56:04

标签: optaplanner constraint-satisfaction resource-scheduling

以课程安排为例,一位讲师只能教授n门课程。为了实现这一点,我的想法是查找给定讲师正在教授的所有课程,并通过负差将不良率增加,如果低于,则减少一半。我将如何去做(得到指定教授教授的所有课程)?

1 个答案:

答案 0 :(得分:1)

如果您引入了List<Course> courseList双向变量(在Instructor类中的6.2. Bi-directional Variable (Inverse Relation Shadow Variable)节中,则可以访问他的所有课程:

@PlanningEntity
public class Course {
    @PlanningVariable(valueRangeProviderRefs = {"instructorRange"})
    private Instructor instructor;
}

@PlanningEntity 
public class Instructor {
    @InverseRelationShadowVariable(sourceVariableName = "instructor")
    private List<Course> courseList;
}

关于得分,当教练分配的课程过多时,对硬分数进行处罚,而当课程数量不足时,对软分数进行处罚。