python - 如何仅为某些索引设置 Pyomo 索引变量的值并让其他索引自由?

标签 python pyomo

我目前正在构建优化模型,并且有一个关于设置预定义/固定参数值的问题。

我的参数由两个不同的预定义集 G & T 索引,如下所示: '''model.q=param(G,T)'''

我的问题与以下内容有关:

我想将此参数的某些索引值设置为预定义值,并让其他值自由以确定问题: 例如 q[1,"A"]=50 或 q[2,"B"]=80 但不是全部。

为此,我为特定的 G 和 T 值创建了一个形式为 {(G,T) : x } 的适当字典,但是当我尝试使用此字典初始化参数时,出现错误:某些索引缺少参数值,这是正确的,因为字典引用了特定值。

是否有其他方法可以解决上述问题?

如果我使用特定索引的字典的特定值对优化模型中的参数设置约束,以便模型可以自由决定参数的所有其他索引值,这会起作用吗?

P.S.:我知道我没有附加任何代码,但即使特定的 block 也太大而无法附加,我希望我的写作有足够的解释性!

提前谢谢您!

最佳答案

有多种方法可以做到这一点。首先,词汇......如果“项目”在求解过程中可以改变,那么它就是一个变量参数是模型中的固定常量。所以,如果我理解正确的话,你有一个索引变量,你想分配值并将它们锁定。你可以设置值,然后单独将锁设置为 True ,或者使用 fix() “一体化”。在下面的模型中,x['A']x['C']是固定的,其他值可能会 float :

import pyomo.environ as pyo

locks = {"A": 12, "C": 14}

m = pyo.ConcreteModel()

m.S = pyo.Set(initialize=list('ABCD'))

m.x = pyo.Var(m.S, domain=pyo.NonNegativeReals)

# set and lock the vars...

for idx in locks.keys():
    m.x[idx].fix(locks[idx])

m.pprint()

输出:

1 Set Declarations
    S : Size=1, Index=None, Ordered=Insertion
        Key  : Dimen : Domain : Size : Members
        None :     1 :    Any :    4 : {'A', 'B', 'C', 'D'}

1 Var Declarations
    x : Size=4, Index=S
        Key : Lower : Value : Upper : Fixed : Stale : Domain
          A :     0 :    12 :  None :  True : False : NonNegativeReals
          B :     0 :  None :  None : False :  True : NonNegativeReals
          C :     0 :    14 :  None :  True : False : NonNegativeReals
          D :     0 :  None :  None : False :  True : NonNegativeReals

2 Declarations: S x

这有一些重复的信息:How can I set a value of an indexed variable? - Pyomo

关于python - 如何仅为某些索引设置 Pyomo 索引变量的值并让其他索引自由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76157400/

相关文章:

python - 试图将 fizzbuzz 变成 python 3 中的函数

python - 皮莫/IPOPT : retrieving computed variables

python - 如何确定 sklearn 逻辑回归的预测概率是否准确?

python - Python 中更快的 kNN 算法

python - pygame 将图像放置在屏幕上的问题

JModelica 中的 Python/Pyomo 错误

python - 安装/运行 Pyomo(未找到命令)

python - 如何在 map 上可视化得到的响应

python-2.7 - 如何从pyomo的ipopt界面中找到违反了哪个约束?

python - 如何在类中使用 Pyomo 装饰器