2017-10-21 15 views
1

現在、私は自分がやっていることを達成するための最善の方法の周りに頭を抱えようとしています。私は以下のパンダを持っています。Python:遺伝的アルゴリズムでナップザック最適化を解く?

Player Pos Salary My Proj 
0 James Harden PG/SG 10600 51.94472302 
1 Jose Juan Barea PG/SG 4200 22.20823452 
2 Stephen Curry PG/SG 8700 42.95809374 
3 Eric Gordon  SG  5400 27.45218158 
4 Nikola Vucevic C  7400 37.00103015 
5 Wilson Chandler SF/PF 4900 24.83866589 

これは、毎日約200人のプレイヤーに起こります。

$ 50,000未満 1 PG、1 SG、1 SF、1 PF、1 C、1 G、1 F、および1を使用すると、次の制約に従ったドラフトで最大20のラインナップを満たす最適化を実行する必要があります。 1 UTIL

あなたが見ることができるように、ほとんどのプレイヤーは、ポジション列の "/"文字で示される単一のラインナップで複数のポジションを記入することができます。 GポジションはPGまたはSGのいずれかで満たされ、FポジションはSFまたはPFで満たされ、UTILポジションはすべてのポジションを受け入れることができます。

最初は、ナップザックのブルートフォースアプローチを使用しましたが、これは最もシンプルなようでしたが、文字通り何兆もの組み合わせがあるため、本当に本当に必要なことをすることなく過度の時間がかかります。

代わりに私はこれについて多くの講義ビデオを見てきたので、遺伝的アプローチを試してみることにしました。しかし、私は、この問題を一般的な1/0ナップザックアプローチでどのように設定するのか分かりません。典型的なナップザックのアプローチでは、ちょうど重さと値があります。私の体重と価値は選手の給料とその予想される得点です。しかし、私はここにもプレイヤーの位置を含める必要があります。これは、1人のプレイヤーにとって1つまたは時には2つの異なる可能性があります。

これは理にかなっていて、基本的にはPython 3の中でこの作業に取り掛かる方法についていくつかの洞察を求めています。

が完全に遺伝的アルゴリズムの基本を理解し、良い例here

答えて

0

はここで良いスタートです。

遺伝的アルゴリズムの美しさは、いったんフィットネスを評価する方法を定義すると、他のすべてがそれ自身のものになります。あなたは完全にランダムなアイテムから始めることができ、連続した世代にわたって秩序あるものになります。ラインアップとナップザックの問題は、あなたが正しい方法でアプローチすれば、非常によく似ています。あなたはすでにどれくらいのアイテムが合うかを知っています(ヘッドスタート)。 GAの出番あなたは今だけのどれを選択する必要が、それはあるこれらのステップの

と思いますが:。

  1. あなたの人口(ランダムラインナップ)
  2. があり、人口の適合性を確認してくださいを作成します。ポジションが満たされ、最大給与よりも低い給与など
  3. ラインアップの格付け中に人口を進化させる
  4. 満足するまで、次の世代を続けます。
関連する問題