使用Pyom时出现初始条件错误

2024-05-18 17:43:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用切比雪夫优化(如this article中所定义)在Pyomo中实现短时间问题

问题的初始条件是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,但也没有成功

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

问候


Tags: modelreturnvaluevardef错误sqrtrule
1条回答
网友
1楼 · 发布于 2024-05-18 17:43:15

最后,我使用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])

相关问题 更多 >

    热门问题