gpt4 book ai didi

java - OptaPlanner 车辆路线 - 车辆时间窗口

转载 作者:行者123 更新时间:2023-11-30 02:45:40 24 4
gpt4 key购买 nike

首先,感谢参与这个伟大图书馆的人们。

我的限制是:

  • 我的客户已经准备好并在截止日期前完成。
  • 以及也有准备时间和到期时间的车辆。

我没有 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>

客户的到达时间对于客户来说还可以,但小于该车辆的仓库准备时间。

我不知道我在这里做错了什么。我已阅读Optaplanner - availability of Vehicles和 OptaPlanner 文件;但无法理解并弄清楚如何应对我的情况。

我也无法理解 drl 文件的语法,也找不到解释如何编写它的文档。

编辑 - 向 Geoffrey De Smet 提出的另一个问题

Geoffrey De Smet,非常感谢您的快速回复,非常感谢。我已经尝试过你的改变。根据仓库的就绪时间,到达时间现已确定。然而,关于 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个 parking 场有3辆车。解决方案中只涉及2辆车,两者都有这样的完成时间。)

我尝试将此作为评论添加到 PLANNER-680 JIRA 问题中,但我无法注册并登录。我希望这个编辑符合 Stackoverflow 的格式。

最佳答案

我记得在与 txt 导入器中车辆/仓库的到期时间相关的示例中进行了修改 ( see this line )。它还没有被清理,因此 XML 可以穿透它。但这不是你的问题。

ArrivalTimeUpdatingVariableListener 中的这一行似乎有错误:

    protected void updateArrivalTime(ScoreDirector scoreDirector, TimeWindowedCustomer sourceCustomer) {
Standstill previousStandstill = sourceCustomer.getPreviousStandstill();
Long departureTime = (previousStandstill instanceof TimeWindowedCustomer)
? ((TimeWindowedCustomer) previousStandstill).getDepartureTime() : null;

这没有考虑vehicle.getDepot().getReadyTime()

关于java - OptaPlanner 车辆路线 - 车辆时间窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40280917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com