使用 Pyomo 的初始条件错误

Error with initial conditions using Pyomo

我正在使用 this article 中定义的 Chebishev 优化在 Pyomo 中实现 Brachistochrone 问题。

问题的初始条件为 x(0)=y(0)=0。

但是,一旦我 运行 我得到以下错误的代码

Error evaluating constraint 1: can't evaluate sqrt'(0).

我把我的变量写成

def x_initialize (model,i):   
    return 0.5*(i/value(m.n))  
m.x = Var(m.N, within = NonNegativeReals, initialize = x_initialize)

def y_initialize (model,i):   
    return 0.5*((i)/value(m.n))   
m.y = Var(m.N, within = NonNegativeReals, initialize = y_initialize)

def f_x_definition(model, i):
    return m.f_x[i] == sqrt(2*g*m.y[i])*cos(m.angle[i])
 m.f_x_const = Constraint(m.N, rule = f_x_definition)

 def f_y_definition(model, i):
     return m.f_y[i] == sqrt(2*g*m.y[i])*sin(m.angle[i])
 m.f_y_const = Constraint(m.N, rule = f_y_definition)

我曾尝试在 def x_initialize (model,i): 和 def y_initialize (model,i): 中添加一个小数字来补偿,但是随后,程序返回了一个恢复失败的错误。另一种尝试是使用 **(1/2) 代替 sqrt,但也没有用。

我想不出任何其他方法来解决这个问题。

问候。

最后我使用 if as

手动引入了 i=0 的值
def f_x_definition(model, i):
    if i == 0:
        return m.f_x[i] ==0
    else:
        return m.f_x[i] == ((2*g*m.y[i])**(1/2))*cos(m.angle[i])