成本函数依赖于时变LQR返回的K个矩阵的非线性系统的直接转录

菲尔

我正在努力实现一种名为DIRTREL的轨迹优化算法,该算法本质上是直接转录,具有附加的成本函数。但是,成本函数包含通过围绕决策变量(x,u)线性化系统并采用离散时变LQR获得的K个矩阵。我的问题是,由于Riccati差分方程的递归性质,当我当前的方法以符号方式描述该系统并导致极其冗长的符号方程时(只会随着更多的时间步长而增加长度),因此如何在drake中最有效,简洁地表达这一点,甚至这种象征性的方法是否合适。

更多细节:

  1. 将我的系统指定为LeafSystem
  2. 用决策变量x,u声明数学程序
  3. 要获取随时间变化的线性动力学,请指定一个类,该类在单个时间步上接受动力学和决策变量,并使用symbolic.Jacobian(args)返回该时间步的Jacobian
  4. 添加成本函数,该函数将吸收整个轨迹,因此所有x,u

成本函数内部:

  1. 通过使用接收决策变量并返回雅可比行列的类,获取每个时间步的线性化矩阵A_i,B_i,G_i(噪声为G_i)
  2. 使用Riccati差分方程,使用A_i和B_i矩阵并求解Ks,计算TVLQR成本(S [n])
  3. 返回数学程序的成本,该成本实质上是K个矩阵的大型线性组合

旁注是我不确定以符号形式计算逆的最易处理的方法,但是我最关心的是我的方法论以及这种符号描述是否合适。

Hongkai Dai

我认为DIRTREL上有一些细节值得讨论:

  1. S[n]待销成本矩阵取决于线性化动力学Ai, Bi我认为在DIRTREL中,您将需要解决非线性优化问题,这需要成本的梯度。因此,要计算成本的梯度,您将需要的梯度S[n],这需要的梯度Ai, Bi由于AiBi是动力学函数的梯度,因此f(x, u)您将需要计算动力学的二阶梯度。
  2. 我们发表了一篇关于进行轨迹优化和优化与LQR成本相关的成本函数论文DIRTREL对我们的论文进行了一些改进。在我们的实现中,我们S也将其视为决策变量,因此我们的决策变量x, u, S的约束条件包括动力学约束条件x[n+1] = f(x[n], u[n])和Riccati方程作为的约束条件S我认为DIRTREL的方法可以用较少的决策变量更好地缩放,但是我没有比较这两种方法之间的数值性能。
  3. 我不确定为什么需要用符号来计算逆。首先,您需要计算什么逆数?其次,Drake支持使用自动微分来计算数值的梯度。我建议做数字计算而不是符号计算。由于在数值优化中,您只需要成本/约束的值和梯度,因此,用数字方式计算这些值通常要比先导出符号表达式然后评估符号表达式更为有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何返回依赖于两个函数的函数?

求解一个简单的非线性系统

在Keras中使用ImageDataGenerator时,如何定义依赖于输入的自定义成本函数?

非线性系统numpy的相图

运行java类大于64K在致力于解决方程的非线性系统

如何在Python中解决非线性系统

在 Python 上解决非线性系统

使用依赖于lambda函数的类型作为返回类型

最小化依赖于其顺序的成本函数的项目列表的“最佳”顺序是什么

解决具有大矩阵的稀疏线性系统时发生写访问冲突

返回依赖于数字的行数

系统服务可以依赖于远程系统服务吗?

Dymola中求解非线性系统模型的最大能力是多少?

Dymola在非线性系统初始化过程中如何选择迭代变量?

如何使用python从复杂的非线性系统中获取所有根(复数和实数)?

在matlab中使用具有多个输入的fsolve求解非线性系统

使用ode求解来求解3个差分方程(Lorenz方程)的非线性系统:Matlab中的ode23s

如何让Typescript知道依赖于传入参数的函数的返回类型

如何定义依赖于参数包转换的函数的返回类型?

返回依赖于函数内分配数据的惰性迭代器

一个系统中的文件可以依赖于另一个系统中的文件吗?

当reducer函数依赖于组件prop时,传递给useReducer钩子的reducer函数对于一个调度调用将多次执行

类型属性依赖于另一个属性的返回类型

Python:如何从依赖于模块的另一个文件中正确导入函数

在依赖于前一行值的DataFrame上应用一个函数

如何在init函数中实例化一个依赖于self的对象?

如何设计一个接受所有域但依赖于某些状态的局部函数?

依赖于numpy中2个数组的函数的向量化

如何有一个依赖于类的模板参数的成员函数实现?