python调用gurobi进行目标优化,通过优化每段路程的速度,耗油最少,并在规定时间内到达目的地
照葫芦画瓢自己写的代码运行不了,求DA LAO救我,看看是啥问题
from gurobipy import *
df1 = pd.read_csv(r'E:\L228.csv')
df2 = pd.read_csv(r'E:\228.csv')
L= df1.L.values #距离
V = np.linspace(2, 22, 201) #速度,设置每段路程的最大速度和最小速度,每隔0.1取一次值
x2= df2.x2.values #其他影响因素
x3= df2.x3.values
x4= df2.x4.values
x5= df2.x5.values
x6= df2.x6.values
x7= df2.x7.values
x8= df2.x8.values
x9= df2.x9.values
I = list(range(148))# 时段
J = list(range(200))# 速度每次增加0.1
#计算第i个时间段的耗油量
Y= []
for i in range(148):
for j in range(200):
Y[i][j] = (-14.16)*x1[i]+1.39*x2[i]+1.08*x3[i]+1.04*x4[i]+(-1.35)*x5[i]+1.65*x6[i]+0.47*x7[i]+0.52*V[j]+(-284.66)
# 创建模型
m = Model("minY")
z = m.addVars(I, J, vtype=GRB.BINARY)
m.update()
# 创建目标函数
m.setObjective(sum(sum(z[i, j] * Y[i][j] * L[i]/V[j]for j in J) for i in I ), GRB.MINIMIZE) #若V[j]是最优速度,则z[i, j]为1,否则为0
# 创建约束条件约束条件
# 不超过时间限制
T_max = 2 #规定时间
m.addConstrs(L[i]/V[j]+sum(L[i]/V[j]*z[i, j] for j in J) <=T_max for i in I) #在最优速度下每段的时间之和小于等于规定时间
m.addConstrs(sum(z[i, j]for j in J) == 1 for i in I )
# 求解规划模型
m.optimize()
# 输出结果
# 得到最小耗油量
min_get = sum(sum(z[i, j] * Y[i][j] * L[i]/V[i][j]for j in J ) for i in I )
print('最小耗油量为:',min_get)