Python Pyomo ValueError:约束表达式无效

Python Pyomo ValueError:约束表达式无效,python,python-3.x,pyomo,Python,Python 3.x,Pyomo,我正在编写一个pyomo integer程序,其形式有以下限制: 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) def example_rule(model,j)

我正在编写一个pyomo integer程序,其形式有以下限制:

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)
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)
我找不到它为什么决定不喜欢
util[I][t]
的输入值的一致性。其中从不存在任何空值

如果我在没有此约束的情况下运行模型,它将一直正常工作

我还尝试将约束写入以下表单:

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)
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)
def示例_规则(模型,j):
a=0
对于模型t中的t:
n=0
对于模型F中的i:
如果model.x[j,i].value==1:
a=model.x[j,i]*util[i][t]
如果a==1:
n=n+a

return 0对于特定的t,是否存在util[i][t]在所有i上都为零的情况?乘以零的项会自动从表达式中删除,因此我猜您的错误是由“value”最终为零的情况引起的,在这种情况下,0我通过将约束声明更改为:

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

不幸的是,我不知道为什么这是有效的,而之前的没有

谢谢你@Bethany Nicholson,这似乎确实是个问题。我不知道如何解决这个问题。。。有什么想法吗?如果求和结果为0,我尝试将值设置为1,但它对此不满意。这对我来说仍然没有意义:-(在解决此特定错误后(使用下面答案中的方法…,我不知道为什么会这样),我的另一个约束也遇到了同样的问题。不过,这一次,我下面的答案无法解决问题。我不明白为什么会自动删除0个约束?有没有办法关闭此选项?@fishy321我编辑了我的答案,以显示两个可能的修复
def example_rule(model,j,t):
    return (0,sum(model.x[j,i]*(util1[i][t]) for i in model.F),1)
model.example = Constraint(model.L, model.T, rule=example_rule)