java - Optaplanner 如何使用相同的数据但不同的时间进行 2 种不同的求解
问题描述
嗨,我有一个数据,我解决了 2 次,第一次是 25 分钟,第二次是 1 分钟。两种解决方案的起始分数相同,规则文件相同,求解方法也相同(模拟退火),但 25 分钟解决分数为 0 硬 / 22,251,950 中等 / 22 正常,1 分钟解决分数为 0 硬 / 22,251,920 / 27 正常可以看到最低求解持续时间具有最低分数(更好的优化)这是如何发生的。你能告诉我 optaplanner 在这种情况下是如何工作的吗
解决方案
模拟退火比 Tabu Search 和 Late Acceptance 变化无常。每次 SA 运行都可能不同,并且更改 2 次运行之间的终止将使它们大大不同。对于 TS 和 LA(与 SA 不同),较长的跑步总是至少与较短的跑步得分相同(如果没有其他变化)。
话虽如此,真正的问题是为什么长期运行没有提高中等分数。好吧,基本上,使用默认移动选择器时,它陷入了局部最优状态,并且(具有讽刺意味的是)没有足够的时间摆脱它。较短的运行只是幸运的。可能软约束与中等约束是对抗的。
真正的解决方案是添加更多粗略的移动选择器,例如支柱移动或自定义移动。比较这 2 个解决方案,并找出哪种移动方式能够使更长的结果不被卡住。
推荐阅读
- ruby - /usr/lib/ruby/2.7.0/open3.rb:213:in `spawn': 没有这样的文件或目录 - 节点 (Errno::ENOENT)
- php - 如果没有图像,规则隐藏 DIV?
- visual-c++ - 如何启用/禁用 CMFCRibbonButton 对象?
- python - 运行'$ python manage.py collectstatic --noinput'时出错。即使使用heroku docs的静态配置
- javascript - 如何应用 localStorage 来选择选项和 classList.add?
- java - java中的Spark MySQL连接器
- typescript - 更新已经存在的数组并将新数据推送到同一个数组中
- node.js - ExpressJS 错误 TypeError: n.status is not a function 真的是通过振铃器运行我吗?
- angular - Angular & RxJS:如何管理从服务到组件的错误
- botframework - 如何使用 MessagingExtensionActionResponse 为团队机器人返回简单的 html 响应