You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用平方和优化求解倒立摆LQR吸引域时结果趋近于零的问题

问题诊断与解决方案建议

核心问题排查方向

1. 约束条件的处理偏差

你提到的s^2 + c^2 == 1是单位向量的固有性质,但在平方和(SOS)优化中,不能直接将等式约束硬编码为严格相等——这种做法会过度限制求解器的可行域,最终导致吸引域收缩至零。

  • 正确处理方式:
    • 变量替换:直接用角度偏差θ作为状态变量,用sinθ和cosθ描述摆姿态,彻底消除冗余约束;
    • 乘子松弛:若必须保留s, c变量,需将等式约束转化为(s^2 + c^2 - 1) * λ(s,c)(λ为任意多项式乘子),并将其加入Lyapunov函数导数的负定性条件中,让求解器自动处理约束松弛。

2. LQR价值函数的非线性适配问题

LQR价值函数基于线性化模型推导,而你用于SOS验证的是非线性原系统,直接套用可能存在适配性问题:

  • 检查该价值函数在非线性系统下的导数符号:即使线性化系统稳定,非线性区域中函数导数可能不满足负定,迫使求解器只能找到极小的吸引域;
  • 尝试给LQR价值函数添加高阶修正项,例如构造V(x) = V_LQR(x) + V_high(x)(V_high(x)取二次或四次低次多项式),增强对非线性特性的适配能力。

3. SOS优化的数值稳定性问题

  • 检查多项式次数设置:过高的多项式次数会引发数值病态,导致可行域收缩;可先降低次数(如从四次降至二次)测试效果;
  • 调整边界约束:若初始搜索域设置过小,或约束惩罚系数过大,也会导致求解器返回零域;建议先放宽边界,再逐步缩小范围。

代码修正建议

针对你参考的示例代码,可做以下调整:

  1. 替换状态变量:
    将s, c替换为角度偏差θ,直接用三角函数描述姿态,消除s^2 + c^2 == 1约束:
    theta = sp.Symbol('theta')
    s = sp.sin(theta)
    c = sp.cos(theta)
    
  2. 重构约束形式(若保留s,c):
    将等式约束转化为乘子形式加入优化条件:
    lambda_poly = sp.Symbol('lambda')
    constraint = (s**2 + c**2 - 1) * lambda_poly
    sos_constraint = psos.sos(V_dot + constraint)
    
  3. 调整Lyapunov函数:
    在LQR价值函数基础上添加高阶修正项:
    V = V_lqr + 0.1 * theta**4  # theta为倒立摆直立状态的角度偏差
    

验证步骤

  1. 先移除s^2 + c^2 == 1约束,测试求解器是否能输出非零吸引域;
  2. 逐步加入乘子形式的约束,观察吸引域的变化趋势;
  3. 对修正后的Lyapunov函数做前向仿真,验证其在吸引域内的稳定性。

内容的提问来源于stack exchange,提问作者TheEmboldened

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 15:17:05