如何在 Pyomo 中将多条件非线性分段函数编写为 objective 函数?

How to write a multi-conditional nonlinear piecewise function as the objective function in Pyomo?

我正在努力在 Pyomo 的 objective 函数中编写一个非线性分段函数。该函数定义如下:

def U3(xph,Hz,omega,U_alpha3,landah,n):
       Ucost=0
       for h in range(Hz):
              h=int(h)
              x=xph[0,h]
              omega=landah[n,h]
              if x<=omega/U_alpha3:
                     u3=omega*x-U_alpha3/2*x**2
              else: 
                     u3=0.5*omega**2/U_alpha3
              Ucost=Ucost+u3
       return Ucost

在这段代码中,我的决策变量是xph,其他参数是常量。 此代码中的问题是它无法比较 x<=omega/U_alpha3 语句并出现以下错误:

TypeError: '<=' not supported between instances of 'IndexedComponent_slice' and 'numpy.float64'

这个函数实际上有两个以上的条件所以我不能使用 Expr_If 表达式 class.

错误属于这个条件代码行:

if x<=omega/U_alpha3:

在这种情况下,x 是 'IndexedComponent_slice' 类型,而 omega/U_alpha3 是 'numpy.float64' 所以 Pyomo 无法比较它们。 我意识到如果我用 value(x) 替换 x,错误就会消失。