最も満足できるように人々をチームに分けます
-
27-09-2019 - |
質問
好奇心の質問です。クラスのグループワークで、教授が人々を特定の数のグループ(n
)に分割したことを覚えていますか?
私の教授の中には、一緒に働きたいジェネラコディセタグコードと一緒に働きたくないジェネラコディセタグコードのリストを各学生から取得し、魔法のように、学生が人々と一致するジェネラコディセタグコードのグループを作成します。彼らは好むし、好まない人々と一緒に働くことを避けます。
私には、このアルゴリズムはナップサック問題のように聞こえますが、この種の問題に対するあなたのアプローチについて質問したいと思いました。
編集: ACMの記事で私の質問とまったく同じものを説明しています。既視感の2番目の段落を読んでください。
解決
私には、ある種の clique の問題のように聞こえます。>
問題の見方として、次のグラフを設定します:
- 頂点は学生になります
- 次の両方が当てはまる場合、2人の生徒はエッジで接続されます。
- 2人の学生のうち少なくとも1人がもう1人と一緒に働きたいと思っています。
- 2人の生徒のどちらも他の生徒と一緒に仕事をしたくありません。
次に、グラフをサイズnのクリークに分割します。 (学生の数がnで割り切れると仮定)
これが不可能な場合は、エッジの最初の制約をスリップさせ、どちらも相手と一緒に作業したくないと明示的に言っていない限り、2人の間にエッジを設定します。
これを効率的に解決するためのアプローチについては、私にはわかりませんが、これにより、問題についての洞察に近づくことができれば幸いです。
他のヒント
これはクラスタリングの問題として非常に簡単にモデル化でき、実際にはスペースを定義する必要はなく、実際には距離を定義するだけで済みます。
2人が一緒に仕事をしたい場合は、2人を非常に近づけます。 それらの1つが他と連携したい場合は、閉じます。 無関心だけの場合は中距離。 どちらかがもう一方と一緒に作業したくない場合は、遠く離れています。
そうすれば、クラスターを見つけることができます。次に、クラスター内のすべての人がうまく連携できると確信して、サイズが大きすぎるクラスターを分割します。
この問題はブルートフォース攻撃を受ける可能性があるため、私のアプローチは、最初にブルートフォース攻撃を行い、より良いアイデアが得られたら修正することです。
使用できるアルゴリズムがいくつかあります。良い例は、いわゆる「安定結婚問題」であり、これは完璧な解決策を持っています。詳細については、こちらをご覧ください:
http://en.wikipedia.org/wiki/Stable_marriage_problem
安定結婚問題は、2つのグループの人々(結婚の場合は男性/女性)でのみ機能します。ペアを形成したい場合は、バリエーション、安定したルームメイトの問題を使用できます。この場合、ペアを作成しますが、全員が1つのプールから来ます。
しかし、あなたはチームを要求しました(これは、チームごとに2人以上に相当します)。この場合、全員にベストマッチからワーストマッチを記入させてから、を実行することができます。