首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >约束'feasibility_cut[1]‘没有适当的值。找到“真”

约束'feasibility_cut[1]‘没有适当的值。找到“真”
EN

Stack Overflow用户
提问于 2022-07-31 16:27:02
回答 1查看 48关注 0票数 0

我刚接触过蟒蛇和蟒蛇,所以我很感激你的帮助,

目前,我很难在Pyomo中给我的数学模型添加一个约束,问题是当我试图添加"feasibility_cut“时,它说”约束'feasibility_cut1‘没有适当的值。找到'True’,我从这里了解到,pyomo将这个约束视为逻辑上的比较约束,也就是说我不知道为什么!“

下面是我认为有必要看到的代码的一部分:

代码语言:javascript
复制
RMP = ConcreteModel()
RMP.ymp = Var(SND.E, within=Integers)
RMP.z = Var(within = Reals)

S1 = (len(SND.A), len(SND.K))
S2 = (len(SND.A), len(SND.A))
uBar= np.zeros(S1)
vBar=np.zeros(S2)

RMP.optimality_cut = ConstraintList()
RMP.feasibility_cut = ConstraintList()

expr2 = (sum(SND.Fixed_Cost[i,j]*RMP.ymp[i,j] for i,j in SND.E) + RMP.z)
RMP.Obj_RMP = pe.Objective(expr = expr2, sense = minimize)

iteration=0
epsilon = 0.01
while (UB-LB)>epsilon :
    iteration = iteration +1
    DSPsolution = Solver.solve(DSP)
    
    for i in SND.A:
        for k in SND.K:
            uBar[i-1,k-1] = value(DSP.u[i,k])
    for i,j in SND.E:
        vBar[i-1,j-1] = value(DSP.v[i,j])
        
    if value(DSP.Obj_DSP) == DSPinf:
        RMP.feasCut.add()
    else:
        RMP.optimCut.add()

    RMPsolution = solver.solve(RMP)
    
    UB=min(UB,)
    LB=max(LB,value(RMP.Obj_RMP))

    if value(DSP.Obj_DSP) == DSPinf:
        RMP.feasibility_cut.add( 0>= sum(-SND.Capacity[i,j]*vBar[i-1,j-1]*RMP.ymp[i,j] for i,j in 
        SND.E) + sum(uBar[i-1,k-1]*SND.New_Demand[k,i] for i in SND.A for k in SND.K if (k,i) in 
        SND.New_Demand) ) 
    else:
        RMP.optimality_cut.add( RMP.z >= sum(SND.Fixed_Cost[i,j]*RMP.ymp[i,j] for i,j in SND.E) + 
        sum(uBar[i-1,k-1]*SND.New_Demand[k,i] for i in SND.A for k in SND.K) - 
        sum(SND.Capacity[i,j]*vBar[i-1,j-1]*RMP.ymp[i,j] for i,j in SND.E) )
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-31 16:51:36

欢迎来到现场。

几个预赛..。当您发布生成错误的代码时,如果您发布了再现错误和堆栈跟踪所需的全部代码,或者至少确定导致错误的行是什么,则习惯于(而且更容易帮助这些代码)。

因此,在pyomo中使用约束列表时,添加到其中的所有内容都必须是模型变量、参数和其他常量等方面的合法表达式。您可能会收到错误,因为您正在添加一个计算为True的表达式。因此,您要添加的表达式很可能不依赖于模型变量。参见下面的示例。

另外,您需要小心地混合numpy和pyomo模型、numpy数组等等,这可能会导致一些混乱和奇怪的错误。我建议将所有数据放入模型中,或者使用纯python数据类型(列表、集合、字典)。

这里有两个错误。您的代码中也有一个空的add(),这将引发错误。

代码语言:javascript
复制
In [1]: from pyomo.environ import *

In [2]: m = ConcreteModel()

In [3]: m.my_constraints = ConstraintList()

In [4]: m.X = Var()

In [5]: m.my_constraints.add(m.X >= 5)   # good!
Out[5]: <pyomo.core.base.constraint._GeneralConstraintData at 0x7f8778cfa880>

In [6]: m.my_constraints.add()    # error!
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-cf466911f3a1> in <module>
----> 1 m.my_constraints.add()

TypeError: add() missing 1 required positional argument: 'expr'

In [7]: m.my_constraints.add(3 <= 4)  # error:  trivial evaluation!
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-7-a0bec84404b0> in <module>
----> 1 m.my_constraints.add(3 <= 4)

...

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 'my_constraints[2]'

In [8]: 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73185009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档