Sorting 使用Optaplanner对列表中的项目进行排序
我们目前正在评估optaplanner,以用于我们的切割机计划优化项目 optaplanner根据规则对项目列表进行排序的效率如何 一点背景故事: 客户对我们的期望是,刀具应优化切割机的时间表,以便使用以下因素将其停机时间降至最低:Sorting 使用Optaplanner对列表中的项目进行排序,sorting,schedule,optaplanner,Sorting,Schedule,Optaplanner,我们目前正在评估optaplanner,以用于我们的切割机计划优化项目 optaplanner根据规则对项目列表进行排序的效率如何 一点背景故事: 客户对我们的期望是,刀具应优化切割机的时间表,以便使用以下因素将其停机时间降至最低: 具有高优先级的订单应首先经过机器。(硬分数) 然后在到期日附近下单。(中分) 尽量减少计划中的产品变更,因为每次变更机器都需要停机X分钟进行清洁工作。(软评分) 尽量减少图案之间的刀位变化。操作员每次更改刀位都需要5分钟的时间进行设置。(软评分) 如果以上所有内容都
rule "sort by ItemNumber"
salience 10
when
$previousScore : Number() from accumulate(
TaskGroup(previous!=null, previous.name > name, productType == previous.productType),
sum(-1)
)
$nextScore : Number() from accumulate(
TaskGroup(nextTaskGroup!=null, nextTaskGroup.name < name, productType == nextTaskGroup.productType),
sum(-1)
)
then
scoreHolder.addSoftConstraintMatch(kcontext,$previousScore.intValue()+$nextScore.intValue());
end
规则“按项目编号排序”
显著性10
什么时候
$previousScore:累积中的编号()(
任务组(previous!=null,previous.name>name,productType==previous.productType),
总和(-1)
)
$nextScore:累积中的编号()(
任务组(nextTaskGroup!=null,nextTaskGroup.name
也许规则没有以正确的方式表达,但我们很难理解为什么规则在与其他规则结合使用时不能正确发挥作用
如果我需要提供更多信息,请告诉我(我第一次在这里发帖)
提前感谢您的支持。一些想法需要考虑:将规则3和4设为中等分数(切换为硬-中-软分数),因为规则5以“如果以上所有内容都相同”开头,因此它确实值得自己的分数级别,最低的一级
请看文档中关于“公平约束”的部分。只需对每个任务惩罚其orderNumber与上一个任务的orderNumber之间的差值平方,就可能已经达到了您想要的效果。规则5的描述留下了一些解释的空间(例如,两次1订单号太迟比一次5订单号太迟更糟糕?。因为规则5是一个软权重,如果没有完全遵守所有规则的解决方案(实践中从未有过),它将与规则3和4竞争。我不明白规则是如何实现的“按项目编号排序“实现了规则5中你想要的。谢谢杰弗里的快速回答。在阅读了你的答案和评论之后,把规则5放在它自己的部分是有意义的,你是对的,为它表达的口水规则真的没有任何意义,因为我们没有包括itemNumber之间的差异。这真的帮了我们很多;-)