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:用遗传算法解决背包优化问题?的主要内容,如果未能解决你的问题,请参考以下文章

Java遗传算法解决0-1背包问题

遗传算法解决0-1背包问题

背包问题基于遗传算法求解多背包问题matlab源码

背包问题基于遗传算法求解多背包问题matlab源码

背包问题基于遗传算法求解多背包问题matlab源码

遗传算法 Python Geatpy库