Python:用遗传算法解决背包优化问题?
Posted
技术标签:
【中文标题】Python:用遗传算法解决背包优化问题?【英文标题】:Python: Solving knapsack optimization with a genetic algorithm? 【发布时间】:2017-10-21 21:19:27 【问题描述】:目前,我正在努力思考完成我正在做的事情的最佳方式。我有以下熊猫 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 个遵循以下约束的选秀阵容:
低于 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 中解决此任务的某种见解。提前感谢您提供的任何东西!
【问题讨论】:
【参考方案1】:这是一个好的开始:
完全了解遗传算法的基础知识,很好的例子here。
遗传算法的美妙之处在于,一旦您定义了如何评估适应度,其他一切都会自行解决。您可以从完全随机的项目开始,并且在连续几代中它会变得有序。如果你以正确的方式处理,阵容和背包问题非常非常相似。您已经知道可以容纳多少物品(领先);您现在只需选择哪些,这就是 GA 的用武之地。
想想这些步骤:
-
创建你的人口(随机阵容)
检查人群的健康状况、职位是否填补、工资是否低于最高限额等
在对阵容进行分级的同时发展人口
继续使用新一代产品,直到您满意为止。
【讨论】:
以上是关于Python:用遗传算法解决背包优化问题?的主要内容,如果未能解决你的问题,请参考以下文章