一、什么是直接搜索算法
什么是直接搜索算法?这个是我们将面对的第一个问题,如果连直接搜索是什么都不知道,还谈什么应用与解决问题呢?
直接搜索算法是一种不需要任何关于目标函数梯度信息的最优化方法。与传统的最优化方法比较起来,传统的最优化方法往往需要目标函数的梯度或者高阶导数的信息来搜索一个最优点。直接搜索算法搜索当前点周围的一系列的点,然后找到一个目标函数的值低于当前点函数值的点。你可以使用直接搜索算法解决目标函数不可微甚至不连续的问题。
遗传算法与直接搜索工具箱中主要包含两种直接搜索算法:一种是通用模式搜索算法(generalized pattern search ,GPS)),另一个是网格自适应搜索算法( the mesh adaptive search (MADS) algorithm)。二者都属于计算最优点附近一系列点的模式搜索算法。在算法的每一步会搜索当前点附近的一系列点,这些点组成一个小的单元,称这个小的单元为网格(Mesh),网格是通过增加当前点到一系列矢量的某些倍数中而形成的。这一系列的矢量有一个专有名词叫“模式”。如果算法在网格中找到了一个点,这个点能改善目标函数的结果,那么这个点就会替换当前步的当前点而成为算法下一步的当前点。
MADS算法是GPS算法的一个变化版本。两个算法的不同点在于形成网格的计算方式不同。GPS使用的是固定方向的矢量,而MADS使用的是矢量随机选择方法来定义网格(Mesh)的。
二、执行一个模式搜索
2.1在命令行中调用模式搜索
首先,对于一个无约束的问题,在命令行中执行模式搜索调用patternsearch函数,使用的语法如下:
[x fval] = patternsearch(@objfun, x0)
@objfun是目标函数的句柄,x0是搜索的开始点。x是最后得到的自变量的值,fval是目标函数最后的解。
2.2使用最优化工具进行模式搜索
在命令行中输入optimtool(‘patternsearch’),或者在matlab的start菜单中选择Toolboxes中的Optimization工具的Optimization Tool。操作如图所示
经过这些操作会出现下面的界面
在界面中输入目标函数(Objective function)与开始点(Start point),在Constraints面板中输入目标函数的约束,这些约束的内容在上面的笔记三中已经介绍过了。如果这个目标函数没有约束,那么就保持该区域空白的状态。点击“start”按钮,
算法的运行结果在Run solver and view results面板中显示出来。在Options面板, 可以设置模式搜索的一些参数。
附注:本文为转载文章
原文出处:http://blog.csdn.net/niuyongjie/article/details/4866318
原作者:niuyongjie