Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x FanDuel NBA阵容优化程序_Python 3.x - Fatal编程技术网

Python 3.x FanDuel NBA阵容优化程序

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

这段代码运行时没有错误,就我的一生而言,我无法解释为什么它除了返回一条“Usage:”消息,后跟它应该读取/解析的CSV文件的路径之外,不返回任何输出

感谢您的帮助

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