2016-07-10 2 views
3

私たちは現在の車両ルートを時間窓で改善しようとoptaplannerを使用しています。Optaplannerでランチブレイクと追加のデポの返品をモデリングする

  • 私たちの運転手は、運転の開始から3時間目から5時間目までの30分のランチブレークを持つ必要があります)、ドライブが5時間より短い場合は、休憩は必要ありません。
  • 一部のパッケージ(すべてではない)が特定の時間までにデポに戻ることを確認する必要があります。例えば、顧客の中には8時から8時30分までのピックアップ時間がありますが、そのパッケージ/パーセルは12時までにデポに戻さなければなりません。

第二の問題のために私たちの現在の考え方は二つの新しいクラスを作成することです:

public class ReturningCustomer extends TimeWindowedCustomer { 

    protected int returningId; 

public class ReturnToDepot extends TimeWindowedCustomer { 

    protected int returningId; 

最初の1つのモデルの顧客であることをされている特別なパッケージとし戻ってきた。 2番目はデポへの運転者の復帰を表す「偽の」顧客です。 ReturnToDepotはデポ自身と同じ場所にあります。 DroolsのIDを比較すると、同じ車両のルートにいることが保証されます。 ReturnToDepotを別の顧客として扱うことで、プランナーがルートに最適な方法を見つけることができます。

しかし、ランチブレイクのモデリングでは、どうすればよいかわかりません。

これをモデル化する良い方法はありますか?昼休みをモデル化する最良の方法は何でしょうか?私たちに正しい方向を指すサンプルがありますか?

ありがとうございました。 TimeWindowed VRPの例から始め

答えて

3

、あなたはこのようなものを2 REQS行うことができます。

  • ランチ休憩:第3回時間後のいずれかの到着は別のものを追加するようにVariableListenerにArrivalTimeは計算を調整します到着時間30分。ビジネスのニーズに応じて、たとえば、場所にない場所間で休憩することもできます。オプションで、3時間から5時間の間に到着することを保証するための厳しい制約を追加します。

  • デポまでの時間に戻って取得します:arrivalBackToDepotTimeと呼ばれる車両に影変数を追加しても、そのフィールドを更新する必要があるArrivalTimeUpdateVariableListenerを再利用するvariableListenerRefを使用しています。ビークルのarrivalBackToDepotTimeがデポに行くのに必要な時間よりも短いことを各顧客ごとに確認するためのハード制約を追加します。

関連する問題