您的代码有点难以阅读,但是这些行可能会导致错误:
我的问题:遍历“ Var”决策变量创建TypeError“不可下标”>]
关于gurobi优化的关键信息:
模型下方:
from gurobipy import * import pandas as pd, numpy as np, scipy.integrate as integrate import scipy.stats mu = pd.DataFrame(np.array([10, 15, 20]), index = ["product1", "product2", "product3"]) sigma = pd.DataFrame(np.array([1, 1.5, 2]), index = mu.index.values) price = pd.DataFrame(np.array([10, 10, 10]), index = mu.index.values) m = Model("maxUpperBound") ub = m.addVars(mu.index.values, vtype=GRB.INTEGER, name="upperBound") def PDF(y, mu, sigma): return y * scipy.stats.norm.pdf(y, mu, sigma) def EV(ub, mu, sigma): EVTotal = [] for i in mu.index.values: EVi = [] for ub in ub[i]: EV, err = integrate.quad(PDF, 0, ub, args=(mu.loc[i], sigma.loc[i])) EVi.append(EV) EVTotal.append(EVi) return pd.Series(EVTotal, index=mu.index) m.setObjective( quicksum( price.loc[i] * EV(ub[i], mu, sigma).loc[i] for i in mu.index.values ), GRB.MAXIMIZE) m.addConstr( (quicksum(ub[i] for i in mu.index.values) <= 100), "Limit100" ) m.optimize() for v in m.getVars(): print(v.varName, v.x)
我的问题:遍历“ Var”决策变量会产生TypeError“不可下标的gurobi优化关键信息:目标函数:对于三个项目,最大化(price * ...
您的代码有点难以阅读,但是这些行可能会导致错误:
ub = m.addVars(mu.index.values, vtype=GRB.INTEGER, name="upperBound") ... for ub in ub[i]:
ub
是一个元组,ub[i]
将引用一个Var对象。您不能迭代单个变量。
我猜你想写这样的东西:
for ub_i in ub:
您的代码有点难以阅读,但是这些行可能会导致错误: