建模优化问题的解决

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

0 引言

解决最优化问题已经有很多比较成熟的算法,如遗传算

法、神经网络、模拟退火法等,各有其优劣。模式搜索法作为一

种解决最优化问题的直接搜索方法,因为在计算时不需要目标

函数的导数,所以在解决不可导或者求导异常麻烦时比较有

效。随着模式搜索法的发展,人们在Hooke-Jeeves 模式搜索法

的基础上设计了变步长搜索策略,使得模式搜索方向更接近于

最优下降方向,并且同时采用了插值技术和非单调技术,不仅

改善了方法的局部寻优能力,而且改善了方法的收敛性。现在

已有很多软件将这一算法集成到程序中,如Matlab 已经将它

添加到工具箱中,使用时只要调用相应的函数就可以用模式搜

索法解决问题,大大提高了工作效率,降低了编程工作量。

1 模式搜索法的基本原理

模式搜索就是寻找一系列的点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,缩小搜索范围);③重复②的操作直

到终止条件为止,终止条件可以是迭代次数已到设定值或者误

差小于规定值等。

2 模式搜索法的改进

随着模式搜索法被逐渐认可与应用,人们对模式搜索法做

了许多改进。如在搜索方向上,用模式搜索法解决一个有N 个

自变量的问题时,共有Z*N 个基向量,这样如果对每个方向

都搜索就会大大的增加计算量,对此人们提出了正基向量的概

念,具体可参照,编写的《Positive bases in

numerical optimization》一文,正__________基向量的应用与有运动矢量场自适应快速搜索法(MVFAST),增强预测区域搜索(EPZS)、非

对称十字多层六边形搜索法(UMHexagonS)的提出在满足全局

搜索能力的情况下,大大降低了计算量。另外在步长控制方面,

出现了变步长模式搜索方法,推动了模式搜索法的发展。

3 Matlab模式搜索法工具箱应用及实例

Matlab 的工具箱里的patternsearch 就是基于模式搜索算

法的优化工具箱,有两种方法可以调用patternsearch 工具箱,

一种是GUI 即图形界面形式的,用户可以直接在窗口中操作,

另一种就是在程序中调用patternsearch 函数来进行模式搜索,

本文主要介绍后面一种。Patternsearch 函数的完整格式为[X,FVAL] =PATTERNSEARCH (FUN,X0,A,b,Aeq,beq,LB,UB,NONLCON,options)FVAL,X 分别为取得的最优值及所在的

点,FUN 为m 文件句柄该,该m 文件就是要进行最优化的函

数,options 为对搜索方式的设置。A,b,Aeq,beq,LB,UB 为对x 取值的限制条件,具体的为:

A*x≤B;

Aeq*x=Beq;

Lb≤x≤Ub

≤≤≤

≤≤≤

≤;

软件导刊

Software Guide

第8卷%第8期

2009年8 月

Aug. 2009

若没有限制则可以设为空即[],下面用patternsearch 工具箱计算带噪声的具有多个极小值的函数的最小值x21

函数具体表达式为:

f(x1,x2)=

x21

+x21

-25+m*rand;x21

+x22

≤25

x21

+(x2-9)2-16+m*rand;x21

+(x2-9)2≤16

m*rand;其它情

≤≤≤

≤≤≤

≤况

Rand 为(0 1)之间的随机数,m 为振幅,两者乘机代表噪

声大小(本算例取自matlab 软件包的help 文件,原算例没有带

噪声)。当m 取为1 时利用matlab 画出该函数的图形如图1,由

图可知当引入噪声后,图形变的很复杂,若利用一般的算法由

于无法求导则该问题变得很复杂,由于patternsearch 的工作原

理使得其在解决这类问题时有很大优势。解决步骤:

(1)编写m 函数,m 函数就是要计算的函数,具体如下:

function y = myfun(z,noise)

y=zeros(1,size(z,1));noise=1;

for i=1:size(z,1)

x=z(i,:);

if x(1)^2+x(2)^2<=25

y(i)=x(1)^2+x(2)^2-25+noise*randn;

elseif x(1)^2+(x(2)-9)^2<=16

y(i)=x(1)^2+(x(2)-9)^2-16+noise*randn;

else y(i)=0+noise*randn;

end end end

z 为矢量是目标函数的自变量,大小为自变量的个数,y 是

对应与自变量的目标函数的取值。

图1 m=1 时,函数(1)的图形

(2)确定初始点,这对运算速度也结果有很大影响,这里取

为X0=[-8,8];再就要确定搜索边界条件,一般要视具体问题

来确定,若选的过大则搜索速度变慢,过小则会影响全局搜索

能力。这里取为-10≤x1≤10;-10≤x2≤15

(3)编写主程序

X0 = [-8 8]; % Starting point.

LB = [-10 -10]; %Lower bound

UB = [10 15]; %Upper bound

range = [LB(1) UB(1); LB(2) UB(2)];

Objfcn = @myfun; % Handle to the objective function.

clf;showSmoothFcn (Objfcn,range); hold on; % Plot the

smooth objective function

title('objective function')

fig = gcf;

PSoptions = psoptimset ('Display','iter','OutputFcn',

@psOut);

[x,z] = patternsearch (Objfcn,X0,[],[],[],[],LB,UB,

PSoptions)

figure(fig);

hold on;

plot3 (x (1),x(2),z,'dr','MarkerSize',12,'MarkerFaceColor','

r');

hold off

搜索过程:

Iter f-count f(x) MeshSize Method

相关文档
最新文档