可重现性和确定性

可重现性和确定性#

给定相同的硬件和Isaac Sim(因此也有PhysX)版本,对于具有刚体和关节的场景,模拟会产生相同的结果。但是,由于浮点精度和舍入误差,模拟结果可能会因不同的硬件配置而变化。目前,PhysX不保证对于具有非刚体(如布料或软体)的任何场景是确定性的。有关更多信息,请参阅 PhysX Determinism 文档

基于上述,Isaac Lab提供确定性仿真,确保在不同运行中获得一致的仿真结果。这是通过在仿真环境和物理引擎中使用相同的随机种子来实现的。在构建环境时,随机种子使用 set_seed() 方法设置为固定值。该方法在不同库(包括PyTorch和NumPy)中全局设置CPU和GPU的随机种子。

在包含的工作流脚本中,使用在学习智能体配置文件或命令行参数中指定的种子来设置环境的随机种子。这样可以确保模拟结果在不同运行中是可重现的。种子被设置为环境参数 omni.isaac.lab.envs.ManagerBasedEnvCfg.seedomni.isaac.lab.envs.DirectRLEnvCfg.seed,取决于基于管理器或直接环境的实现。

对于我们关于强化学习训练的确定性测试结果,请查看 GitHub Pull Request #940

小技巧

由于 GPU 工作调度,存在一种可能性,即运行时对模拟参数的更改可能会改变操作进行的顺序。这是因为当 GPU 忙于执行其他任务时,环境更新可能会发生。由于浮点数存储的固有特性,对执行顺序的任何修改可能导致输出数据的最不显著位上发生微小变化。这些变化可能导致在模拟数千个环境和模拟帧的过程中出现不一致的执行。

一个说明性的例子是关于物体物理材质的运行时域随机化。当在GPU上执行时,该过程可能会引入确定性和模拟问题,因为这些参数是通过低级API从CPU传递到GPU的方式。因此,强烈建议只在设置时间执行此操作,即在环境步进开始之前。