私は現在、次の要件を持つプロジェクト(PHP)を行っています。
私の現在の考えは、人のリストに基づいて作業を割り当て、A *検索を使用して、作業を各人に割り当てる最良の方法を特定することです。しかし、私のreqt 1とreqt 3にはいくつかの矛盾があるように思えました。
これは賢明なアルゴリズムですか、それとも現時点では見られない問題がありますか?
ここであなたが一般的に抱えている問題は スケジューリング問題 と呼ばれ、一般的な形ではNP完全です。言い換えれば、これはよく知られた問題であり、効率的なアルゴリズムは(まだ、または多分)存在しません。
リンクされたページ(前のコメントで既に言及されています)は、ジョブショップスケジューリングと呼ばれる1つの特定のバリアントを参照しています。多くの異なるスケジューリング問題があり、それらはすべて、何らかの方法でNP完全であると考えられます。
ただし、あなたの場合、優先順位を付ける必要性について真剣に考え直します。通常、ジョブスケジューリングの問題には依存関係があります(ジョブBを開始するには、ジョブAを終了する必要があるなど)。優先順位はまったく異なる問題の次元であり、タスクを非常に複雑にします-それは価値がないかもしれません。タスクT1はワーカーW1またはW2によってのみ実行できると単純に言えば、W1をpreferする必要なしに十分難しいです。
文献を確認する場合の注意点:あなたのケースではworkersは通常machines文献では-T1、...、TnタイルがM1、...、Mmマシンによって製造されるオートメーション工場を考えてください。
また、最初に確認することの1つは、完全なソリューションを見つける必要があるかどうかです。一般に、NP完全性は、best解を見つける必要があるという要件から生じます。説明では、T1はスキップされますのように記述します。これは、理論的なスケジューリング問題の定式化では通常不可能です。すべてのタスクをスケジュールする必要がない場合、問題を最適に解決する必要がない場合もあります。その場合、貪欲のようなアルゴリズムを自分で作成するか、スケジューリングの近似アルゴリズムで行われている研究を見ることができます。これらのアルゴリズムには高速という利点がありますが、必ずしも最適なソリューションを見つけるとは限らないという欠点があります。
私はこれを 制約満足問題 としてモデル化します。ここでの目的は、要件を満たす割り当ての構成を見つけることです。これは一般にNP完全な問題ですが、データセットのサイズによっては、解決策を見つけることができる場合があります。
Backtracking -styleアルゴリズムを使用してその問題を解決する方法の説明は次のとおりです
これは、数独グリッドがCSP自体としてモデル化されることが多い方法と非常によく似ています。これは、説明に従って割り当てが相互に前提条件ではないためにのみ可能であり、問題をスケジューリング問題としてモデル化することとの関連性が低くなります。
幸運を!