【发布时间】:2016-10-27 09:26:30
【问题描述】:
首先,感谢参与这个伟大图书馆的人。
我的限制是:
- 我的客户已经准备好和到期了。
- 还有车辆也有准备和到期时间。
我在 Java 方面没有经验,我尝试通过使用提供的示例项目发送和接收 xml 来使用 OptaPlanner。对于客户时间窗口,我使用了“VrmTimeWindowedCustomer”,这没有问题。对于车辆时间窗口约束,我尝试使用“VrpTimeWindowedDepot”
我的想法是:当一个站点可用时(ReadyTime),车辆开始从该站点工作并前往客户。然而,在我的尝试中,OptaPlanner 并没有给出我期望的结果:
<depotList id="139">
<VrpTimeWindowedDepot id="140">
<id>1</id>
<location class="VrpRoadLocation" reference="3"/>
<readyTime>540000</readyTime>
<dueTime>1020000</dueTime>
</VrpTimeWindowedDepot>
<VrpTimeWindowedDepot id="141">
<id>2</id>
<location class="VrpRoadLocation" reference="5"/>
<readyTime>540000</readyTime>
<dueTime>1020000</dueTime>
</VrpTimeWindowedDepot>
</depotList>
结果是:
<VrpVehicle id="143">
<id>1</id>
<capacity>100001002</capacity>
<depot class="VrpTimeWindowedDepot" reference="140"/>
<nextCustomer class="VrpTimeWindowedCustomer" id="144">
<id>42</id>
<location class="VrpRoadLocation" reference="85"/>
<demand>206</demand>
<previousStandstill class="VrpVehicle" reference="143"/>
<nextCustomer class="VrpTimeWindowedCustomer" id="146">
...
<vehicle reference="143"/>
<readyTime>0</readyTime>
<dueTime>1440000</dueTime>
<serviceDuration>12000</serviceDuration>
<arrivalTime>22137</arrivalTime>
</nextCustomer>
<vehicle reference="143"/>
<readyTime>0</readyTime>
<dueTime>1440000</dueTime>
<serviceDuration>12000</serviceDuration>
<arrivalTime>8527</arrivalTime>
</nextCustomer>
</VrpVehicle>
客户的 ArrivalTime 对客户来说是可以的,但小于该车辆的 Depot ReadyTime。
我无法找出我在这里做错了什么。 我已阅读Optaplanner - availability of Vehicles 和 OptaPlanner 文档;但无法理解和弄清楚我的情况该怎么办。
我也无法理解 drl 文件的语法,也找不到解释如何编写它的文档。
编辑 - Geoffrey De Smet 的另一个问题
Geoffrey De Smet,非常感谢您的快速回复,非常感谢。我已经尝试过您的更改。根据仓库的 ReadyTime,到达时间现在可以了。然而,关于 Depot 的 DueTime 可能还有另一个问题:
<VrpTimeWindowedDepot id="144">
<id>3</id>
<location class="VrpRoadLocation" reference="7"/>
<readyTime>540000</readyTime>
<dueTime>1020000</dueTime>
</VrpTimeWindowedDepot>
要从该站点访问车辆的最后一位客户是:
<nextCustomer class="VrpTimeWindowedCustomer" id="183">
<id>36</id>
<location class="VrpRoadLocation" reference="73"/>
<demand>187</demand>
<previousStandstill class="VrpTimeWindowedCustomer" reference="182"/>
<vehicle reference="146"/>
<readyTime>0</readyTime>
<dueTime>1440000</dueTime>
<serviceDuration>10000</serviceDuration>
<arrivalTime>1082091</arrivalTime>
</nextCustomer>
到达时间不应该小于1020000吗? (3 个站点有 3 辆车。在解决方案中只涉及 2 辆车,两者都有这样的完成时间。)
我已尝试将此作为评论添加到 PLANNER-680 JIRA 问题,但我无法唱歌和登录。我希望根据 Stackoverflow 的格式,这个编辑没问题。
【问题讨论】:
标签: java drools optaplanner