在Drake中用SOS交替法寻找时间反转Van der Pol的Lyapunov V失败问询
时间反转Van der Pol振荡器ROA最大化的SOS求解问题
问题描述
我按作业要求用交替法求解[λ, ρ]和[V],目标是找到能最大化时间反转Van der Pol振荡器**区域吸引域(ROA)**的Lyapunov函数V,具体步骤:
- 用
V = x^T P x初始化,其中P是RealContinuousLyapunovEquation的解;
- 用
- 采用课堂同款SOS程序求解λ、ρ;
- 寻找满足上述λ、ρ约束及Lyapunov条件的任意V。
但求解器始终失败,哪怕把V的初始猜测设为P,也找不到可行解。
疑问
- 求解器失败是不是数值问题导致的正常情况?我实在搞不懂为什么第二个SOS程序解不出来;
- 这个问题有没有可行的解决方案?
分析与解决方案
关于数值问题的判断
是的,这类交替优化的SOS问题出现求解失败大概率是数值问题导致的,属于常见情况:
- 第一步求解得到的λ、ρ是基于初始V(即P)的最优边界,当固定这组λ、ρ去求解新V时,约束可能变得过于严苛,理论上的可行域在数值求解中被“压缩”到不存在;
- SOS本质依赖半定规划(SDP)求解,约束的非线性耦合、求解器的数值精度限制,都可能让求解器误判为无解,哪怕理论上存在可行解。
可行的解决方向
- 给约束加松弛项:在Lyapunov或ROA约束中加入微小的松弛系数(比如把
-∇V·f(x) ≥ λ(V - ρ)改成-∇V·f(x) ≥ λ(V - ρ) + 1e-6),避免约束过于紧绷导致数值无解; - 调整交替迭代策略:不要一次性固定λ、ρ到最优值,而是逐步迭代:先用初始V求次优的λ、ρ,再用这组次优值求新V,接着用新V再优化λ、ρ,循环几次,每次给λ、ρ留一定余量;
- 扩展V的参数化形式:如果仅用二次型
x^T P x表达能力不足,可以加入四次项(比如V = x^T P x + x_1^4 + x_2^4或更通用的张量形式),提升V的灵活性,更容易满足约束; - 切换SDP求解器或调整参数:尝试换用不同的SDP求解器(比如从Mosek换成SCS、CVXOPT),或者调整求解器的迭代次数、可行性容忍度等参数,放宽数值精度要求;
- 验证约束一致性:手动把初始的P代入第二步的约束中,检查是否真的满足所有条件。如果P都不满足,说明第一步的λ、ρ求解存在问题,或者时间反转系统的Lyapunov条件符号推导有误。
内容的提问来源于stack exchange,提问作者oswinso
相关产品推荐
相关产品推荐

