我的问题:遍历Gurobi“ Var”决策变量会创建 TypeError:“ Var”和“ int”的实例之间不支持“ 和指数的问题(即** / pow())
有关Gurobi优化的关键信息:
- 目标函数:对于三个项目,最大化(价格*期望值)之和
- 期望值是通过两个定义的公式计算的:
- 1)PDF =概率密度函数
- 2)EV =期望值,它是PDF在 特定积分
- 决策变量“ upperBound”应该最大化此积分的上限,下限为0
模型下方:
from gurobipy import *
import pandas as pd,numpy as np,scipy.integrate as integrate
import math
mu = pd.DataFrame(np.array([10,15]),index = ["product1","product2"])
sigma = pd.DataFrame(np.array([1,1.5]),index = mu.index.values)
price = pd.Series(np.array([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 * (1.0 / (sigma * (2.0 * math.pi)**(1/2)) * math.exp(-1.0 * (y - mu)**2 / (2.0 * (sigma**2))))
def EV(ub,sigma):
lb = 0
value,error = integrate.quad(PDF,lb,ub,args=(mu,sigma))
return value
m.setObjective(
quicksum(
price.loc[i] * EV(ub[i],mu.loc[i],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)