gpt4 book ai didi

python - Pyomo 值错误 : Invalid constraint expression

转载 作者:太空宇宙 更新时间:2023-11-03 15:52:41 24 4
gpt4 key购买 nike

我正在编写一个具有以下形式约束的 pyomo 整数程序:

def example_rule(model, j, t):
value = sum(model.x[j,i]*(util[i][t]) for i in model.F)
return 0 <= value <= 1
model.onelateral = Constraint(model.L, model.T, rule=example_rule)

util[i][t] 是一个包含始终为 0 或 1 的值的字典。model.x[j,i] 是二元决策变量。

有时当我运行我的模型时,它工作正常。但是,有时当我更改 util[i][t] 中的维度/值时,它会抛出此错误:

ERROR: Constructing component 'example' from data=None failed:
ValueError: Invalid constraint expression. The constraint expression resolved to a trivial Boolean (True) instead of a Pyomo object. Please modify your rule to return Constraint.Feasible instead of True.

Error thrown for Constraint 'example[L01]'

关于为什么它决定不喜欢 util[i][t] 的输入值,我找不到任何一致性。那里从来没有任何空值。

如果我在没有此约束的情况下运行模型,它会一直运行良好。

我也试过将约束写成以下形式:

def example_rule(model,j):
a = 0
for t in model.T:
n = 0
for i in model.F:
if model.x[j,i].value == 1:
a = model.x[j,i] * util[i][t]
if a == 1:
n = n + a
return 0 <= n <= 1
model.example = Constraint(model.L, rule=example_rule)

但是我得到了同样的错误信息。

我看过这里:https://groups.google.com/forum/#!msg/pyomo-forum/hZXDf7xGnTI/_aiAUN5IwgQJ但这对我没有帮助。

我已经尝试过使用 cbc 和 glpk 求解器。我正在使用 Pyomo V5.2,Python V3.6.1。

提前感谢您的帮助。

最佳答案

您是否遇到过对于特定 t 的所有 i 的 util[i][t] 为零的情况?乘以零的项会自动从表达式中删除,所以我猜你的错误是由“值”最终为零的情况引起的,在这种情况下 0 <= 值 <= 1 将返回一个微不足道的 bool 值。

解决此问题的最简单方法是将 util 正式声明为 Param 组件,并在声明中添加 mutable=True。这向 Pyomo 发出信号,表明您可以更改 util 参数的值,从而避免自动简化 0 值。

m.util = Param(m.F, m.T, initialize=util_init, mutable=True)

另一种方法是检查 util 的值并在整个列为零时跳过约束

def example_rule(model, j, t):
if not any(util[i][t] for i in model.F):
return Constraint.Skip
temp = sum(model.x[j,i]*(util[i][t]) for i in model.F)
return 0 <= temp <= 1
model.onelateral = Constraint(model.L, model.T, rule=example_rule)

关于python - Pyomo 值错误 : Invalid constraint expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45616967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com