Hooke-Jeeves 模式搜索法函数极小值求解程序
项目介绍
本项目是一个基于 MATLAB 语言开发的多元函数无约束最优化工具。它实现了经典的 Hooke-Jeeves 算法,即模式搜索法。该算法的核心优势在于其“直接搜索”特性,即在整个优化过程中不需要目标函数的导数或梯度信息,仅依赖函数值的比较来确定搜索方向。这使得该程序不仅能处理平滑的凸函数,在面对不可微、不连续或含有随机噪声的目标函数时,同样表现出极强的鲁棒性和可靠性。
功能特性
- 零阶搜索逻辑:纯粹基于函数评估,无需计算复杂的 Jacobian 或 Hessian 矩阵。
- 两阶段搜索机制:紧密结合局部探测(探索移动)与全局趋势外推(模式移动),平衡了搜索的精细度与收敛速度。
- 自适应步长控制:当搜索陷入瓶颈时,程序会自动按比例缩减步长,以实现更高精度的收敛。
- 可视化轨迹追踪:针对二维优化问题,程序能够自动生成函数等高线图,并动态绘制搜索路径、初始点及最终最优解。
- 健壮的终止准则:结合了步长精度要求与最大迭代次数限制,确保程序在各种工况下都能正常退出。
系统要求
- MATLAB R2016a 或更高版本(以确保支持匿名函数和高级绘图函数)。
- 无需任何额外的工具箱(如 Optimization Toolbox),纯原生代码实现。
实现逻辑与程序流程
程序通过三个主要的逻辑模块相互配合完成优化过程:
1. 主控流程模块
程序首先初始化优化环境,默认使用经典的 Rosenbrock 函数作为测试案例。用户可以自定义初始点、初始探测步长、缩减比例和收敛精度。随后,程序调用核心算法模块获取结果,最后进行文字摘要输出和图形化展示。
2. 核心求解算法
求解器采用一个循环结构来实现 Hooke-Jeeves 的交替移动逻辑:
- 探索移动:在当前基点周围,按维度依次进行正向和负向的扰动,寻找能够降低函数值的临时点。
- 模式移动:如果探索移动成功,算法认为发现了一个有利的下降趋势。此时,程序会沿当前点与前一个基点的连线方向进行“跨越式”步进,预判下一个可能的目标点,并在该点再次进行探测。
- 反馈与回退:如果模式移动带来的结果优于前一个基点,则接受该移动;否则,回退到当前的探索点并减小步长。
3. 结果可视化模块
该模块专门负责将优化轨迹直观化。它通过在搜索区域内生成网格并计算函数值来绘制详尽的等高线图。搜索路径以带节点的线段表示,清晰展示了算法从起点逐步逼近全局最小值的全过程。
关键函数与实现细节分析
目标函数定义
程序通过匿名函数句柄定义目标。默认代码中实现了 Rosenbrock 函数($f(x) = 100(x_2 - x_1^2)^2 + (1 - x_1)^2$),这是一个著名的具有狭窄曲折谷底的非线性函数,非常适合测试直接搜索算法的优劣。
探索移动函数 (Exploratory Move)
这是算法的灵敏触角。它遍历所有空间维度,尝试将变量增加或减少一个当前步长。该函数具有逻辑优先级,即首先尝试正向移动,若不成功再尝试负向移动。只要在某一维度发现更优值,便立即更新临时解。
模式移动实现 (Pattern Move)
这是算法的“加速器”。其数学表达为 $P = 2x_{next} - x_{base}$。这一步逻辑模拟了动量效应,旨在利用之前探索中发现的成功方向,跳过繁琐的逐维度探测,直接在大尺度上推进解的位置。
步长缩减与收敛控制
程序设置了严格的控制逻辑。只有当在当前步长下,所有的探索移动都无法找到更优解时,程序才会进行步长缩减(乘以 alpha 系数)。这种机制保证了算法在远离极值点时搜索速度快,在靠近极值点时搜索精度高。当步长减小到设定的阈值 epsilon 以下时,判定为搜索成功。
轨迹记录
在迭代过程中,程序会实时捕获每一个被接受的新坐标点并存入矩阵中。这不仅为后续的绘图提供了数据支持,也方便用户分析算法在不同阶段的收敛表现。