optaplanner - CVRPTW,即使有未使用的车辆,硬约束也会被打破
问题描述
我正在尝试在我的项目中使用 optaplanner VRP,但我遇到了以下问题。
01:39:30.070 [main ] DEBUG CH step (3), time spent (807), score (-29init/-351hard/-25749soft), selected move count (36), picked move ( latitude=42.892975, longitude=-78.877032}, demand=100.3} {TimedWindowedVehicle{Weight=350/ null, Volume=16 /null , Orders =0}}).
01:39:30.172 [main ] DEBUG CH step (4), time spent (909), score (-28init/-652hard/-31285soft), selected move count (37), picked move ( latitude=42.885502, longitude=-78.785842}, demand=300.8} {TimedWindowedVehicle{Weight=350/ null, Volume=16 /null , Orders =0}}).
01:39:30.259 [main ] DEBUG CH step (5), time spent (996), score (-27init/-654hard/-35321soft), selected move count (38), picked move (latitude=42.917089, longitude=-78.857812}, demand=2.09} { latitude=42.892975, longitude=-78.877032}, demand=100.3}}).
01:39:30.352 [main ] DEBUG CH step (6), time spent (1089), score (-26init/-656hard/-38788soft), selected move count (39), picked move ( latitude=42.85082, longitude=-78.802339}, demand=1.65} { latitude=42.885502, longitude=-78.785842}, demand=300.8}}).
01:39:30.431 [main ] DEBUG CH step (7), time spent (1168), score (-25init/-658hard/-40532soft), selected move count (40), picked move (latitude=42.907763, longitude=-78.792994}, demand=2.05} {null -> TimedWindowedVehicle{Weight=350/ null, Volume=16 /null , Orders =0}}).
在我的解决方案中,车辆清单上有 50 辆车。但是当我运行示例 Optaplaaner 时,它打破了车辆容量的硬性限制,仅使用 4 辆车辆,而解决方案中还有其他未使用的车辆。只是想知道我是否在这里遗漏了什么。
解决方案
分数是-25init/-658hard/-40532soft
,其中包含-25init
,这意味着构建启发式尚未完成(仅在 1168 毫秒之后,不足为奇)并且 25 次访问仍未分配。这并不能解释为什么它打破了 658 个硬约束,而你却说有未分配的车辆。
首先运行System.out.println(scoreManager.create(solverFactory).getSummary(yourSolution));
以确定哪些硬约束被打破以及被哪些实体打破。
其次,假设访问 A 距离最近的站点 3 小时车程,站点在 8:00 开放,A 的 dueTime 是 10:00(而 readyTime 是 9:00,所以时间窗口是上午 9 点到 10 点)。不管有多少可用的车辆,是否有可能不打破硬约束?
推荐阅读
- java - springboot 应用 javax 到 jakarta 迁移问题
- python - 如何导入已安装到另一个目录的 Python 库?
- python - 如何避免在 Mac 上使用 discord.py 获取 ClientConnectorCertificateError
- javascript - 为谷歌分析在 chrome 扩展 (chrome://extensions) 上设置 cookie
- c - 数组重新初始化会导致内存泄漏吗?
- javascript - 如何使用一个公共字段提取数据并在javascript中创建嵌套数组
- java - 如何在不使用java api指定文档ID的情况下将文档插入elasticsearch中的索引?
- git - 使用两个不同的 bitbucket 帐户从 bitbucket 中“获取”
- jenkins - 无法为某些詹金斯工作设置环境变量
- security - 我目前正在测试一个桌面应用程序。我已经包含了内存、CPU util、电池、电源等。我应该执行哪些非功能性测试用例?