目前我正试图找到完成我正在做的事情的最佳方法。我有下列熊猫。
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的用武之地。
考虑以下步骤:
- 创建您的人口(随机排列)
- 检查人群的健康状况,职位是否已填补,工资是否低于最高水平等
- 在对阵容进行分级的同时进化人群
- 继续新一代,直到你满意为止