2017-10-21 93 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. 继续新的一代,直到你满意为止。