Gurobi中如何将Var、QuadExpr对象转换为实际数值进行计算
原因说明
你当前输出为表达式对象而非数值,是因为y[i]是Gurobi的变量对象,直接参与运算会生成Gurobi内置的二次表达式QuadExpr类型,不会自动代入求解后的变量值。
修改方案
方案1:直接提取变量值参与计算
在运算时通过y[i].X属性获取y[i]的求解后数值再做计算,代码修改如下:
for i in P: y_val = y[i].X S = (y_val - R*p[i]) ** 2 / (p[i] ** 2) print(S)
方案2:对已生成的二次表达式求值
如果不想修改原有计算逻辑,也可以对生成的QuadExpr对象调用.getValue()方法直接计算数值结果:
for i in P: S = (y[i] - R*p[i]) * (y[i] - R*p[i]) / (p[i] * p[i]) print(S.getValue())
注意事项
- 以上操作必须在调用模型的
optimize()方法完成求解之后执行,否则无法获取到有效的变量值。 - 常规求解最优解的场景下直接用
.X属性即可,如果你有获取其他解的需求,可以替换为对应属性获取变量值。
内容的提问来源于stack exchange,提问作者炎天下修羅
相关产品推荐
相关产品推荐

