如何在Pyomo中动态向VarList添加预创建的决策变量
Pyomo VarList自定义变量填充方案
你不需要通过传入变量字典初始化VarList,VarList.add()方法本身就支持接收预先创建好的Var实例作为入参,完全支持自定义变量的所有属性配置,示例实现如下:
import pyomo.environ as pyo # 初始化VarList self.vl = pyo.VarList() # 预创建自定义属性的变量,所有Pyomo Var支持的配置项都可设置 custom_var = pyo.Var( domain=pyo.Binary, # 自定义变量域:二进制、整数、连续域等均可设置 bounds=(0, 10), # 自定义上下界 value=3, # 自定义初始值 name="internal_dynamic_var" # 自定义变量名 ) # 将预创建的变量加入VarList,方法返回值为该变量在VarList中的索引 var_idx = self.vl.add(custom_var) # 可通过索引正常访问变量,和默认add()生成的变量用法完全一致 print(self.vl[var_idx])
注意事项
- 你之前调用无参
add()时,VarList会自动生成默认属性的变量,因此无法满足自定义需求,只要将预创建的Var作为参数传入即可解决该问题 - 如需要批量导入多个自定义变量,直接循环调用
add()方法即可,示例如下:
# 批量添加自定义变量示例 var_count = 15 custom_var_list = [ pyo.Var(domain=pyo.NonNegativeReals, bounds=(0, i+2), name=f"dyn_var_{i}") for i in range(var_count) ] for var in custom_var_list: self.vl.add(var)
- 填充完成的VarList必须挂载到你的ConcreteModel实例上(例如
model.dynamic_var_list = self.vl),所有加入VarList的变量都会被识别为模型的一部分,不会再触发Variable 'XXX' is not part of the model being written out的报错
内容的提问来源于stack exchange,提问作者Plug1
相关产品推荐
相关产品推荐

