私はチーム選択アルゴリズムを実装しようとしています.n人がそれぞれ優秀さに基づいて順序付けられたスキルを持っているとしましょう.P1 {ruby, python, java}は、彼がJavaよりもRubyに堪能であることを意味します, 同様にP2..など. 私はいくつかのスキルを持つ人々を必要とするプロジェクトProj1を持っています{ruby、pythonなど}、Proj2など。公正な分配のためにプロジェクト間で人々を分配するにはどうすればよいですか(1人が1つのプロジェクトでしか作業できないと仮定しましょう)?
3 に答える
これが、問題定義のギャップを私の仮定で埋めた私の提案です。これは、Ankush's answer の線形計画法のアプローチに似ています
プログラマーが所有するすべてのスキルに重みを割り当てます。
P1{java,ruby,python} -- P1{1, 0.5, 0.25}
P2{ruby,python} -- P2{1, 0.5}
P3{python,ruby,java} -- P3{1, 0.5, 0.25}
プロジェクトの要件は次のとおりです。
プロジェクト{java,python}
したがって、すべてのプログラマーの重みを取り、それぞれに 1 (スキルが必要) または 0 (スキルが不要) を掛けます。
P1_suitability = 1*1 + 0.5*0 + 0.25*1 = 1.25
P2_suitability = 1*0 + 0.5*1 = 1
P3_suitability = 1*1 + 0.5*0 + 0.25*1 = 1.25
プロジェクトに P1 と P3 を選択します
別のプロジェクトには次が必要です。
プロジェクト{ルビー、パイソン}
適合性の計算:
P1_suitability = 1*0 + 0.5*1 + 0.25*1 = 0.75
P2_suitability = 1*1 + 0.5*1 = 1.5
P3_suitability = 1*1 + 0.5*1 + 0.25*0 = 1.5
他のプロジェクトに P2 と P3 を参加させる
繰り返しますが、問題の定義が完全ではないため、これは非常に推測的な解決策です。とにかく、悪い運動ではありませんでした..
これは別の線形計画法のアプローチです。これは、早く終了しても誰も気付かないが、遅く終了すると大きな問題になるという理論に基づいています。
プロジェクトごとに、必要な各スキルの標準プログラマー時間数を見積もります。
各プログラマーと各スキルについて、(特定のスキル レベルに基づいて) 標準的なプログラマー 1 時間分の価値を生み出すために、どのくらいの時間を費やす必要があるかを見積もります。
次に、ほとんどの未知数が Pijk の形式である線形計画法を解く必要があります。ここで、Pijk は、プログラマー i がプロジェクト k のスキル j に費やした経過時間数です。
SUM_j,k Pijk <= Qi という制約がすぐに得られます。ここで、Qi は、すべてのプロジェクトでプログラマー i が割かなければならない合計時間です。
プロジェクト k のスキル j で行われた作業の合計量は、SUM_i Pijk*Eij です。ここで、Eij は、プログラマー i がスキル j でどれだけ優れているかによって異なります。特定のアクティビティのスラック量は、Pijk が与えられると、Sjk = SUM_i Pijk * Eij - Wjk となります。ここで、Wjk は、そのスキルとプロジェクトのために実行する総作業量です。任意のプロジェクトの任意のスキルのスラックの最小量が S である場合、S <= Sjk という制約があります。
締め切りを守れないことはコストがかかるため、良い目的関数は S を最大化することであると私は主張します。これは、あらゆるプロジェクトのあらゆるスキルのスラックの最小量です。これはすべて線形不等式のセットとして与えられるため、線形計画問題として可能な最大 S につながる Pijk を見つけることができるはずです。