这个例子展示了如何使用模拟退火算法(simulannealbnd
函数)在全局优化工具箱中。有关算法细节,请参阅模拟退火的工作原理。
目标函数最小化是两个变量的简单函数:
最小f (x) = (4 - 2.1 * x1 x1 ^ ^ 2 + 4/3) * x1 ^ 2 + x1 * x2 + (4 + 4 * x2 ^ 2) * x2 ^ 2;x
这个函数被称为“cam”,正如L.C.W. Dixon和G.P. Szego[1]中描述的那样。
实现了目标函数的计算,MATLAB文件simple_objective.m
有以下代码:
类型simple_objective
函数y = simple_objective(x) % simple_objective(x) %模式搜索求解程序的目标函数%版权所有2004 MathWorks, Inc. x1 = x(1);x2 = x (2);y = (4 - 2.1 * x1。^ 2 + x1。^ 4. / 3)。* x1。^ 2 + x1。* x2 + (4 + 4 * x2。^ 2)。* x2。^ 2;
所有全局优化工具箱求解器都假设目标有一个输入x
,在那里x
有一样多的元素的问题的变量数。目标函数计算目标函数的标量值,并返回它在其单一输出参数y
。
simulannealbnd
要使用最小化目标函数simulannealbnd
,将函数句柄传递给目标函数和起点x0
作为第二个论点。为了再现性,设置随机数流。
ObjectiveFunction = @simple_objective;x0 = [0.5 0.5];%的起点RNG默认的%用于重现[x, fval exitFlag、输出]= simulannealbnd (x0 ObjectiveFunction)
终止优化:最佳功能值的变化小于选择。功能公差。
x =1×2-0.0896 - 0.7130
fval = -1.0316
exitFlag = 1
输出=结构体字段:迭代:2948 funccount: 2971消息:‘终止优化:改变最优函数值小于option . functiontolerance。[rngstate: [1x1 struct] problemtype: ' unrestricted '温度:[2x1 double]总时间:2.9647
simulannealbnd
返回四个输出参数:
x
-找到最佳点
fval
-函数值在最佳点
exitFlag
- 对应的功能停止的原因整数
输出
-关于优化步骤的信息
您可以使用simulannealbnd
解决与结合的约束问题。通过上限和下限作为载体。对于每个坐标我
,求解者保证磅(ⅰ)<= X(I)<= UB(I)
。征收范围x(i) <= 64
。
lb = [-64 -64];ub = [64 64];
运行与下限和上限参数的解算器。
[x, fval exitFlag、输出]= simulannealbnd (x0, ObjectiveFunction磅,乌兰巴托);
终止优化:最佳功能值的变化小于选择。功能公差。
流(“迭代次数为:%d \ n”,output.iterations);
迭代次数为:2428次
流(“功能评估的数量为:%d\n”,output.funccount);
功能评价的数量:2447
流('发现的最佳函数值为:%g\n',FVAL);
得到的最佳函数值为:-1.03163
解算器找到的解基本上和之前的一样。
有时,您希望通过在优化过程中充当常量的额外参数来对目标函数进行参数化。例如,在前面的目标函数中,您可能希望用参数替换常数4、2.1和4,您可以更改这些参数来创建一系列目标函数。有关更多信息,请参见传递额外的参数(优化工具箱)。
重写目标函数取三个附加参数在一个新的最小化问题。
最小f (x) = (a - b * x1 x1 ^ ^ 2 + 4/3) * x1 ^ 2 + x1 * x2 + (- c + c * x2 ^ 2) * x2 ^ 2;x
一个
,b
和c
是目标函数的参数,在优化过程中充当常量(在最小化过程中不改变它们)。实现了目标函数的计算,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
,一个
,b
和c
。要指示哪个变量是参数,请使用匿名函数来捕获附加参数(常量)的值一个
,b
和c
)。创建函数句柄ObjectiveFunction
到一个接受一个输入的匿名函数x
,但电话parameterized_objective
与x
,一个
,b
和c
。当您创建函数句柄ObjectiveFunction
,变量一个
,b
和c
具有存储在匿名函数中的值。
一个= 4;B = 2.1;C = 4;%定义的恒定值ObjectiveFunction = @(X)parameterized_objective(X,A,B,C);x0 = [0.5 0.5];[X,FVAL] = simulannealbnd(ObjectiveFunction,X0)
终止优化:最佳功能值的变化小于选择。功能公差。
x =1×20.0898 -0.7127
fval = -1.0316
解算器找到的解基本上和之前的一样。
Dixon, L. C. W.,和G . p .。Szego (eds)。往全球性优化2。北荷兰:Elsevier科学有限公司,阿姆斯特丹,1978年。