4

親愛なる OptaPlanner エキスパートへ!

OptaPlanner (または同様のオープン ソース Java フレームワーク) を使用して、自転車メッセンジャー サービスのルートを最適化したいと考えています。5 人のメッセンジャーが特定の発信元から 30 通の封筒を受け取り、特定の宛先に配送する必要があるとします。

            X(FROM) Y(FROM) X(TO)   Y(TO)
envelope 1  13745   55419   13883   55756
envelope 2  8406    53246   13937   55854
envelope 3  15738   57396   35996   79499
envelope 4  12045   60418   19349   57118
envelope 5  13750   56416   35733   78403
envelope 6  13190   57068   11860   59749
envelope 7  15021   55768   14098   57379
envelope 8  11513   58543   11501   59683
envelope 9  12013   64155   14120   59301
envelope 10 15006   57578   35511   78426
envelope 11 11450   58819   11916   58338
envelope 12 13728   56304   35524   79013
envelope 13 15104   60923   17937   57066
envelope 14 11373   58388   13983   53804
envelope 15 18575   55186   18718   54381
envelope 16 11639   50071   17363   58375
envelope 17 11273   53410   10860   60441
envelope 18 13766   59041   13963   57769
envelope 19 16138   55801   16183   56024
envelope 20 13728   56146   14301   61694
envelope 21 12848   57059   13586   59734
envelope 22 13645   56488   13955   55859
envelope 23 12896   56838   13937   55908
envelope 24 13341   58150   35709   78924
envelope 25 13483   57303   13614   57820
envelope 26 12741   63478   15230   59838
envelope 27 14676   51691   16501   48361
envelope 28 13748   54933   14120   56110
envelope 29 17875   59565   20453   61903
envelope 30 9772    56424   6404    55601

私の 5 人のメッセンジャーは市内に分散されており (したがって、私は 1 つのデポを持っていません)、元の場所に戻る必要はありません。

            X       Y
messenger A 13750   57578
messenger B 15104   53410
messenger C 13728   55801
messenger D 12741   63478
messenger E 14676   18575

次のハード制約を使用します。

  • 各メッセンジャーは最大 15 個の封筒を運ぶことができます
  • 封筒の移動方法は、直接ルートの 3 倍未満にする必要があります (配達に時間がかかりすぎないようにするため)。

そして、これらのソフト制約:

  • メッセンジャーの循環方法を最適化する

車両のルーティングの例を調整する必要があると思いますが、初心者なのでどこから始めればよいかわかりません。メッセンジャーが封筒を配達しようとする前に、封筒が確実に取り出されるようにするにはどうすればよいですか? ここで私を助けてくれたら素晴らしいだろう...

ありがとうございました!

4

2 に答える 2

6

私は OptaPlanner の専門家ではありません。しかし、括弧内で言及したもの (または同様のオープン ソース フレームワーク) をピックアップしたいと思います。ただし、OptaPlanner がすでに合理的な解決策を提供している場合は、おそらくこれを無視できます。そうでない場合、または結果を比較したいだけの場合、これは興味深いかもしれません。

まず、あなたが説明する問題は単純に聞こえますが、より困難な問題の 1 つです。これは基本的に、集荷と配達、複数のデポ、オープン ルート、タイム ウィンドウ/制限を備えた Capacitated VRP です。この種の問題に対する多くのオープン ソース ソリューションはおそらく見つからないでしょう。

jspritというプロジェクトを作成しました。jsprit はあなたの問題を解決できます。OptaPlanner に類似したものでも、フレームワークでもありません。配車ルートの問題に重点を置いており、Java ツールキット (ライブラリのセット) です。私はあなたの問題を実装しました。ここで、コメント付きのコードを見つけることができます。

制約の 1 つを少し変更しました (「配送に時間がかかりすぎないように、封筒の移動方法は直接経路の 3 倍未満にする必要があります」)。配信が比較的高速であることを確認したい場合は、「最高の」メッセンジャーに対してこの制約を設定する方がよいと思います. したがって、私はそれを (「エンベロープが移動する方法は、最良のメッセンジャーを使用した直接ルートの 3 倍未満にする必要があります。つまり、直接ルートで最速のメッセンジャーです」) に置き換えました。

結果を見て (プロットして簡単なレポートを取得できます)、他の制約やアルゴリズム構成を試して、要件に適合させます。ご不明な点がございましたら、お気軽にお問い合わせください。

jspritは絶対的な用語であり、非常に若いプロジェクトである OptaPlanner と比較すると、最終的にはバグや制約の定義が本来あるべきほど快適ではないことがわかります。しかし、良いことは、バグを報告したり、代替ソリューションを批判したり提案したりすることによって、それを改善するのを助けることができるということです:)。

于 2013-12-05T23:01:39.193 に答える