优化器接口
非线性规划(NLP)求解器
Pockit 目前支持 IPOPT 和 Scipy 求解器。如果可用,总是应该选择 IPOPT。
使用 ipopt.solve
或 scipy.solve
函数调用求解问题。
[v2_0, ..., v2_{n_p - 1}, v2_sp], info = ipopt.solve(
S, # 系统
[v_0, ..., v_{n_p - 1}, v_sp], # 每个阶段对应的初值猜测,最后为系统参数的初值猜测
optimizer_options=optimizer_options # dict 类型,直接传递给底层优化器
)
# 返回:
# [v2_0, ..., v2_{n_p - 1}, v2_sp]: 各个阶段对应的计算结果 Variable 对象
# info: 优化器的原始返回对象,用于提取其他信息
若系统只有一个阶段且没有系统参数,也可简化为
v2, info = ipopt.solve(
S, # 系统
v, # 每个阶段对应的初值猜测,最后为系统参数的初值猜测
optimizer_options=optimizer_options # dict 类型,直接传递给底层优化器
)
# 返回:
# [v2_0, ..., v2_{n_p - 1}, v2_sp]: 各个阶段对应的计算结果 Variable 对象
# info: 优化器的原始返回对象,用于提取其他信息
稀疏线性方程求解器
IPOPT 使用内点法求解非线性规划问题,其利用稀疏线性方程求解器计算线搜索方向。 对于内点法,每个迭代步所求解的线性方程组几乎总是病态的。稀疏线性方程求解器对计算的收敛性和速度至关重要。
线性方程求解器可以通过 optimizer_options
参数传递给 IPOPT 求解器,参数选择详见 IPOPT 文档。