web-dev-qa-db-ja.com

仕事の優先順位の割り当てに適したアルゴリズムは何ですか?

私は現在、次の要件を持つプロジェクト(PHP)を行っています。

  1. 特定の優先順位でソートされた人のリストがあります。仕事はこの優先度で彼らに割り当てられるべきです。例えばリストがT1、T2、T3の場合、T2の前にT1に作業を割り当てる必要があります。また、T2にはT3より前に作業が割り当てられます。作業が2つしかない場合は、T1とT2のみが割り当てられます。
  2. 各作業には、特定の時間要件があります。したがって、割り当てられた作業がT1の番である場合でも、T1に適した作業がない場合、T1はスキップされ、作業はT1に割り当てられません。
  3. 一部の作業は一部の人により適しています。例えば。 W1とW2の2つの作業があります。 T1がW2に適している場合、W2がT1に割り当てられます。

私の現在の考えは、人のリストに基づいて作業を割り当て、A *検索を使用して、作業を各人に割り当てる最良の方法を特定することです。しかし、私のreqt 1とreqt 3にはいくつかの矛盾があるように思えました。

これは賢明なアルゴリズムですか、それとも現時点では見られない問題がありますか?

1
Wee

ここであなたが一般的に抱えている問題は スケジューリング問題 と呼ばれ、一般的な形ではNP完全です。言い換えれば、これはよく知られた問題であり、効率的なアルゴリズムは(まだ、または多分)存在しません。

リンクされたページ(前のコメントで既に言及されています)は、ジョブショップスケジューリングと呼ばれる1つの特定のバリアントを参照しています。多くの異なるスケジューリング問題があり、それらはすべて、何らかの方法でNP完全であると考えられます。

ただし、あなたの場合、優先順位を付ける必要性について真剣に考え直します。通常、ジョブスケジューリングの問題には依存関係があります(ジョブBを開始するには、ジョブAを終了する必要があるなど)。優先順位はまったく異なる問題の次元であり、タスクを非常に複雑にします-それは価値がないかもしれません。タスクT1はワーカーW1またはW2によってのみ実行できると単純に言えば、W1をpreferする必要なしに十分難しいです。

文献を確認する場合の注意点:あなたのケースではworkersは通常machines文献では-T1、...、TnタイルがM1、...、Mmマシンによって製造されるオートメーション工場を考えてください。

また、最初に確認することの1つは、完全なソリューションを見つける必要があるかどうかです。一般に、NP完全性は、best解を見つける必要があるという要件から生じます。説明では、T1はスキップされますのように記述します。これは、理論的なスケジューリング問題の定式化では通常不可能です。すべてのタスクをスケジュールする必要がない場合、問題を最適に解決する必要がない場合もあります。その場合、貪欲のようなアルゴリズムを自分で作成するか、スケジューリングの近似アルゴリズムで行われている研究を見ることができます。これらのアルゴリズムには高速という利点がありますが、必ずしも最適なソリューションを見つけるとは限らないという欠点があります。

6
Frank

私はこれを 制約満足問題 としてモデル化します。ここでの目的は、要件を満たす割り当ての構成を見つけることです。これは一般にNP完全な問題ですが、データセットのサイズによっては、解決策を見つけることができる場合があります。

Backtracking -styleアルゴリズムを使用してその問題を解決する方法の説明は次のとおりです

  • Wを{W1、W2、...、Wn}などの作業割り当てのセットとする
  • すべての割り当てについて、それに最も適したワーカーを割り当てます(要件2に従って)
  • 残りのすべての割り当てについて、優先度が最も高い利用可能なワーカーにスケジュールを割り当てます
  • それらがすべて割り当てられるまで、またはその時点で使用可能なワーカーがなくなるまで、次の未割り当ての割り当てに進みます
  • 解決策が見つからなかった場合は、1つ前のステップに戻り、次に利用可能なワーカーで再試行してください。

これは、数独グリッドがCSP自体としてモデル化されることが多い方法と非常によく似ています。これは、説明に従って割り当てが相互に前提条件ではないためにのみ可能であり、問​​題をスケジューリング問題としてモデル化することとの関連性が低くなります。

幸運を!

2
pwny