グループ化アルゴリズム


8

一部の労働者とその居住地のチェックイン時間に応じて、それらをいくつかの車両にグループ化する方法と、車両を職場まで運ぶために車両が従わなければならないルートを計算するアルゴリズムを開発しました。これは、TSP(Travelling Salesman Problem)アルゴリズムとその他のカスタマイズを使用して実現されています。

私たちはそれを超えて改善したいと考えています。とりあえず、車両の定員は4人(5か所ですが、1人は運転席)に固定されており、この量を「可変」にしたいと考えています。言い換えれば、メインアルゴリズムを実行する前に、必要になる可能性のある車両の組み合わせ(およびそのフリーシート)を決定する必要があります。私が車両について話すとき、私は車両の種類について話します。たとえば、車両Aは4席、車両Bは7席などです。つまり、5席のAudi A8を1つ、5席の座席Ibiza、20席のバスを1つ持つことについて話しているのではありません。

これまでのところ、私が考えたのは次のとおりです。

  1. 労働者のグループを決定します。
  2. 必要な車両の数とその(無料)座席を決定します。それがその質問で私が尋ねているものです[a]。
  3. ユーザーは優先する組み合わせを選択して続行します。
  4. 車両の組み合わせを使用してすでに開発されているアルゴリズムを適用し、それが実現可能なソリューションに到達するかどうかを確認します。

私の質問は、[a]アルゴリズムを開発する方法です。次の例は、[a]の実行結果を示しています。

次の人々が4、7、10シートの車両にグループ化するとします。 ここに画像の説明を入力してください

[a]の実行後、結果は次のようになります。

  • G3(2人の労働者):4席の空き車両1台(空席の多い車両は破棄されます)。
  • G2(2人の労働者):4席の空き車両1台(空席の多い車両は破棄されます)。
  • G1(9人の労働者):

    • オプションA:4座席の3台の車両。
    • オプションB:4人乗りの車両1台と7台の車両1台。
    • オプションC:7台の2台の車両。
    • オプションD:10席の車両1台。

私は近似を考えました:

  • 車両のタイプを作成し、それらをソートされたリストに追加します(ソート基準は座席でなければなりません)。
  • 労働者のグループごとに、以下を実行します。
    • 組み合わせを計算します[b]。
  • 画面に結果を印刷します。

したがって、主な問題は、[b]の開発方法です。

助言がありますか?私が自分自身をひどく説明した場合は申し訳ありません。


1
ドライバーはグループの一部ではないのですか?あなたの説明から、彼/彼女はただ車を運転しているように聞こえます。ドライバーは専任ドライバーですか、それとも労働者の一部ですか?
null

3
私はあなたがそれを間違っているのは明らかだと思います。アルゴリズムの基礎は、最後の車両を除くすべての車両を埋めることです。固定グループサイズは、この最適化の大きな穴です。
パパラッツォ

1
あなたが解決しようとしている問題を私が知ることができる限り、「フリートサイズと混合車両のルーティング問題」に関する文献を見るのは良い考えかもしれません
Renaud M.

1
@russellhoff JaCoPについては知りませんが、OR-toolsを試してみたいと思います。これは、別のCPソルバーであり、Java API(重要なようにリストされているライブラリーが与えられている場合)を備えています。それらが提供する例を見ると、おそらくあなたは適応できる何かを見つけることができます(developers.google.com/optimization/routing/tspも見ることができます)
Renaud M.

1
「TSP(Travelling Salesman Problem)アルゴリズム」-TSPを解くための特定のアルゴリズムあること知りません。AIUI、最も一般的なソリューションはシミュレーテッドアニーリングですが、他のアプローチもあると思います...
Jules

回答:


2

私は考えられる解決策を考え出しました:それを解決するために制約充足問題を利用してください。

次のように、グループごとに1つの制約があります。

グループの労働者の量<=各車両の合計(車両の量X車両の座席)

唯一の変数は車両の量です。残りは定数です。したがって、私の例では、次の制約があります。

9 <= 4x + 7y + 10z
2 <= 4a + 7b + 10c
2 <= 4j + 7k + 10i

いくつかのライブラリー(JaCoP、Drools、およびOptaPlanner)を見つけ、現在最初のライブラリーを使用しています。しかし、これらの制約を適切に定義する方法がわかりません...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.