如何解决无法将参数转换为表达式 (gurobi)
当我设定目标时,出现此错误:
Unable to convert argument to an expression
这是我的代码:
import gurobipy as gp
from gurobipy import *
from random import randint
import math
#coordinate
coorD=[]
for i in range(50):
coorD.append([])
for j in range(2):
s=randint(1,100)
coorD[i].append(s)
demandpoint=[i for i in range(1,51)]
coorL=[]
for i in range(50):
coorL.append([])
for j in range(2):
s=randint(1,100)
coorL[i].append(s)
Launchstationpoint=[i for i in range(1,51)]
coorR=[]
for i in range(50):
coorR.append([])
for j in range(2):
s=randint(1,100)
coorR[i].append(s)
Rechargestationpoint=[i for i in range(1,51)]
demand={demandpoint[i]:coorD[i] for i in range(50)}
Launchstation={Launchstationpoint[i]:coorL[i] for i in range(50)}
Rechargestation={Rechargestationpoint[i]:coorR[i] for i in range(50)}
disDL={}
for i in range(1,51):
for j in range(1,51):
s1=math.sqrt(((demand[i])[0]-(Launchstation[j])[0])**2+((demand[i])[1]-(Launchstation[j])[1])**2)
disDL.setdefault((demandpoint[i-1],Launchstationpoint[j-1]),s1)
disDR={}
for i in range(1,51):
s2=math.sqrt(((demand[i])[0]-(Rechargestation[j])[0])**2+((demand[i])[1]-(Rechargestation[j])[1])**2)
disDR.setdefault((demandpoint[i-1],Rechargestationpoint[j-1]),s2)
disRL={}
for i in range(1,51):
s3=math.sqrt(((Rechargestation[i])[0]-(Launchstation[j])[0])**2+((Rechargestation[i])[1]-(Launchstation[j])[1])**2)
disRL.setdefault((Rechargestationpoint[i-1],s3)
#cost
Cd=15000
Ci=300000
Cj=100000
Cs=100
E=50
#time
T=240
ave=0
for i in range(100):
ave+=randint(1,50)
ave/=100
Ti=ave/0.83
aveR=0
for i in range(200):
aveR+=randint(1,50)
aveR/=100
Tj=aveR/0.83
dTi=int(T/Ti)
dTj=int(T/Tj)
m=Model("project1")
这是我的变量和目标:
Di=m.addVars(demandpoint,Launchstationpoint,vtype=GRB.BINARY,name='D')
Dj=m.addVars(demandpoint,Rechargestationpoint,name='D')
x=m.addVars(Launchstationpoint,name="X")
y=m.addVars(Rechargestationpoint,name="Y")
Σxi* 30000+Σyj* 100000+ΣΣdki* 100+ΣΣdkj* 100+ΣΣdij* 100+S* 15000
使用不同点的列表和点之间的距离字典。
s=(quicksum(x[i]*300000)+quicksum(y[j]*100000)+quicksum(disDL[k][i]*100)+quicksum(disDR[k][j]*100)+quicksum(disRL[j][i]*100)+S*15000 for i in Launchstationpoint for j in Rechargestationpoint for k in demandpoint)
m.setobjective(s,GRB.MINIMIZE)
我搜索了很多并阅读了很多帖子,但我仍然不知道为什么会出现此错误。我该如何解决?
P.S.我的代码还没有完成,我只是在每一步之后运行它,看看是否有任何错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。