我正在使用Optaplanner 7.37计划一个时间表,并且正在实现一个积极的软约束,这样就可以先安排更高优先级的任务。我想做增量分数的计算,这是根据优先值奖励。
我已经尝试过以下方法,但正如您所看到的,它只会在每个任务计划中添加一个软分数单位(因此它不会因任务的优先级而有所不同。
private Constraint scheduleHighPriorityTasks(ConstraintFactory factory) {
return factory.from(ShiftAssignment.class)
.reward('High priority work done', HardSoftScore.ONE_SOFT);
}我想要的大概是这个虚构的代码:
private Constraint scheduleHighPriorityTasks(ConstraintFactory factory) {
return factory.from(ShiftAssignment.class)
.multiply(ShiftAssignment::getTaskPriority)
.reward('High priority work done', HardSoftScore.ONE_SOFT);
}这样,如果getTaskPriority返回优先级为3,则软分数将以配置权重的3倍作为奖励。
我不认为我的要求那么复杂,所以我认为可能有办法做到这一点。
有什么想法吗?
发布于 2020-05-28 12:46:15
如果没有其他软约束,则只需使用接受matchWeigher的重载奖励方法:
private Constraint scheduleHighPriorityTasks(ConstraintFactory factory) {
return factory.from(ShiftAssignment.class)
.reward('High priority work done', HardSoftScore.ONE_SOFT, ShiftAssignment::getTaskPriority);
}如果有其他软约束,但这总是更重要的,那么这不是软约束,而是中等约束(并且没有其他介质约束)。
如果有其他软约束可以超过或不超过这个优先级约束,那么它就会变得更加复杂。在这种情况下,我可能会使用getTaskPrioritySoftWeight而不是getTaskPriority。
https://stackoverflow.com/questions/62062203
复制相似问题