integrated.quad函数中包含的“ Var”决策变量的迭代创建TypeError“不可下标”>

问题描述 投票:0回答:1

我的问题:遍历“ Var”决策变量创建TypeError“不可下标”>]

关于gurobi优化的关键信息:

  • 目标功能:对于三个项目,最大化(价格*期望值)的总和] >>
  • 决策变量“ upperBound”为正态分布的期望值设置积分的上限,下限为0
  • 我正在尝试通过创建要迭代的数据序列来迭代决策变量
  • 我得到的TypeError
  • 是'Var'对象不可下标

    模型下方:

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:
python typeerror gurobi numerical-integration stochastic
1个回答
0
投票

您的代码有点难以阅读,但是这些行可能会导致错误:

© www.soinside.com 2019 - 2024. All rights reserved.