2016-06-19 4 views
0

私たちは20人のグループで、2対2のテニス試合をしたい。私たち一人一人が各試合を行い、合計5試合を行い、全員が5試合をプレーします。試合は、2つの制約があります。バランスの取れたテニスラウンドを作成する

  • 誰もが(1〜5)異なるレベルを持っているので、マッチはバランスをとらなければならない:レベル5と5との2人の選手が間ので、2つのレベル1と一致することshoulnd't 2つのチームでは、レベル差は1.5以下にする必要があります。
    レベル:レベル1.5およびレベル2対レベル2およびレベル2.5。チーム間のレベル差は1であるので、試合は受け入れられる。
  • 2人のプレーヤーが1試合で一緒にプレーする場合、次の試合でもう一度試合をしてはいけません。

私は上記のようなpythonスクリプトを作成することができましたが、人のレベルによっては20分ほどかかります。私がしていることは、リストを1つずつシャッフルして、4人のリストから5つのリストに分け、条件が満たされているかどうかを確認し、毎回繰り返します。

リニアプログラミング(LP)で問題をモデリングしようとしましたが、どの機能が最適化するのかわかりません... LPの有無にかかわらず、どのようにするのですか?

ありがとうございます!

+1

LPで十分でない場合は、(ミックスド)整数プログラミング(ミディアム配合難易度)が必要です。あるいは、Constraint-Programming(最も簡単な処方)またはSAT-solvers(最高の処方困難)を使用することもできます。 – sascha

+0

私はそれを見てみましょう!ありがとう! – watxaut

答えて

1

ダミーの目的を使用することも、レベルの差の最大値を最小限に抑えることもできます。

私のMIPモデルは完全に自明ではありませんが、非常に高速です(商用ソルバーを使用して約1秒ほど)。

enter image description here enter image description here

結果が一目でOKを見て:

enter image description here

私は2人のプレイヤーが複数回同じチームにすることはできませんと仮定。私。同じゲームだけではありません。それは私の場合、別のプレイヤーに対して複数回プレイすることができます。

もっと複雑な例はhereです。

+0

それは複雑に見えますが、非常に面白いです。私は時間が増えたらそれを乗り越える必要があります。私のアプローチでは、いくつかの対称性の低減/簡略化として前処理されたペア(@ match @ round = decision-variableのペア)を使用しました。 MIPアプローチの最も興味深い点は、私の意見では次のとおりです。**平均スキル差を最小限に抑えることができます**。 (より良いモデルかもしれないL2ノルムを使用することさえあるかもしれませんが、1つは凸性に注意する必要があります)。 (btw:あなたのブログは素晴らしいです!) – sascha

+0

あなたが何かをかなり簡単に思いつくことができるなら、私は確かにそれを見てみたいです –

+0

うわー、ありがとう!これは非常に完了です!私はPythonでそれを自分自身で試していきます。少なくとも、私のモデルがどうあるべきかについて私は考えています。どのソルバーを使いましたか教えてください。 – watxaut

関連する問題