更新时间:2024-05-21 13:50
模式搜索法是一种,在计算时不需要目标函数的导数,所以在解决不可导的函数或者求导异常麻烦的函数的优化问题时非常有效。
模式搜索就是寻找一系列的点 X0,X1,X2,…,这些点都越来越靠近最优值点,当搜索进行到终止条件时则将最后一个点作为本次搜索的解。 利用模式搜索法解决一个有 N 个自变量的最优化问题。 ①要确定一个初始解 X0,这个值的选取对计算结果影响很大;②确定基向量用于指定搜索方向,如对于两个自变量的问题可设为 V(0,1;1,0;-1,0;0,-1)即按十字方向搜索;③确定搜索步长它将决定算法的收敛速度,以及全局搜索能力
具体步骤为:①计算出初始点的目标函数值 f(Xi),然后计算其相邻的其它各点的值 f(Xi+V(j)*L),j∈(1,2. . .2N);②如果有一点的函数值比 更优则表示搜索成功,那么 Xi+1=Xi+V(j)*L,且下次搜索时以 Xi+1 为中心,以 L=L*δ 为步长(δ>1,扩大搜索范围),若没有找到这样的点则表示搜索失败,仍以 Xi 为中心,以 L=L*λ 为步长(λ<1,缩小搜索范围);③重复②的操作,结果到终止条件为止,终止条件可以是迭代次数已到设定值或者误差小于规定值等。
运用Matlab 的工具箱里的 patternsearch,可实现模式搜索法。Patternsearch 函数的完整格式为[X FVAL]=PATTERNSEARCH(FUN X0 A b Aeq beq LB UB NONLCON options)