我有一个关于 Drake 中的自动微分 (AD) 的问题。如果有人用 Python 为系统编写 DAE,Drake 如何计算导数以进行优化?它在后端是否有 AD 包或它使用有限差异。此外,它如何实现四元数表示的积分和微分。非常感谢您提前抽出时间。
答案 0 :(得分:1)
Drake 如何计算用于优化的导数
Drake 使用 Eigen 的 autodiffscalar 类型进行自动微分(不是有限差分方法)。如果您熟悉深度学习研究,那么 pytorch 使用 pytorch tensor object 实现反向传播就是自动微分(AD)的一个例子。 Eigen 的 autodiffscalar 是 AD 的另一个例子,虽然不是通过反向传播(它只使用前向传播)。
顺便说一句,要在python中创建动态系统,您可以参考本教程https://github.com/RobotLocomotion/drake/blob/master/tutorials/dynamical_systems.ipynb
<块引用>另外,它是如何实现四元数表示的积分和微分的。
我想你的意思是四元数的时间积分。故事分为两部分:
听起来您要进行基于梯度的优化。我们也有一些关于该主题的交互式教程(您可以在 jupyter notebook 中以交互方式运行这些教程)。您可以将 https://github.com/RobotLocomotion/drake/blob/master/tutorials/mathematical_program.ipynb 作为起点,https://github.com/RobotLocomotion/drake/blob/master/tutorials/nonlinear_program.ipynb 用于基于梯度的非线性优化。我们还在教程 https://github.com/RobotLocomotion/drake/blob/master/tutorials/debug_mathematical_program.ipynb 中提供了一些非线性优化的调试技巧。所有教程都在文件夹 drake/tutorials
中,您可以在该文件夹中找到其他主题的教程。