2016-10-27 6 views
0

まず、この素晴らしい図書館で呼び出された人のおかげで、OptaPlanner Vehicle Routing - 車両用時間窓

私の制約は以下のとおりです。

  • 私は準備ができ起因回を持っている顧客を持っています。
  • また、準備が整い、期限が切れている車両。

私は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は、顧客のためにOKですが、その車両のデポReadyTimeよりも小さいです。

ここで間違っていることがわかりませんでした。 私はOptaplanner - availability of VehiclesとOptaPlannerの文書を読んでいます。私の状況のた​​めに何をすべきか理解することはできませんでした。

また、drlファイルの構文を理解できず、書き方を説明するドキュメントが見つかりませんでした。

編集 - ジェフリー・デスメットに別の質問

ジェフリー・デスメット、あなたの速いresposeのためにどうもありがとうございました、それが非常に高く評価されています。私はあなたの変更を試みました。デポのReadyTimeに応じて到着時間は現在OKです。しかしデポの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> 

は、到着時間が102万未満すべきではありませんか? (3台のデポには3台の車両がありますが、その解決策は2台しかありませんでした。)

これをPLANNER-680 JIRAの問題にコメントとして追加しようとしましたが、歌うとログインする。私はこの編集がStackoverflowのフォーマットに従ってOKであることを願っています。

答えて

1

私は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()を取ることはありません。

+1

[7.0.0.Beta3用に修正](https://issues.jboss.org/browse/PLANNER-680) –

+0

すごく速いです:)バグ修正コードを追加できますか?または私が7.0.0.Beta3ファイルに到達できる方法はありますか? – Koray

+0

リンクを参照してくださいjira問題。 –

関連する問題