基于Wolfe准则的无约束优化线性搜索算法实现
项目介绍
本项目实现了一种用于求解无约束优化问题的强Wolfe(Strong Wolfe)线性搜索算法。线性搜索是最优化理论中确定迭代步长的核心子程序,广泛应用于BFGS、共轭梯度法等二阶或类二阶优化算法中。该实现通过严格满足Armijo足够下降条件和曲率条件,确保算法在迭代过程中既能获得足够的函数值下降,又能保证搜索方向的有效性,从而避免因步长过大或过小导致的算法不收敛问题。
功能特性
- 强Wolfe准则支持:不仅满足基本的Armijo准则,还通过曲率条件对步长进行下界约束,算法默认寻找满足强Wolfe条件的步长。
- 经典的二阶段搜索架构:
- 初探阶段(Bracketing Phase):通过跳跃式增长(倍数外推)快速定位包含极小值的区间。
- 缩减阶段(Zoom Phase):在确定的区间内利用数值插值思想(当前实现为二分中点法)精细定位满足准则的步长。
- 鲁棒性保障:内置搜索方向检查机制。若输入的搜索方向不是下降方向,算法会自动修正为负梯度方向,确保搜索的有效性。
- 测试与验证:预置经典的Rosenbrock(香蕉函数)作为测试目标,该函数具有非线性的狭长山谷,能够有效检验线性搜索算法在处理复杂地形时的表现。
- 结果可视化:算法执行后会自动生成函数值随步长变化的曲线图,直观展示Wolfe准则选定点在目标函数轨迹上的位置。
使用方法
- 环境配置:确保系统安装有MATLAB环境。
- 参数初始化:在程序开头设置初始点坐标、搜索方向、以及Wolfe准则的关键参数 c1(下降常数)和 c2(曲率常数)。
- 执行计算:运行程序,算法将自动完成梯度计算、步长搜索、点位更新。
- 结果查看:控制台将输出状态信息、迭代次数、最终步长、坐标变化及函数下降量,并同步弹出可视化分析窗口。
系统要求
- 软件环境:MATLAB R2016a 或更高版本。
- 硬件要求:标准工程计算配置,无特殊显卡或内存限制。
实现逻辑说明分析
#### 参数设置与目标定义
算法以 Rosenbrock 函数作为基准,其初始点设定为 [-1.2, 1.0]。Wolfe准则的控制参数 c1 设置为 1e-4,c2 设置为 0.9(这是针对大规模优化问题如拟牛顿法的标准建议值)。
#### 搜索方向校验
在进入主循环前,算法通过计算初始点梯度与搜索方向的点积(g' * p)来判断其是否满足下降性质。若点积大于或等于0,则说明搜索方向无法实现函数值下降,此时程序会自动将搜索方向重置为负梯度方向。
#### 线性搜索主程序(Wolfe Line Search)
该阶段的核心是不断扩大步长 alpha,通过循环寻找一个包含满足Wolfe准则点的区间,逻辑如下:
- 计算当前步长下的函数值。
- 如果当前函数值不再满足 Armijo 准则(足够下降条件),或者当前函数值比上一次迭代的值还要大,则说明已越过极小值区域,立即进入 Zoom 阶段寻找区间内的最优值。
- 如果满足下降条件,则进一步检查曲率条件。若梯度的绝对值满足强Wolfe要求,则直接返回该步长。
- 若梯度为正值,说明区间内存在极小值,进入 Zoom 阶段进行区间收缩。
- 若上述条件均不满足,则将步长乘以 2.0 进行外推扩大,继续搜索。
#### 缩减程序(Zoom)
Zoom 阶段负责在给定区间内进行精细化搜索,其逻辑包括:
- 采用中点插值逻辑生成新的探测点。
- 重新验证 Armijo 准则。如果不满足,则缩小区间上界。
- 如果满足下降条件但曲率条件仍未达标,则根据导数符号调整区间的下界或上界,确保极小值始终被包含在更新后的区间内。
- 设置了最大内部迭代次数以防止在极端非线性情况下陷入死循环。
#### 结果展示与可视化
算法最终返回最优化步长 alpha_star,并更新当前坐标。可视化模块通过采样搜索方向上的离散点,绘制出 phi(alpha) 函数曲线,并用红色圆点标示出算法最终选定的位置,用户可以通过虚线参考线直观观察选定点是否处于函数下降的合理区间。