由于专业方面需要用到各种数值优化的算法,所以最近在学习 Jorge Nocedal 的 《Numerical Optimization》。下面写到的,算是我的学习笔记,应该不会涉及版权问题,算是我自己的总结,也可以与大家讨论分享。
数值优化基础
1. 数学基础
所谓优化问题,其实就是(在一定约束条件下)寻找目标方程最小/最大值过程中求解参数的问题,其通用模型如下:
- 为变量向量(vector of variables)也就是未知参数(unknowns or parameters)
- 是目标函数(objective functions),即要求解其最大/最小值
- 是约束函数(constraint functions),包含等式及不等式约束式(关于 的),用来规定可行域(feasible region)
其中 与 分别为等式/不等式约束域
可以通过一个例子来理解上述模型:
将其改写为上述模型定义,即:
2. 数值优化问题的分类
2.1 连续 vs 离散优化
其中离散优化中常用的主要有:
- 整型线性规划 (integer programming)
- 混合整型规划(MIP, Mixed Integer Programming)
这本书主要介绍连续优化问题
2.2 有约束 vs 无约束优化
- 无约束优化(unconstrained optimization):
- 有约束优化(constrained optimization): OR
另外引入
- 线性规划(linear programming):目标方程与约束函数均为关于变量的线性方程
- 非线性规划(non-linear programming):目标方程和约束函数中至少有一个不是关于变量的线性方程
2.3 全局 vs 局部优化
一般来说,非线性优化问题都在寻找局部最优解,而其全局最优解通常难以找到。而对于 凸规划 问题以及线性规划问题,局部最优解就是全局最优解(凸规划问题之后会写到)。
这本书至针对局部优化问题进行讨论。
2.4 随机 vs 确定性优化
- 随机优化(stochastic optimization):指带有随机因素的最优化问题,其通常解决方法有以下两种:
- 期望值方法
- 在置信区间范围内考虑优化
另外为解决模型中的随机因素,还可建立 机会约束优化(chance constrained optimization)模型,或者进行 鲁棒性优化(robust optimization)
在本书中仅考虑有确定参数模型的 确定性优化 (deterministic optimization)
2.5 凸规划
使用以及理解凸规划的意义主要体现在凸规划的两条基本性质上:
- 由于凸规划的可行域为凸集,故凸规划的局部最优解一定是全局最优解
- 当凸规划目标函数为严格凸函数时,若存在最优解,其一定为唯一最优解
这里有一些基本概念需要扫清:
凸集(convex set)
设 为 n 维欧式空间 中的一个集合, 若对 S 中任意两点, 连接它们的线段中任一点仍属于 , 那么就说 为一个凸集.
即,对于 中的任意两点 , , 对于任意的 , 都有
那么称 为一个凸集.。凸集一般用集合表示 为n维列向量, 为实数。
凸包:是指包含 最小的凸集
凸函数(convex function)
从二维层面看 “凹凸” 可能更符合逻辑经验,一维函数的 “凹凸” 可能与自然逻辑经验相反(最重要的还是从定义出发)
若 与 为凸集中任意两点,且 有
则这个函数为凸函数,当 换为 且 时,其为 严格凸函数。典型的凸函数有:单位球以及任何多面体等。
凹函数与严格凹函数的定义与上式正好相反
凸规划(convex programming)
其需要满足的条件如下:
- 目标函数为凸函数
- 等式约束函数为线性函数
- 不等式约束函数为凸函数
其中其可行域一定是凸集(是目标函数凸集与不等式约束函数凸集的交集)
3. 优化算法
文章中对优化算法的描述非常准确:
Optimization algorithms are iterative. They begin with an initial guess of the variable and generate a sequence of improved estimates (called “iterates”) until they terminate, hopefully at a solution.
检验其性能的重点:
- 鲁棒性(robustness)
- 效率(efficiency):time & storage
- 准确率(accuracy)
这些性能指标在多数情况下需要权衡,比如:收敛速度(convergence rate)和资源占用(storage requirement)、鲁棒性和速度等等。