python - 错误:“Var”对象在 Groubi 中不可下标。我应该怎么做
问题描述
from gurobipy import *
import pandas as pd
import numpy as np
import csv
"""
P,p=multidict({1:10,2:10,3:10,4:10})
P,s=multidict({1:5,2:4,3:7,4:3})
W,w=multidict({1:1,2:2,3:2,4:1,5:3,6:1,7:1,8:4,9:2,10:2})
d={(1,1):10, (1,2):15, (1,3):30,(1,4):25,(1,5):15,(1,6):20,(1,7):40,(1,8):100,(1,9):250,(1,10):300,
(2,1):139, (2,2):35, (2,3):65,(2,4):55,(2,5):300,(2,6):500,(2,7):100,(2,8):250,(2,9):30,(2,10):80,
(3,1):20, (3,2):75, (3,3):25,(3,4):70,(3,5):100,(3,6):45,(3,7):25,(3,8):100,(3,9):250,(3,10):200,
(4,1):500, (4,2):85, (4,3):75,(4,4):60,(4,5):200,(4,6):50,(4,7):500,(4,8):50,(4,9):100,(4,10):150,
}
P,p=multidict({1:1,2:1,3:2,4:2,5:2})
P,s=multidict([1:1,2:1,3:2,4:2,5:2])
W,w=multidict({1:2,2:2,3:2,4:2})
d={(1,1):2,(1,2):3,(1,3):3,(1,4):5,
(2,1):2,(2,2):3,(2,3):3,(2,4):5,
(3,1):2,(3,2):3,(3,3):3,(3,4):5,
(4,1):2,(4,2):3,(4,3):3,(4,4):5,
(5,1):2,(5,2):3,(5,3):3,(5,4):5,
}
"""
t = {}
with open('d.csv') as f:
c = csv.DictReader(f)
for k1, l in enumerate(c, 1):
for k2 in l:
t[k1, int(k2)] = int(l[k2])
w_data=pd.read_csv('w.csv',header=None)
p_data=pd.read_csv('p.csv',header=None)
wf=w_data.dropna(how='all', axis=1)
pf=p_data.dropna(how='all', axis=1)
W=wf[:1].values[0]
w=dict(zip(wf[:1].values[0], wf[1:2].values[0]))
P=pf[:1].values[0]
p=dict(zip(pf[:1].values[0], pf[1:2].values[0]))
P=[int(i) for i in P]
W=[int(j) for j in W]
p={int(key):int(value) for key, value in p.items()}
w={int(key):int(value) for key, value in w.items()}
T=45
total_w=sum(w.values())
total_p=sum(p.values())
R= total_w/total_p
#データの読み込みと定義
#データ作成#
model=Model("keibi optimizer")
x={}
y={}
z={}
E={}
M={}
E_abs={}
for i in P:
y[i]=model.addVar(vtype="C",name="y(%s)"%(i)) #変数を定義する
E[i]=model.addVar(vtype="C",name="E(%s)"%(i))
M[i]=model.addVar(vtype="C",name="M(%s)"%(i))
E_abs[i]=model.addVar(lb=0,vtype="C",name="abs1(%s)"%(i))
for j in W:
x[i,j]=model.addVar(vtype="C",name="x(%s,%s)"%(i,j)) #変数を定義する
z[i,j]=model.addVar(vtype="C",name="z(%s,%s)"%(i,j)) #変数を定義する
model.update()
for j in W:
model.addConstr(quicksum(x[i,j] for i in P) == w[j],name='Demand(%s)' %j) #警備会社のそれぞれの事業所から契約先に必要な人数派遣される
for i in P:
z= model.addVar(lb=-GRB.INFINITY)
model.addConstr(z==y[i]-R*p[i])
model.addGenConstrAbs(E_abs[i],z,"absConstr")
model.addConstr(p[i]*p[i]*E[i]==(p[i]-E_abs[i])*(p[i]-E_abs[i]),name='Satisfaction1(%s)' %i)
for i in P:
model.addConstr(quicksum(x[i,j] for j in W) <= p[i],name='Capacity1(%s)' %i) #警備会社の事業所からそれぞれの契約先に決まった人数以下派遣される
model.addConstr(quicksum(x[i,j] for j in W) == y[i],name='Capacity2(%s)' %i) #警備会社の事業所からそれぞれの契約先に決まった人数派遣される
model.addConstr(quicksum(t[i,j]*z[i,j] for j in W) ==(1-M[i])*T,name='Satisfaction2(%s)' %i)
model.addConstr(y[i]>0,name='binary(%s)' %i)
for i in P:
for j in W:
model.addConstr(x[i,j],"==",y[i,j]*z[i,j])
model.addConstr(t[i,j]*x[i,j],"<=",T*x[i,j]) #移動距離の上限の制約
model.setObjective(quicksum(E[i]*M[i] for i in P)/n,GRB.MAXIMIZE)#目的関数
model.optimize()
print("Overall satisfacton:",model.ObjVal) #全体の満足度の出力
for i in P:
S=E[i]
print("Office %3s business satisfaction %3s"%(i,S)) #それぞれの事業所の満足度の出力
for i in P:
N=M[i]
print("Office %3s distance satisfaction %3s"%(i,N))
for(i,j) in x:
print("sending quantity %10s from office %3s to workplace %3s" %(x[i,j], i, j)) #最適解の出力
TypeError: 'Var' object is not subscriptable
Error Line model.addConstr(quicksum(t[i,j]*z[i,j] for j in W) ==(1-M[i])*T,name='Satisfaction2(%s)' %i)
python gurobi 9.11 我正在解决一个应用交通规划的问题。但是出现了一个意想不到的问题。我应该如何处理这个错误信息?我不知道这个错误是什么。我不知道该怎么办,因为即使搜索后它也没有出现。我做了
z= model.addVar(lb=-GRB.INFINITY)
model.addConstr(z==y[i]-R*p[i])
model.addGenConstrAbs(E_abs[i],z,"absConstr")
model.addConstr(p[i]*p[i]*E[i]==(p[i]-E_abs[i])*(p[i]-E_abs[i]),name='Satisfaction1(%s)' %i)
之后,发生了这种情况。我认为abs是Var。请帮我。
解决方案
推荐阅读
- c# - 如何在 C#/.NET 中找到文件的真实(区分大小写)名称?
- compiler-errors - 错误:靠近“初始”:语法错误,意外的初始
- python - np.where() 使用字符串和多个条件在 Excel (python) 中创建新列
- mongodb - 在 YCSB 上编写个性化工作负载
- python - 使用特定视频调用 sendMediaGroup 后 Telegram API BadRequest 错误
- spring-boot - 如何编写用于过滤的嵌入式类查询
- arrays - 如何根据 C“字符串”的长度闯入 Xcode 的调试器?
- javascript - 通过ajax加载表单后如何重新初始化jquery验证
- python - 如何为用户添加多个表单
- npm - 当我想安装包时,npm 不安装