0

従業員をジョブに編成するアプリケーションを作成しています。

1 人の従業員が同時に 2 つの仕事に就くことはできません。
すべての従業員は、1 つ以上の資格を持っています。
すべての仕事には、その仕事に必要な 1 つ以上の資格があります。
※全ての業務は人員制となります。

これらはテーブルです:
1. Employees テーブル - すべての人が PID 番号を持っています。
2. 資格テーブル - [ID、名前]。
3. QualificationsOfEmployee - すべての人が複数の資格 [PID, QualificationId] を持つことができます。
4. ジョブ [Id, Name, NumOfEmployee(ジョブに必要な人数)]
5. QualificationsRequireForJob テーブル - [JobId, QualificationId]

ここで、すべてのジョブに対して資格のある従業員 (Jobs.NumOfEmployee に依存) を見つけるためのクエリ/関数を作成したいと思います。秘訣は、おそらくすべての仕事に複数の資格のある従業員がいるということですが、そのうちの何人かは他の仕事に必要になる可能性があります (彼らは多くの資格を持っているため)。

単純なSQL結合やサブクエリではうまくいかないと思います。
何かアイデアはありますか?

どうもありがとう、エラド

4

1 に答える 1

1

Mysql は、このタイプのアルゴリズムに最適な言語ではないかもしれませんが、可能性はあると思います。

(唯一の方法ではありませんが)遺伝的アルゴリズムを実装できます。これらのタイプのアルゴリズムは、特定の問題に最適な組み合わせを見つけようとするために使用され、すべての可能性でブルートフォース テストを防ぎます。強力なコスト関数と組み合わせることで、優れたソリューションを見つけることができます (最適ではない可能性があります)。あなたの場合、このコスト関数は、影響を受ける従業員の数、従業員のいない仕事、および影響を受ける従業員の資格の数で計算される可能性があります (仕事が 1 つの資格だけを必要とし、他の従業員はこの資格を持っています)。最善のコスト関数を見つけるのが難しい場合があります。

Google の「遺伝的アルゴリズム割り当て」は、問題に適合するさまざまなアルゴリズムを使用した論文を提供する場合があります。

代入問題で最適な組み合わせを見つけると、CPU の負荷が高くなり、実行に時間がかかる場合があります。アルゴリズムとデータセットによって異なります。

あなたがそのように行くなら、これらで頑張ってください!

于 2013-05-15T09:59:21.330 に答える