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

In OptaPlanner, how does one restrict the number of times a fact is assigned to an entity?

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

如果您引入 List<Course> courseList 双向变量(讲师 class 中的 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;
}

至于评分,当老师分配的课程太多时,硬分会受到惩罚,而当分配的课程不够时,软分会受到惩罚。