我正在尝试将时隙分配给planningEntity(包含由约束流处理的房间、组和人员(。
其中一些规划实体具有blockId。当实体具有blockId时,目标是与具有相同blockId的其他实体共享时隙。
我为此定义了一个约束,但我可以看到解算器执行了大量不必要的移动。
public Constraint groupBlockConstraint(ConstraintFactory constraintFactory){
return constraintFactory.forEachUniquePair(Lesson.class,
Joiners.equal(Lesson::getSequenceGroup),
Joiners.filtering((a, b) ->
!Lesson.withoutBlock(a, b)
&& !Lesson.sameTimeslot(a,b)))
.penalize("BlockSequence not in same timeslot", HardSoftScore.ofHard(15));
}
有没有办法更有效地处理这个问题?
约束不会决定解算器将尝试哪些移动。约束仅用于对已执行移动后获得的解决方案进行评分。
因此,如果你看到了你认为不应该执行的动作,你需要配置你的选择器。使用禁忌搜索可能也有帮助。
也就是说,如果没有一个更详细的问题,我就无法提供一个不那么笼统的答案。