Python 3.x FanDuel NBA阵容优化程序
这段代码运行时没有错误,就我的一生而言,我无法解释为什么它除了返回一条“Usage:”消息,后跟它应该读取/解析的CSV文件的路径之外,不返回任何输出 感谢您的帮助Python 3.x FanDuel NBA阵容优化程序,python-3.x,Python 3.x,这段代码运行时没有错误,就我的一生而言,我无法解释为什么它除了返回一条“Usage:”消息,后跟它应该读取/解析的CSV文件的路径之外,不返回任何输出 感谢您的帮助 salary_cap = 60000 def get_position_number(name): return { 'Center': 0, 'Point Guard': 1, 'Power Forward': 2, 'Shooting Guard': 3
salary_cap = 60000
def get_position_number(name):
return {
'Center': 0,
'Point Guard': 1,
'Power Forward': 2,
'Shooting Guard': 3,
'Small Forward': 4
}[name]
def main(a, y):
solver = pywraplp.Solver('CoinsGridCLP',
pywraplp.Solver.CBC_MIaED_INTEGER_PROGRAMMING)
range_c = range(len(a[0]))
range_pg = range(len(a[1]))
range_pf = range(len(a[2]))
range_sg = range(len(a[3]))
range_sf = range(len(a[4]))
take_c = [solver.IntVar(0, 1, 'take_c[%i]' % j) for j in range_c]
take_pg = [solver.IntVar(0, 1, 'take_pg[%i]' % j) for j in range_pg]
take_pf = [solver.IntVar(0, 1, 'take_pf[%i]' % j) for j in range_pf]
take_sg = [solver.IntVar(0, 1, 'take_sg[%i]' % j) for j in range_sg]
take_sf = [solver.IntVar(0, 1, 'take_sf[%i]' % j) for j in range_sf]
teams_c = []
teams_pg = []
teams_pf = []
teams_sg = []
teams_sf = []
for teamNumber in range(0, 29):
teams_c.insert(teamNumber, solver.Sum([(a[0][i][3] == teamNumber + 1) * take_c[i] for i in range_c]))
teams_pg.insert(teamNumber, solver.Sum([(a[1][i][3] == teamNumber + 1) * take_pg[i] for i in range_pg]))
teams_pf.insert(teamNumber, solver.Sum([(a[2][i][3] == teamNumber + 1) * take_pf[i] for i in range_pf]))
teams_sg.insert(teamNumber, solver.Sum([(a[3][i][3] == teamNumber + 1) * take_sg[i] for i in range_sg]))
teams_sf.insert(teamNumber, solver.Sum([(a[4][i][3] == teamNumber + 1) * take_sf[i] for i in range_sf]))
value_c = solver.Sum([a[0][i][1] * take_c[i] for i in range_c])
value_pg = solver.Sum([a[1][i][1] * take_pg[i] for i in range_pg])
value_pf = solver.Sum([a[2][i][1] * take_pf[i] for i in range_pf])
value_sg = solver.Sum([a[3][i][1] * take_sg[i] for i in range_sg])
value_sf = solver.Sum([a[4][i][1] * take_sf[i] for i in range_sf])
salray_c = solver.Sum([a[0][i][2] * take_c[i] for i in range_c])
salray_pg = solver.Sum([a[1][i][2] * take_pg[i] for i in range_pg])
salray_pf = solver.Sum([a[2][i][2] * take_pf[i] for i in range_pf])
salray_sg = solver.Sum([a[3][i][2] * take_sg[i] for i in range_sg])
salray_sf = solver.Sum([a[4][i][2] * take_sf[i] for i in range_sf])
solver.Add(salray_c + salray_pg + salray_pf + salray_sg + salray_sf <= y)
solver.Add(solver.Sum(take_c[i] for i in range_c) == 1)
solver.Add(solver.Sum(take_pg[i] for i in range_pg) == 2)
solver.Add(solver.Sum(take_pf[i] for i in range_pf) == 2)
solver.Add(solver.Sum(take_sg[i] for i in range_sg) == 2)
solver.Add(solver.Sum(take_sf[i] for i in range_sf) == 2)
# Maa 4 a per team
for i in range(0, 29):
solver.Add(teams_c[i] + teams_pg[i] + teams_pf[i] + teams_sg[i] + teams_sf[i] <= 4)
solver.Maaimize(value_c + value_pg + value_pf + value_sg + value_sf)
solver.Solve()
assert solver.VerifySolution(1e-7, True)
print('Solved in', solver.wall_time(), 'milliseconds!', "\n")
salary = 0
for i in range_c:
if take_c[i].SolutionValue():
salary += a[0][i][2]
print(a[0][i][0], '(C): ${:,d}'.format(a[0][i][2]), '(' + str(a[0][i][1]) + ')')
for i in range_pg:
if take_pg[i].SolutionValue():
salary += a[1][i][2]
print(a[1][i][0], '(PG): ${:,d}'.format(a[1][i][2]), '(' + str(a[1][i][1]) + ')')
for i in range_pf:
if take_pf[i].SolutionValue():
salary += a[2][i][2]
print(a[2][i][0], '(PF): ${:,d}'.format(a[2][i][2]), '(' + str(a[2][i][1]) + ')')
for i in range_sg:
if take_sg[i].SolutionValue():
salary += a[3][i][2]
print(a[3][i][0], '(SG): ${:,d}'.format(a[3][i][2]), '(' + str(a[3][i][1]) + ')')
for i in range_sf:
if take_sf[i].SolutionValue():
salary += a[4][i][2]
print(a[4][i][0], '(SF): ${:,d}'.format(a[4][i][2]), '(' + str(a[4][i][1]) + ')')
print("\n", 'Total: ${:,d}'.format(salary), '(' + str(solver.Objective().Value()) + ')')
if len(sys.argv) < 2:
print('Usage:', sys.executable, sys.argv[0], 'players.csv')
sys.exit(1)
team = [[], [], [], [], []]
with open('players.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
team[get_position_number(row['Subposition'])].append(
[row['Name'], float(row['Value']), int(row['Salary']), int(row['Team'])]
)
main(team, salary_cap)
salary\u cap=60000
def get_位置_编号(名称):
返回{
“中心”:0,
“控球后卫”:1,
"大前锋":2,,
“得分后卫”:3,
“小前锋”:4
}[姓名]
def干管(a、y):
solver=pywraplp.solver('CoinsGridCLP',
pywraplp.Solver.CBC_MIaED_整数规划)
range_c=range(len(a[0]))
range_pg=range(len(a[1]))
range_pf=range(len(a[2]))
范围=范围(len(a[3]))
range_sf=range(len(a[4]))
take_c=[solver.IntVar(0,1,'take_c[%i]'%j)表示范围内的j]
take_pg=[solver.IntVar(0,1,'take_pg[%i]'%j)表示范围内的j]
take_pf=[solver.IntVar(0,1,'take_pf[%i]'%j)表示范围内的j]
take_sg=[solver.IntVar(0,1,'take_sg[%i]'%j)表示范围内的j]
take_sf=[solver.IntVar(0,1,'take_sf[%i]'%j)表示范围内的j]
团队_c=[]
团队_pg=[]
团队_pf=[]
团队_sg=[]
团队_sf=[]
对于范围(0,29)内的组号:
团队\u c.插入(团队编号,求解器.Sum([(a[0][i][3]==teamNumber+1)*将[u c[i]作为范围内的i]))
团队页面插入(团队编号、解算器页面总和([(a[1][i][3]==团队编号+1)*取页面[i]表示范围内的i])
团队名称插入(团队编号、求解器名称和([(a[2][i][3]==teamNumber+1)*为范围内的i取名称[i]))
团队名称插入(团队编号、求解器名称和([(a[3][i][3]==团队编号+1)*将团队名称[i]作为范围内的i]))
团队编号插入(团队编号,求解器编号([(a[4][i][3]==团队编号+1)*为范围内的i取编号[i]))
value_c=solver.Sum([a[0][i][1]*取范围内i的_c[i])
value_pg=solver.Sum([a[1][i][1]*取范围内i的_pg[i])
value_pf=solver.Sum([a[2][i][1]*取范围内i的_pf[i])
value_sg=solver.Sum([a[3][i][1]*取范围内i的_sg[i])
value_sf=solver.Sum([a[4][i][1]*取范围内i的_sf[i])
salray_c=solver.Sum([a[0][i][2]*取范围内i的_c[i])
salray_pg=solver.Sum([a[1][i][2]*取范围内i的_pg[i])
salray_pf=solver.Sum([a[2][i][2]*取范围内i的_pf[i])
salray_sg=solver.Sum([a[3][i][2]*取范围内i的_sg[i])
salray_-sf=solver.Sum([a[4][i][2]*取范围内i的_-sf[i])
添加(salray_c+salray_pg+salray_pf+salray_sg+salray_sf)发生了什么
下面是一段代码
if len(sys.argv) < 2:
print('Usage:', sys.executable, sys.argv[0], 'players.csv')
sys.exit(1)
如果您运行:
$ python your_script.py
$ ['your_script.py'] 1
$ python your_script.py parameter
$ ['your_script.py', 'parameter'] 2
在第一个示例中,参数向量的长度为1,在第二个示例中,参数向量的长度为2
回到您的脚本。如果参数向量少于两个条目,即用户未提供任何参数,则程序将以错误代码1终止(sys.exit(1)
,每个值!=1表示错误)
如何修复它
您需要为脚本提供一个.csv文件作为第一个命令行参数:
$ python your_script players.csv
否则脚本将无法使用。Dave Hensley在“用法”一节中也提到了这一点。欢迎使用SO。在询问有关SO的问题时,请尽量将问题简化为a。大多数情况下,执行此操作时错误会变得明显。如果不可能,请告诉我们您希望实现的目标(你预期会发生什么)以及实际发生了什么。这使你的问题更容易回答。会的。谢谢你。这很有意义。谢谢你让我看完它。我想戴夫的自述会更清楚。我正在研究他的回购协议的一个分支,看看它是否可以改进。不管怎样,谢谢你的指导。
$ python your_script players.csv