引言
在当今机器人技术迅速发展的背景下,优化问题求解成为了该领域的关键技能之一。为了帮助那些对机器人方向感兴趣,却苦于不知如何解决优化问题的同学,本系列专栏旨在让大家迅速掌握解决一般非凸、光滑、非光滑、有约束、无约束,以及具有特殊结构的凸问题和非凸问题的方法。
希望本系列能够帮助各位读者在机器人数值优化领域迈出坚实的第一步。
一、参考书籍推荐
首先给出以下四本书作为参考:
- 《最优化:建模、算法与理论》 第一本是北大的文再文团队编著的书籍,这本书是中文版的,给了很多算法的理论和具体流程,可以作为比较好的入门书籍,对国内的学者来说是比较不错的选择。
- 《数值优化》Numerical Optimization 第二本除了理论方面很全之外,也关注了很多程序中的问题,因为程序代码是用浮点数表示的,所以会引发一系列的关于程序稳健性数值的问题,怎么样去规避。因为浮点数表示会存在舍入误差的数值问题。这也是这本书比较有特色地方,给了很多工程实践上比较有用的技巧,让理论的算法在转化到对应的程序时更加鲁棒、更加稳定。
- 《凸优化教程》Lectures on Convex Optimization 第三本主要聚焦在凸优化理论,从光滑到非光滑到结构优化,涵盖了很多理论上的知识点,这本书的思路也比较清晰,建议大家如果对理论方面感兴趣,也可以看第三本书。
- 《现代凸优化分析、算法和工程应用教程》LECTURES ON MODERN CONVEX OPTIMIZATION ANALYSIS, ALGORITHMS, AND ENGINEERING APPLICATIONS 第四本书针对一类特殊的凸优化——锥优化,对锥规划以及多项式时间复杂度的内敛算法都有比较好的整体分析和应用。
一般查阅这四本书比较多,这四本书并不是互相独立的,可以重点看第一本、第二本还有第三本书。
二、数值优化的定义与组成
数值优化是机器人技术中一种重要的算法,它通过数学模型和算法来找到使机器人系统性能最优的参数值。这种优化通常涉及最小化目标函数,该函数反映了机器人性能的某些度量,如能耗、轨迹精度、响应时间等。优化问题可以非常复杂,涉及多个变量和约束条件。
2.1 数值优化组成部分
数学优化一般由几个部分组成: $$\min f(x) \ \text{s.t.} \quad g(x) \leq 0 \ \quad \quad h(x) = 0$$
(1) 优化变量
$x = (x_1, \cdots, x_n) \in R^n$ 是 $n$ 维的向量,称为优化变量 (Optimization Variables)。
(2) 目标函数
$f : R^n \rightarrow R$ 评价 $x$ 是否更优,是否更好,要看目标函数 (objective function) $f$ 为 $x$ 赋予了值,值是越小越好的。
(3) 不等式约束
$g : R^n \rightarrow R^{m_g}$ 比如 $g(x) = (x_1 - 1)^2 + x_2^2 - 1 \leq 0$ 描述的就是以 $(1, 0)$ 为圆心,$1$ 为半径的圆形区域,就要在圆形里面找到 $f(x)$ 的最小值,所以 $x$ 除了圆形区就是不感兴趣的区域,就不要了。
(4) 等式约束
$h : R^n \rightarrow R^{m_h}$ 比如在三维空间的曲面上,所寻找的 $x$ 要在曲面上滑动,它不应该在曲面之外,所以曲面可以用等式 $h$ 表述,如 $x_1^2 + x_2^2 + x_3^2 = 0$ 表示的是球面的一部分,它其实是整个球面,$h$ 也可以是多个等式。比如 $$\begin{cases} x_1^2 + x_2^2 + x_3^2 = 0 \ -x_1 + x_2 + x_3 = 0 \end{cases}$$ 表示的是曲面和平面相交的曲线。
定义最优值 $x^*$,要满足所有约束,在感兴趣的区域内,所有满足约束的 $x$,称作 可行解 (Feasible Solution)。
最优解是可行解中具有最低目标函数 $f(x)$ 值的解的集合,这里有几层意思,就是说最优解 $x$ 一定属于该解集。因为最优解可能不止一个,也可能没有,也可能有多个的情况。
2.2 数值优化前提假设
另一方面需要对所考虑的等式和不等式约束要有假设,在机器人数值优化中,假设目标函数一定满足以下两点:
- 假设 1:目标函数具有下界,即 $f(x) \geq \alpha$。目标函数的最小值可以很小但必须有界,因此,目标函数不能存在负无穷的值,若存在负无穷的值会使得最小值无法在计算机中用浮点数表示。
- 假设 2:目标函数具有有界子级集,即当目标函数 $f(x) \leq \beta$ 时,$x$ 有界,保证最优解在 $x$ 的有限范围内取到。 目标函数不能存在当 $x$ 趋于无穷时函数趋于某个值即下水平集无界,这同样会导致最小值无法用浮点数表示。


