如何在 Drake 中固定决策变量
How to hold decision variables fixed in Drake
我想使用交替执行 Lyapunov 函数系数优化,这需要在优化另一个子集的同时保持决策变量的一个子集不变。我如何在 Drake 中固定某些决策变量?
当你在李亚普诺夫分析中进行双线性交替时,该方法将在两个步骤之间交替:
- 将李亚普诺夫函数固定为常数值,并搜索拉格朗日乘数。
- 固定拉格朗日乘子为常数值,搜索李亚普诺夫函数(或子水平集)
我建议你创建一个像这样的辅助函数
def lyapunov_derivative(lyap, dynamics, x, lagrangian, rho):
# Return the polynomial -Vdot - lagrangian * (rho - V)
dVdx = np.array([lyap.Differentiate(x[i]) for i in range(x.shape[0])])
Vdot = dVdx @ dynamics
return -Vdot - lagrangian * (rho - V)
假设您找到了 Lyapunov 函数,然后您需要计算这个 Lyapunov 函数,用您找到的值替换它的所有决策变量。你可以通过
result = Solve(prog)
lyap_sol = result.GetSolution(lyap)
rho_sol = result.GetSolution(rho)
其中 lyap
是一个多项式,其决策变量值是通过求解数学程序刚刚找到的。现在 lyap_sol
不包含任何决策变量(它仍然包含不确定变量)。现在你可以调用 lyapunov_derivative(lyap_sol, dynamics, x, lagrangian, rho_sol)
,它将 return 你一个以拉格朗日作为未知项的多项式。然后,您可以求解数学程序以找到拉格朗日乘数系数的值,然后用该拉格朗日解调用 lyapunov_derivative
函数,找到 Lyapunov 函数,并进行下一次迭代。
我想使用交替执行 Lyapunov 函数系数优化,这需要在优化另一个子集的同时保持决策变量的一个子集不变。我如何在 Drake 中固定某些决策变量?
当你在李亚普诺夫分析中进行双线性交替时,该方法将在两个步骤之间交替:
- 将李亚普诺夫函数固定为常数值,并搜索拉格朗日乘数。
- 固定拉格朗日乘子为常数值,搜索李亚普诺夫函数(或子水平集)
我建议你创建一个像这样的辅助函数
def lyapunov_derivative(lyap, dynamics, x, lagrangian, rho):
# Return the polynomial -Vdot - lagrangian * (rho - V)
dVdx = np.array([lyap.Differentiate(x[i]) for i in range(x.shape[0])])
Vdot = dVdx @ dynamics
return -Vdot - lagrangian * (rho - V)
假设您找到了 Lyapunov 函数,然后您需要计算这个 Lyapunov 函数,用您找到的值替换它的所有决策变量。你可以通过
result = Solve(prog)
lyap_sol = result.GetSolution(lyap)
rho_sol = result.GetSolution(rho)
其中 lyap
是一个多项式,其决策变量值是通过求解数学程序刚刚找到的。现在 lyap_sol
不包含任何决策变量(它仍然包含不确定变量)。现在你可以调用 lyapunov_derivative(lyap_sol, dynamics, x, lagrangian, rho_sol)
,它将 return 你一个以拉格朗日作为未知项的多项式。然后,您可以求解数学程序以找到拉格朗日乘数系数的值,然后用该拉格朗日解调用 lyapunov_derivative
函数,找到 Lyapunov 函数,并进行下一次迭代。