Python:使用遗传算法解决背包优化问题?

时间:2017-10-21 21:19:28

标签: python genetic-algorithm knapsack-problem

目前我正在试图完成我正在做的事情的最佳方式。我有以下pandas df。

    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个关于遵循以下约束的draftkings的阵容:

低于50,000美元 使用1 PG,1 SG,1 SF,1 PF,1 C,1 G,1 F和1 UTIL

正如你所看到的,大多数玩家可以在#34; /"表示的单个阵容中填充多个位置。位置列中的字符。 G位置可以用PG或SG填充,F位置可以用SF或PF填充,UTIL位置接受所有位置。

起初我研究过使用背包蛮力的方法,这似乎是最简单的,但实际上有数万亿的组合,所以这需要花费大量的时间,而不是真正做我真正想要的。

相反,我决定尝试使用遗传学方法,因为我一直在观看很多讲座视频,并认为这是一个很好的想法。但是,我不知道如何在一般的1/0背包方法中设置这个问题,因为我需要包含许多内容。在典型的背包方法中,您只需要一个重量和一个值。我的体重和价值是球员的薪水和他们的预计得分。但是我必须在这里包括玩家的位置,对于一个玩家来说可以是1种或者有时2种不同的可能性。

希望这是有道理的,我基本上正在寻找有关如何在Python 3中开始处理此任务的某种见解。提前感谢您提供的任何内容!

1 个答案:

答案 0 :(得分:1)

这是一个好的开始:

完全理解遗传算法的基础知识,很好的例子here

遗传算法的优点在于,一旦您定义了如何评估适应度,其他一切就会自行落实到位。你可以从完全随机的项目开始,并且在连续几代中它将变得有序。如果以正确的方式接近它,阵容和背包问题非常非常相似。你已经知道有多少物品可以装(头部开始);你现在只需要选择哪些,这就是GA的用武之地。

考虑以下步骤:

  1. 创建人口(随机阵容)
  2. 检查人口的适合度,填补的职位,薪水是否小于最高等等。
  3. 在对阵容进行评分时进化人口
  4. 继续新一代直到你满意为止。