Python 选择最佳团队(200名玩家中的11名玩家)与熊猫进行优化

Python 选择最佳团队(200名玩家中的11名玩家)与熊猫进行优化,python,pandas,optimization,integer-programming,scip,Python,Pandas,Optimization,Integer Programming,Scip,我正在尝试开发一个代码,从200名玩家中选出最好的11名玩家。我已经开发了一个包含球员价格和积分的电子表格,并使用熊猫将其导入DF,如下所示: import pandas as pd import numpy as np df=pd.read_excel('FPL.xlsx') print(df) Player Price Points Position Select 0 Henderson 4.9 79 GK

我正在尝试开发一个代码,从200名玩家中选出最好的11名玩家。我已经开发了一个包含球员价格和积分的电子表格,并使用熊猫将其导入DF,如下所示:

import pandas as pd
import numpy as np
df=pd.read_excel('FPL.xlsx')
print(df)
           Player  Price  Points Position  Select
0           Henderson    4.9      79       GK       1
1              Foster    4.8      79       GK       1
2                Ryan    4.8      78       GK       1
3          Schmeichel    5.4      78       GK       1
4            Ramsdale    4.7      76       GK       1
5              Guaita    5.1      76       GK       1
....
200
df['select price']=df['Price']*df['Select']
df['select points']=df['Points']*df['Select']
sumpoints=df['select points'].sum()
sumplayers=df['Select'].sum()
sumprice=df['select price'].sum()
我的想法是创建一个select列,并将其乘以price列和points列,然后优化问题将如下所示:

  • 目标函数:最大化
    Select*点的总和
  • 限制条件:
    • 这个队只有11名队员
    • 购买球员的预算是85英镑
    • 守门员人数(GK)必须为1人
    • DF的数量必须为3
这将通过将select列中的变量更改为0或1来实现(即,如果相应行的玩家被选中参加团队,则为1,否则为0)


如果使用excel解算器,这是非常简单的,但我想学习如何在Python中执行此操作。

我不理解约束,请您编辑以更清楚地解释约束是什么。请将约束的格式更改为更可读的格式。当然,我的限制是:我总共只能有11名球员,其中只有1名是守门员,5名是中场,2名是进攻队员,3名是防守队员(有一个名为“位置”的专栏,上面写着如果球员是守门员,防守队员等等。另外,购买球员的预算是85美元(每个玩家都有一个价格标签栏)嗨@Omarebagalati,是否必须使用scip?(我问这个问题是因为我在标签中看到了scip)。否则,我可以想办法使用Python或工具来解决此问题。不,这不是强制性的。我想学习如何使用Python解决。我不理解约束,请您编辑以更清楚地解释约束是什么。请将约束的格式改为更可读的格式。当然,我的约束是:我总共只能有11名球员,其中只有1名是吉凯恩(守门员),5名是中场,2名是进攻队员,3名是防守队员(有一个名为“位置”的专栏,上面写着如果球员是吉凯恩、防守队员等等。此外,购买球员的预算是85美元(有一个专栏,每个球员都有价格标签)嗨@Omarebagalati,使用scip是强制性的吗?(我这么问是因为我在标签中看到了scip)。否则,我可以想办法使用Python或工具来解决这个问题。不,这不是强制性的。我想学习如何使用Python解算