Optaplanner を使用して、次の多くの要件を持つ複雑な vrp 問題を解決することに取り組んでいます。以下の2点を除いて、ほとんど対応できました。
- ドロップオフ前のピックアップのみ
- 顧客をピックアップする途中で特定のパスを適用します。
目標は、近い目的地に向かう顧客のグループをピックアップし、同じ車両に乗せることです。
前もって感謝します!助けてくれてありがとう!
この問題は、VRP TimeWindow の例と非常に似ていますが、次の変更があります。
- お客様は所定の場所(サーキット内)でピックアップされます
- すべてのピックアップの顧客には、ドロップオフの目的地があります(
サーキットの外) - 車両はドロップオフに向かい、再びピックアップに戻ることはありません。(車両がサーキットを離れると、設定された場所で顧客を降ろすだけです)
- サーキットを移動する車両は、特定の経路を移動する必要があります (一方通行の道を想像してください)。
各ピックアップからピックアップまでのスコアで道路距離を使用する計画が知られています。Pickup -> Drop-Off は不明 (Air を使用する予定)。
サーキットを離れて顧客を降ろした後、車両がそれ以上の顧客を迎えに戻ってこない可能性があることを強制するのに苦労しています。これは、車両がサーキットで作成できる固定パスで機能します。
私の主なアイデアは、次のことを行うことでした。
- 集荷と顧客を区別するために顧客に TYPE 属性を追加しました
- 車両が到着した時点ですべての DropOffIds を追跡する顧客クラスに変数リスナーを追加し、その場所に向かう乗客がいる場合にのみ dropOffLocation に移動するようにしました。車両がドロップオフに到着すると、そのアイテムがリストから削除されます。(本質的にスタックとして機能します)。
- 問題は、理論的には、顧客の場所が比較的近い場合、顧客を降ろしてから別の顧客をピックアップする車両から停止しないことです。
- また、サーキットで車両が通らなければならない固定ルートを強制するのに苦労し、コスト マトリックスを使用してソフト制約を使用してルートの暗黙性を強制することを計画していました (コストがかかりすぎるため、車両は後退したり、ポイントをスキップしたりしません)。高い)、しかし、本来あるべき方法で動作していません。