最小化使用模拟退火算法

此示例示出了如何使用模拟退火算法来创建和最小化的目标函数(simulannealbnd功能)在全局优化工具箱。对于算法的详细信息,请参阅如何模拟退火作品

简单的目标函数

目标函数最小化是两个变量的简单函数:

分F(X)=(4  -  2.1 * X1 ^ 2 + X1 ^ 4/3)* X1 ^ 2 + X 1 * X 2 +(-4 + 4 * X 2 ^ 2)* X2 ^ 2;X

此功能被称为“凸轮”,如在L.C.W.描述Dixon和G.P.Szego [1]。

为了实现该目标函数计算,MATLAB文件simple_objective.m具有下面的代码:

类型simple_objective
函数y = simple_objective(X)%SIMPLE_OBJECTIVE为PATTERNSEARCH求解%版权所有2004 The MathWorks公司目标函数,Inc.的X1 = X(1);X2 = X(2);。Y =(。4-2.1 * X1 ^ 2 + X1 ^ 4/3)* X1 ^ 2 + X 1 * X 2 +( -  4 + 4 * X 2 ^ 2)* X2 ^ 2。;

所有全局优化工具箱求解器假定目标有一个输入X,其中X有一样多的元素的问题的变量数。目标函数计算目标函数的标量值,并返回它在其单一输出参数ÿ

尽量减少使用simulannealbnd

要使用最小化目标函数simulannealbnd,通过在功能句柄到目标函数和一个起点X0作为第二个参数。对于重复性,设定随机数流。

ObjectiveFunction = @simple_objective;X0 = [0.5 0.5]。% 初始点RNG默认%用于重现[X,FVAL,exitFlag,输出] = simulannealbnd(ObjectiveFunction,X0)
优化终止:在最好的函数值的变化小于options.FunctionTolerance。
X =1×2-0.0896 0.7130
FVAL = -1.0316
exitFlag = 1
输出=同场的结构:迭代:2948 funccount:2971的消息:“优化终止:在最好的函数值变化小于options.FunctionTolerance”。rngstate:[1x1的结构] problemtype: '无约束' 温度:[2×1双] TOTALTIME:2.9647

simulannealbnd返回四个输出参数:

  • X- 最佳点中找到

  • FVAL- 在最佳点函数值

  • exitFlag- 对应的功能停止的原因整数

  • 产量- 关于优化步骤信息

界约束

您可以使用simulannealbnd解决与结合的约束问题。通过上限和下限作为载体。对于每个坐标一世,解算器可以确保磅(ⅰ)<= X(I)<= UB(I)。征收范围-64 <= X(I)<= 64

磅= [-64 -64];UB = [64 64];

运行与下限和上限参数的解算器。

[X,FVAL,exitFlag,输出] = simulannealbnd(ObjectiveFunction,X0,LB,UB);
优化终止:在最好的函数值的变化小于options.FunctionTolerance。
fprintf中(“迭代次数为:%d \ n”,output.iterations);
迭代次数是:2428
fprintf中(“功能的评价的人数为:%d \ n”,output.funccount);
功能评价的数量:2447
fprintf中(“最好函数值发现:%克\ N”,FVAL);
最好的函数值发现:-1.03163

求解器本质上找到相同的解决方案之前。

尽量减少使用其他参数

有时候你想要的目标函数由作为优化过程中的常量额外的参数进行参数设置。例如,在前面的目标函数,你可能想用参数来代替常量4,2.1和4,你可以改变,以建立一个家庭的目标函数。欲了解更多信息,请参阅传递额外的参数(优化工具箱)。

重写目标函数取三个附加参数在一个新的最小化问题。

分F(X)=(A  -  B * X1 ^ 2 + X1 ^ 4/3)* X1 ^ 2 + X 1 * X 2 +(-c + C * X2 ^ 2)* X2 ^ 2;X

一个bC为参数的目标函数的是,优化(它们不改变作为最小化的部分)期间充当常数。为了实现该目标函数计算,MATLAB文件parameterized_objective.m包含以下代码:

类型parameterized_objective
为PATTERNSEARCH求解%版权所有2004 The MathWorks公司函数y = parameterized_objective(X,P1,P2,P3)%PARAMETERIZED_OBJECTIVE目标函数,Inc.的X1 = X(1);X2 = X(2);。Y =(。P1-P2 * X1 ^ 2 + X1 ^ 4/3)* X1 ^ 2 + X 1 * X 2 +。。( - 。P3 + P3 * X2 ^ 2)* X2 ^ 2;

同样,你需要在一个函数句柄传递到目标函数,以及一个起点作为第二个参数。

simulannealbnd只用一个参数调用目标函数X,但目标函数有四个参数:X一个bC。指示哪个变量是参数,使用匿名功能捕获的附加参数的常数的值(一个bC)。创建一个功能手柄ObjectiveFunction到一个匿名函数,它有一个输入X,但电话parameterized_objectiveX一个bC。当您创建函数句柄ObjectiveFunction,变量一个bC有存储在匿名函数值。

一个= 4;B = 2.1;C = 4;%定义的恒定值ObjectiveFunction = @(X)parameterized_objective(X,A,B,C);X0 = [0.5 0.5]。[X,FVAL] = simulannealbnd(ObjectiveFunction,X0)
优化终止:在最好的函数值的变化小于options.FunctionTolerance。
X =1×20.0898 -0.7127
FVAL = -1.0316

求解器本质上找到相同的解决方案之前。

参考

[1]迪克森,L. C.W。,和G .P。Szego(编辑)。往全球性优化2。北荷兰:Elsevier科学有限公司,阿姆斯特丹,1978年。

也可以看看

相关话题