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个符合以下限制的草稿行:

50000美元以下使用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种不同的可能性。

希望这是有意义的,我基本上是在寻找一些关于如何在Python3中开始处理这项任务的见解。提前感谢您所能提供的一切!

这是一个良好的开端:

完全理解遗传算法的基本原理,这里有一个很好的例子。

遗传算法的美妙之处在于,一旦你定义了如何评估适合度,其他一切都会自行安排。你可以从完全随机的项目开始,经过几代人的努力,它会变得有序。如果你用正确的方法处理,阵容和背包问题是非常非常相似的。你已经知道可以装多少件物品(抢先一步);你现在只需要选择哪一个,这就是GA的用武之地。

考虑以下步骤:

  1. 创建您的人口(随机排列)
  2. 检查人群的健康状况,职位是否已填补,工资是否低于最高水平等
  3. 在对阵容进行分级的同时进化人群
  4. 继续新一代,直到你满意为止

最新更新