グループ分けを行うツールです リクエストと過去の組み合わせを考慮してグループ分けを行います
inputディレクトリに入力値(「グループ分けで必ず実現する仕様」と「可能な限り実現する要望」)を保存した状態で GrouperApplication.kt
のmain関数を実行すると、outputディレクトリに出力値であるグループのリストとそれぞれのグループに対するスコアが生成されます。
スコアは「可能な限り実現する要望」をどれくらい実現できているかを示すもので、スコアの合計値が一番高いものが最終的な出力値となります。
入力値、出力値はそれぞれinput, outputディレクトリ内のファイルを参考にしてください
-
入力値:グループ分けで必ず実現する仕様
- input/members.csv: グループ分けしたいメンバーのリスト
- 各行先頭のメンバーをグループ分けの対象にします (2列目以降は無視されます)
- input/group-count.csv: 期待するグループの数
- input/members.csv: グループ分けしたいメンバーのリスト
-
入力値:可能な限り実現する要望
- input/group-request.csv: あるメンバーと同じグループに入りたいという要望 (必ずしも実現されるわけではない)
- 各行先頭のメンバーが、2人目以降のメンバーと同じグループに入ることを要望しています
- ex.
Alice,Bob,Charlie
という行があれば、AliceがBobまたはCharlieと同じグループに入りたいと要望しています
- input/block-request.csv: あるメンバーと同じグループは避けたい要望 (必ずしも実現されるわけではない)
- 各行先頭のメンバーが、2人目以降のメンバーと異なるグループに入ることをリクエストしています
- ex.
Alice,Eric,Fred
という行があれば、AliceはEricまたはFredと異なるグループに入りたいと要望しています
- input/history/xxx.csv: 過去の組み合わせ
- input/group-request.csv: あるメンバーと同じグループに入りたいという要望 (必ずしも実現されるわけではない)
-
出力値
-
output/lot-xxx.csv: 生成されたグループのリスト
-
出力されるファイルの中身が以下になった場合は
(Daniel, Fred, Eric)
と(Bob, Charlie, Alice)
という2つのグループができたことを意味しますScore=60,Daniel,Fred,Eric Score=-10,Bob,Charlie,Alice
-
-