文档介绍:无约束优化算法:单纯形法
单纯形法
1. 算法原理
单纯形法的基本思想是:
设x,x,...,x(0)(1)(n)是Rn中的n+1个点,构成一个当前的单纯形,xmax,xmin定义如下:
f(xmax)=max{f(x(0)),f(x(1)),...,f(x(n))}
f(xmin)=min{f(x(0)),f(x(1)),...,f(x(n))} 记为这个单纯形除去xmax外的所有顶点的形心,
1?n(i)?= ∑x-xmax? n?i=0?
取xmax关于的反射点x(n+1),x(n+1)=+(-xmax)构成新的单纯形,反复上述过程,直到达到停止条件。
2. 函数fminsearch
1) 函数语法
x=fminsearch(fun,x0)
x=fminsearch(fun,x0,options)
[x,fval]=fminsearch(...)
[x,fval,exitflag]=fminsearch(...)
[x,fval,exitflag,output]=fminsearch(...)
函数输入:
fun:目标函数
x0:迭代初始点
options:函数参数设置
函数输出:
x:最优点
fval:最优点对应的函数值
exitflag:函数停止信息
1:函数收敛正常停止
0:迭代次数,目标函数计算次数达到最大数
-1:算法被输出函数停止
output:函数运算信息
2) 函数使用
(1)
functionf=BanaFun(x)(不含导数解析式)
f=100*(x(2)-x(1)^2)^2+(1-x(1))^2
Nelder-MeadSimplex函数不需要导数信息。
(2) 算法参数设置:
options=optimset('LargeScale','off','gradobj','off','MaxFunEvals',250,'display','iter')
(3) 函数调用运算:
options=optimset('LargeScale','off','gradobj','on','MaxFunEvals',250,'display','iter')x=[-,2]
[x,fval,exitflag,output]=fminsearch(***@BanaFun,x,options)
3) 计算结果
Iteration Func-count min f(x) Procedure
0 1
1 3 initial simplex
2 5 expand
3 7 expand
4 8 reflect
5 10 contract inside
6 12 c