2

私はルート最適化の初心者であり、jsprit を使用して次のビジネス要件を解決するための助けをいただければ幸いです。jsprit の基本を学ぶのに役立つ Stefan Schröder からフィードバックをもらいました。最初にビジネス要件を説明し、その後いくつか質問をします。

目的は、1 か月で完了する必要があるメンテナンス ジョブのリストをスケジュールすることです。1 か月分の毎日のスケジュールを作成する必要があります。ここでの目的は、1 日あたり最大数のジョブを実行することです。

  • リージョンごとに 4 つのデポがあります
  • 各地域には約 70 の倉庫があり、合計で 300 の倉庫があります。
  • その地域内の各デポと倉庫の間の距離がわかっている
  • 地域ごとに異なるタイプの車両が 3 ~ 4 台、合計 12 台あります。
  • 地域内の車両は、その地域内の倉庫にのみサービスを提供できます
  • 地域内の車両には、たまたま終点となる同じ始点があります
  • 車両には、容量、集荷、または配送の要件はありません
  • 車両は、保守作業を行う作業員の輸送にのみ使用されます
  • 各車両の平均速度がわかります
  • 約80のメンテナンスジョブタイプがあります
  • 各ジョブ タイプの既知の所要時間 (分単位)
  • メンテナンス ジョブは特定の時間に開始する必要はありません
  • 毎月、実行する必要がある約 200 のメンテナンス ジョブがあります。
  • これらのジョブは、どの倉庫でも可能です
  • 同じ日または別の日に同じ倉庫で複数のジョブが発生する可能性があります
  • 1 日 8 時間のシフトが 3 回あります。午前6時~午後2時、午後2時~午後10時、午後10時~午前6時
  • 車両は、シフトの開始時にデポ倉庫を出発し、8 時間のシフト内でできるだけ多くの倉庫を訪問します。
  • 次の倉庫に移動するか、デポ倉庫に戻る前に、ジョブが実行されている間、車両は倉庫で待機する必要があります。

私の基本的な理解は、保守作業は jsprit でサービスとして定義でき、車両ごとに開始/返却時間を設定できるということです。また、コスト マトリックスを使用して、車両と倉庫の関係に時間と距離を追加することもできます。私が持っている質問は次のとおりです。

  1. 各メンテナンス ジョブはサービスとして定義する必要があります。その結果、VRP ソルバーに渡されるサービス オブジェクトが 200 になりますよね?
  2. VehicleTypeImpl には、addCapacityDimension()、setCostPerDistance()、および setCostPerTime() メソッドがあります。これらは正確には何であり、上記のケースをどのように適用しますか?
  3. Service.Builder には addSizeDimension() メソッドがあります。それは何をするためのものか?
  4. costMatrixBuilder には、TransportDistance と TransportTime を追加するメソッドがあります。これらのメソッドで使用される単位と、それらをどのように使用できますか?
  5. デポごとに Coordinate を定義し、VehicleImpl ごとに setStartLocationCoordinate() メソッドに渡す必要があります。これは正しいですか?
  6. vehicleBuilder には setLatestArrival( double maxDuration); があります。ここで使われているユニットは?

上記のケースを解決するための助けに感謝します。

ありがとう、アダム

EDIT1:

いくつかの質問

A. setEarliestStart() および setLatestArrival() メソッドは double 値を受け入れますが、これらのメソッドに実際の日付として最も早い出発と最も遅い到着を指定するにはどうすればよいですか? たとえば、開始時刻は 2014 年 11 月 28 日の午後 2 時で、終了時刻は同日の午後 10 時です。

B. サービス時間を分単位で指定する方法はありますか?

C. VehicleTypeImpl.Builder.setMaxVelocity(double inMeterPerSeconds) メソッドは最大速度を想定していますが、車両の平均速度を指定する方法はありますか?

D. すべての車両は 3 シフトで作業する必要があります。これは、同じ車両を 3 回定義する必要があるということですか? シフトごとに 1 つずつ、さまざまな最早出発時刻と最遅到着時刻を指定します。

E. ジョブは月のいつでも実行できるため、各ジョブの時間枠は月の始まりと終わりとして Service.Builder.setTimeWindow() メソッドに渡されますか?

4

1 に答える 1

1

ad1) 正しい

ad2) 容量が役割を果たさない場合、addCapacityDimension(..) は必要ありません。その場合は、このメソッドを使用して、重量、容積、パレット数 (3 次元) など、任意の数の容量次元を定義できます。.setCostPerDistance(..) を使用すると、名前が示すように、距離単位あたりのコスト (例: 1€/km) を設定できます。したがって、.setCostPerTime(..) を使用して、時間単位あたりのコストを設定します (例: 20 €/時間)。したがって、車両/ドライバーが 1 時間で 100 km 移動した場合、100 km * 1 €/km + 20€/時間 * 1 時間の費用がかかります。

ad3) サービスが車両の容量を消費する可能性があります。サービスは、顧客/サービス サイトでの貨物の集荷に言及される場合があります。それは特定の容積、重量を持ち、特定の番号に積み込むことができます。パレットの。これは、.addCapacityDimension(..) で定義するものです。

ad4) 単位を定義します。これは、コスト パラメータを設定するときに想定する同じ単位である必要があります。

ad5) 正しい。ただし、座標は必ずしも必要ではありません。locationId または座標のいずれかが必要ですが、両方を設定できます。locationId は、時間と距離の関係を costMatrix に追加するときに使用するものと同じである必要があります。

ad6) 繰り返しますが、単位を決定します。

于 2014-11-26T12:58:00.043 に答える