2017-10-21 97 views
1

目前我正試圖圍繞最好的方式來完成我正在做的事情。我有以下熊貓df。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名玩家。我需要進行優化以填充20個符合以下約束條件的產品:

低於$ 50,000 使用1個PG,1個SG,1個SF,1個PF,1個C,1個G,1個F和1 UTIL

正如您所看到的,大多數玩家可以在位置欄中的「/」字符所表示的一個陣容中填充多個位置。 G位置可以用PG或SG填充,F位置可以填充SF或PF,UTIL位置可以接受所有位置。

起初我用揹包蠻力方法研究過,這種方法似乎是最簡單的,但有幾萬億個組合,所以如果沒有真正做到我真正想要的東西,這將花費大量的時間。

相反,我決定嘗試使用遺傳學方法,因爲我一直在觀看這個演講視頻,認爲這是一個很好的主意。然而,我不知道如何在一般的1/0揹包方法中設置這個問題,因爲我需要包括很多東西。在一個典型的揹包方法中,你只需要一個重量和一個價值。我的體重和價值是球員的薪水和他們的預測分數。但是我必須在這裏包含玩家的位置,對於一個玩家可能有1種或者有時2種不同的可能性。

希望這是有道理的,我基本上正在尋找一些關於如何開始在Python 3中解決這個任務的見解。非常感謝您提供的任何東西!

回答

0

這是一個良好的開端:

充分了解遺傳算法的基本原理,很好的例子here

遺傳算法的美妙之處在於,一旦您定義瞭如何評估健身狀況,其他一切都會自行落實。你可以從完全隨機的項目開始,在接下來的幾代中它將變得有序。如果您以正確的方式處理,陣容和揹包問題非常非常相似。你已經知道有多少物品可以裝上(起步);現在你只需要選擇適合的,這是其中GA進來的這些步驟

想:。

  1. 創建人口(隨機陣容)
  2. 檢查人羣的健身,是工資低於最大值等
  3. 在分級陣容的同時演變人口
  4. 繼續新的一代,直到你滿意爲止。