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

如何在Drake中固定部分决策变量以实现交替优化

Drake固定指定决策变量的实现方法

针对交替优化Lyapunov函数系数的场景,有两种常用实现方案,可根据使用频率选择:

方法1:求解时传入固定值(推荐用于交替优化)

该方案无需反复修改优化问题定义,仅需在调用solve时传入需要固定的变量与对应取值,迭代效率最高:

from pydrake.solvers import MathematicalProgram, Solve

# 提前一次性搭建完整优化问题,包含所有决策变量、约束与目标
prog = MathematicalProgram()
V_coeffs = prog.NewContinuousVariables(10, "V_coeff")  # Lyapunov函数系数变量示例
other_vars = prog.NewContinuousVariables(5, "other_var")  # 另一部分待交替优化的变量示例

# 交替优化循环
current_other_val = [0.0]*5  # 另一部分变量的初始值
for _ in range(10):
    # 第一轮:固定other_vars,优化V_coeffs
    fixed_var_map = {var: current_other_val[i] for i, var in enumerate(other_vars)}
    res1 = Solve(prog, variable_values=fixed_var_map)
    current_V_val = res1.GetSolution(V_coeffs)

    # 第二轮:固定V_coeffs,优化other_vars
    fixed_var_map = {var: current_V_val[i] for i, var in enumerate(V_coeffs)}
    res2 = Solve(prog, variable_values=fixed_var_map)
    current_other_val = res2.GetSolution(other_vars)

你只需要提前一次性定义好包含所有约束的完整优化问题,后续迭代仅需更换fixed_var_map里的固定变量和取值即可,无需重建问题。

方法2:添加等式约束固定(适合长期固定变量场景)

如果某部分变量需要在所有迭代中固定,不需要切换,可直接给变量添加上下界相等的边界约束实现固定:

# 固定单个变量为指定值
prog.AddBoundingBoxConstraint(2.5, 2.5, V_coeffs[0])
# 批量固定变量为数组fixed_vals中的对应值
prog.AddBoundingBoxConstraint(fixed_vals, fixed_vals, V_coeffs)

注意:该方式会直接修改优化问题本身,后续如果需要取消固定,需要手动删除对应的约束实例,灵活度低于方法1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:36:03