一 问题
选用合适的软件和算法求解优化问题,定义Ackley函数,Ackley函数是指数函数叠加上适度放大的余弦而得到的连续型实验函数,其特征是一个几乎平坦的区域由余弦波调制形成一个个孔或峰,从而使曲面起伏不平。Ackley指出,这个函数的搜索十分复杂,因为一个严格的局部最优化算法在爬山过程中不可避免地要落入局部最优的陷阱;而扫描较大领域就能越过干扰的山谷,逐步达到较好的最优点。 在区间内,求解。
二 用Maple 10求解
学会应用数学软件解决数学问题, 本试验软件平台为 Maple 10;
三 实现
1. 函数f(x)的图像绘制.
2. 绘图源程序
>f:=(x,y)->-20*exp((-1)*.2*sqrt(1/2*x^2+1/2*y^2))-exp(1/2*cos(2*Pi*x)+1/2*cos(2*Pi*y))+22.71282;
> plot3d(f(x,y),x=-5..5, y=-5..5);
3. 函数f(x)的最小值求解过程及程序
> f:=(x,y)->-20*exp((-1)*.2*sqrt(1/2*x^2+1/2*y^2))-exp(1/2*cos(2*Pi*x)+1/2*cos(2*Pi*y))+22.71282;
> minimize(f(x,y),x=-5..5,y=-5..5);
开心果开口机>
> minimize(f(x,y),x=-5..5,y=-5..5,location);
> f(0,0);
> evalf(%);
四 实验结果
在上面的求解过程中,用minimize得不到最优解,但从三维图像上可看出f(x)的最小值为法 f(0,0), 即 -0.0054618。
方法二:1stOpt 1.0, matlab 6.5.
一、实现
1.画图,使用matlab软件。
从图像可以看出,这个函数的搜索十分复杂,考虑用遗传算法求解应该是一个不错的选择。下面分别用软件1stOpt 和matlab来求解它。
1stOpt(First Optimization)是七维高科有限公司(7D-Soft High Technology Inc.)独立开发,拥有完全自主知识产权的一套数学优化分析综合工具软件包。在非线性回归,曲线拟合,非线性复杂工程模型参数估算求解等领域傲视雄,首屈一指,居世界领先地位。除 去简单易用的界面,其计算核心是基于七维高科有限公司科研人员十数年的革命性研究成果【通用全局优化算法】(Universal Global Optimization - UGO),该算法之最大特点是克服了当今世界上在优化计算领域中使用迭代法必须给出合适初始值的难题,即用户勿需给出参数初始值,而由1stOpt随机给出,通过其独特的全局优化算法,最终出最优解。以非线性回归为例,目前世界上在该领域最有名的软件工具包诸如OriginPro,Matlab,SAS,SPSS,DataFit,GraphPad,TableCurve2D,TableCurve3D等,均需用户提供适当的参数初始值以便计算能够收敛并到最优解。如果设定的参数初始值不当则计算难以收敛,其结果是无法求得正确结果。而在实际应用当中,对大多数用户来说,给出(猜出)恰当的初始值是件相当困难的事,特别是在参数量较多的情况下,更无异于是场噩梦。而1stOpt凭借其超强的寻优,容错能力,在大多数情况下(大于90%),从任一随机初始值开始,都能求得正确结果。
2.用遗传算法求解。
编码采用实数。
遗传算法的参数设置:
种大小:pop-size=10
最大代数:max-gen=1000
变异率:0.1
交叉率:0.4
四、试验结果
1.1stOpt 1.0
迭代数:36
计算用时:(时:分:秒:毫秒):00:00:00:40
计算中止原因:达到收敛判定标准
优化算法:遗传算法
函数表达式:-20*exp(-0.2*sqrt(1/n*sum(i=1:n)(x[i]^2)))-exp(1/n*sum(i=1:n)(cos(2*pi*(x[i]))))+22.71282;
目标函数值(最小):-0.00546182845904397
x1: 0
x2: 0
2. matlab 6.5
最优解为
p =
-0.0000 -0.0000 0.0055
遗传算法的寻优性能跟踪图
附:1stOpt程序(1stOpt 1.0试用版)
Title "Ackley 冰点渗透压function";
Constant n = 2;
Parameters x(1:n)[-5, 5];
Minimum = true;
Function -20*exp(-0.2*sqrt(1/n*sum(i=1:n)(x[i]^2)))-exp(1/n*sum(i=1:n)(cos(2*pi*(x[i]))))+22.71282;
另外需要说明的是运行matlab 程序的时候需要装GAOT(遗传算法工具箱)。
方法三:用matlab优化函数求解
fmincon函数
功能:求多变量有约束非线性函数的最小值。
数学模型:
其中,x, b, beq, lb,和ub为向量, A 和 Aeq 为矩阵, c(x) 和 ceq(x)为函数,返回标量。f(x), c(x), 和 ceq(x)可以是非线性函数。
语法:
x = fmincon(fun,x0,A,b)
x = fmincon(fun,x0,A,b,Aeq,beq)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2, ...)
[x,fval] = fmincon(...)
[x,fval,exitflag] = fmincon(...)
[x,fval,exitflag,output] = fmincon(...)
[x,fval,exitflag,output,lambda] = fmincon(...)
[x,fval,exitflag,output,lambda,grad] = fmincon(...)
电池盖帽[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(...)
描述工装管理系统:
fmincon 求多变量有约束非线性函数的最小值。该函数常用于有约束非线性优化问题。
x = fmincon(fun,x0,A,b) 给定初值x0,求解fun函数的最小值x。fun函数的约束条件为A*x <= b,x0可以是标量、向量或矩阵。
x = fmincon(fun,x0,A,b,Aeq,beq) 最小化fun函数,约束条件为Aeq*x = beq 和 A*x <= b。若没有不等式存在,则设置A=[]、b=[]。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub) 定义设计变量x的下界lb和上界ub,使得总是有lb <= x <= ub。若无等式存在,则令Aeq=[]、beq=[]。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) 在上面的基础上,在nonlcon参数中提供非线性不等式c(x)或等式ceq(x)。 fmincon函数要求c(x) <= 0且ceq(x) = 0。当无边界存在时,令lb=[]和(或)ub=[]。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) 用optiions参数指定的参数进行最小化。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2,...) 将问题参数P1, P2等直接传递给函数fun和nonlin。若不需要这些变量,则传递空矩阵到A, b, Aeq, beq, lb, ub, nonlcon和 options。
[x,fval] = fmincon(...) 返回解x处的目标函数值。
[x,fval,exitflag] = fmincon(...) 返回exitflag参数,描述函数计算的退出条件。
光控密码锁[x,fval,exitflag,output] = fmincon(...) 返回包含优化信息的输出参数output。
[x,fval,exitflag,output,lambda] = fmincon(...) 返回解x处包含拉格朗日乘子的lambda参数。
[x,fval,exitflag,output,lambda,grad] = fmincon(...) 返回解x处fun函数的梯度。
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(...) 返回解x处fun函数的Hessian矩阵。
对中型优化算法 fmincon函数使用序列二次规划法(SQP)。本法中,在每一步迭代中求解二次规划子问题,并用BFGS法更新拉格朗日Hessian矩阵。
%编写目标函数
function f=ackley(x)
f=-20*exp((-0.2)*sqrt(1/2*x(1)^2+1/2*x(2)^2))-exp(1/2*cos(2*pi*x(1))+1/2*cos(2*pi*x(2)))+22.71282;
%主程序
%边界约束
lb=[-5,-5];
ub=[5,5];
%初始点
x0=[2;3];
%精度控制
format long
%采用标准算法
options=optimset('largescale','off');
[x,fva]=fmincon('ackley',x0,[],[],[],[],lb,ub,[],options)
运算结果:
>> Optimization terminated successfully:
Search direction less than 2*options.TolX and