我正在尝试构建一个python程序来优化幻想体育名单。我已经调查了scipy,我对如何解决这个问题非常困惑。问题是最大化名单的预期点数,限制在每个玩家位置之一。此外,每个球员都有薪水,所有球员工资的总和也受到限制。所以简而言之,我想选择球员组合来最大化预期得分,同时不超过工资帽。
我最初使用嵌套循环开始这样做,但这需要花费很长时间。
有关如何解决此问题的任何想法?
以下是pandas数据框中的数据示例。
Position Name Salary AvgPointsPerGame
0 PG Russell Westbrook 13200 54.004
1 SG James Harden 11500 49.982
2 PF Anthony Davis 11200 49.594
3 SF LeBron James 10100 47.861
4 PG Chris Paul 9900 44.278
5 C DeMarcus Cousins 9600 49.477
6 SF Kevin Durant 9500 43.481
7 PF Blake Griffin 8900 41.705
8 PF LaMarcus Aldridge 8800 42.816
9 PF Pau Gasol 8700 42.250
10 PG John Wall 8600 41.722
11 C DeAndre Jordan 8300 37.342
12 SG Eric Bledsoe 8200 37.132
.....
我正在研究所提出的背包问题...任何关于修改此代码的建议1)将行李的大小限制为6,并且2)将每个位置限制为最多2个点。谢谢你的帮助。
def knapsack(items, limit):
table = [[0 for w in range(limit + 1)] for j in xrange(len(items) + 1)]
for j in xrange(1, len(items) + 1):
pos, name, cost, val = items[j-1]
for w in xrange(1, limit + 1):
if cost > w:
table[j][w] = table[j-1][w]
else:
table[j][w] = max(table[j-1][w], table[j-1][w-cost] + val)
result = []
w = limit
for j in range(len(items), 0, -1):
was_added = table[j][w] != table[j-1][w]
if was_added:
pos, name, cost, val = items[j-1]
result.append(items[j-1])
w -= wt
return result
答案 0 :(得分:1)
我使用自己的遗传算法来解决这个问题。由于有很多小细节,我不会完全拼写出来,但这已经足够开始了:
你应该在一分钟之内收敛。
秘密酱是配套功能。当在X位置交换A队和B队时,你将有一组随机挑选的队员。到那个集合,完全随机添加另一个玩家。另一点:当你交配并检查工资帽并且失败时,只需选择一个父团队作为孩子。