等式约束:硬约束与弹性约束
如果等式项对应的是在发生不一致时可以放宽的软任务,ElastiQP 会通过成对的相反方向弹性不等式约束及相应的惩罚项,支持弹性等式。
弹性等式由两个方向相反的不等式表示;违反这些不等式时,需要支付相应的惩罚代价。
通常,只有在等式确实可以作为软约束处理时,才应采用这种结构,因为每个等式都需要额外添加两个不等式约束。
评测
作为对比,ElastiQP 针对小规模稠密问题,与三种领先求解器 DAQP、PIQP 和 ProxQP 进行了评测;此外还与 qpax 进行了比较。qpax 实现了一种高效的、与 ElastiQP 类似的凝聚式弹性模式。
为了准确评估哪一类求解器更适合弹性机器人控制问题,研究还将 ElastiQP 的有效集方法与弹性 PDAL 和 IPM 变体进行了对比。这些变体将在附录中进一步介绍。
所有结果均记录于搭载 Intel Core Ultra 7 258V CPU 的笔记本电脑上。C++ 求解器使用 GCC 13.3 编译,并启用 -O3 优化。对于更大规模的问题,使用 -march=native 编译通常还能进一步提升性能,因此文中报告的数据较为保守。
提供的文本未说明使用 -march=native 所获得的具体性能提升。
qpax 是一个纯 JAX/Python 库。文中数据反映的是使用近期 JAX 版本 0.11.0、双精度计算时,经 JIT 编译后的 CPU 性能。
可行控制回路
ElastiQP 在可行域和不可行域上都展现出极高的速度,达到微秒级。即使对于最困难的不可行问题 hum-wbc,冷启动求解也能稳定保持在 1 kHz 控制所要求的 1 ms 目标以内。
在较大规模的问题上,热启动通常还能带来 2–4 倍的额外性能提升,使 ElastiQP 成为应对复杂控制问题、持续提供高频求解能力的最可靠始终可行方法。
在严格可行的场景中,DAQP 是解决这些问题速度最快的方法,ElastiQP 紧随其后。在这一场景下,DAQP 和 ElastiQP 等有效集方法无论冷启动还是热启动都表现出色:最优解中处于激活状态的约束相对较少,因此冷启动很快;而不同时间步之间的有效集相对稳定,因此热启动也很快。
在这些问题规模下,为实现弹性约束而增加的处理只需几微秒。考虑到始终可行方法带来的可靠性,这是一项可以接受的代价。PDAL 变体、ProxQP 和 ElastiQP-PDAL 的热启动性能同样不错,但仍落后于有效集变体,尤其是在较小规模的问题上。
与 DAQP 的扩展松弛变量形式相比,ElastiQP 的凝聚处理带来了超过 40 倍的性能提升。对于 ElastiQP 的 PDAL 和 IPM 变体,凝聚处理分别带来 10 倍和 20 倍的性能提升。在冷启动 PDAL 场景下,这一差距进一步扩大到 250 倍以上。
ElastiQP 的速度也比 qpax——主要的弹性凝聚基线——快 30–80 倍。
不可行控制回路
在不可行场景中,ElastiQP 在所有用于构造松弛问题的替代求解器和策略中都取得了显著优势。
正如预期,标准硬约束求解器 DAQP、PIQP、ProxQP,以及 qpax 的硬约束形式,都无法求解不可行问题。有时,仅报告问题不可行就可能耗费危险的长时间。
以使用 ProxQP 的热启动控制器为例:如果某一个时间步暂时不可行,控制器可能需要最多约 93 ms 才能报告不可行并完成相应处理,而其名义时间预算只有 1 ms。
在这一场景中,除 ElastiQP 外表现第二好的求解器是 ProxQP 的稀疏后端,但它只有在热启动时才会通过求解扩展松弛变量形式取得这一表现。即便如此,该方法仍不足以在类人机器人规模的问题上实现可靠的 1 kHz 控制,而且速度约比 ElastiQP 慢 20–40 倍。
其他替代方案 ProxQP-slack 和 PIQP-slack 的速度则进一步落后。
常见问题
什么是 ElastiQP? ElastiQP 是一种面向受约束机器人控制、始终保持可行的二次规划求解器。
ElastiQP 如何处理软等式约束? 它使用成对的相反方向弹性不等式约束及相应的惩罚项来表示弹性等式。
热启动会如何影响 ElastiQP 的性能? 在较大规模的问题上,热启动可带来额外 2–4 倍的性能提升。
为什么 ElastiQP 适用于不可行控制问题? 当硬约束替代方案失败,或报告不可行所需时间过长时,ElastiQP 仍能快速完成可行的控制求解。
