如何在Pyomo中写出一个多条件非线性分段函数作为目标函数



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

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表达式类。

错误属于以下条件代码行:

if x<=omega/U_alpha3:

在这种情况下,x是"IndexedComponent_slice"类型,而omega/U_alpha3是"numpy.foat64",因此Pyomo无法比较它们。我意识到,如果我用值(x(代替x,错误就会消失。

最新更新