Pyomo 迭代约束

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

嗨,我有一个关于 Pyomo 初始化的问题。

我的 Pyomo 模型中有这个初始化器

asset_id={}
asset_id[0]=["A1","A2","A3","A4"]
asset_id[1]=["B1","B2","B3","B4"]
model = pyo.ConcreteModel()
model.asset1_id = pyo.Set(initialize=asset_id[0])
model.asset2_id = pyo.Set(initialize=asset_id[1])
    

如果可能的话,我正在寻找类似下面代码的东西,因为我有一个未知的资产,我需要初始化它,因为它基于用户输入。

model = pyo.ConcreteModel()
model.asset={}
for i in range(0,2):
   model.asset[i]= pyo.Set(initialize=asset_id[i])
   model.asset[i]= pyo.Set(initialize=asset_id[i])

我怎样才能实现如上所示的结果,因为我已经尝试过这种方式,而 Pyomo 会抛出错误?

我发现当我尝试使用 model.asset 参数之一添加约束时它不起作用。我还发现 list(model.x[0]) 不工作。

python pyomo
1个回答
0
投票

您可以修改您的代码以实现您想要的初始化,如下所示:

model = pyo.ConcreteModel()
model.asset = {}
for i in range(2):
    asset_id = input(f"Enter asset ids for asset {i+1}: ").split()  # take user input
model.asset[i] = pyo.Set(initialize=asset_id)

此代码创建一个空字典

model.asset
,然后在 2 的范围内循环以获取资产 ID 的用户输入。用户输入被分成资产 ID 列表,然后用于初始化每个资产的
pyo.Set
对象。这将允许您根据用户输入初始化未知数量的资产。

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