微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法将参数转换为表达式 (gurobi)

如何解决无法将参数转换为表达式 (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 举报,一经查实,本站将立刻删除。