主要内容

使用模拟退火算法最小化

此示例显示了如何使用模拟退火算法创建和最小化目标函数(simulanealbnd函数)在全局优化工具箱中。有关算法细节,请参阅模拟退火如何工作

简单的目标函数

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

min f(x)=(4-2.1*x1^2 + x1^4/3)*x1^2 + x1*x2 +(-4 + 4*x2^2)*x2^2;X

如L.C.W.中所述,此功能称为“ CAM”。Dixon和G.P.Szego [1]。

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

类型simple_objective
函数y = simple_objective(x)%simple_objective for patternsearch solver%版权所有2004 The MathWorks,Inc。x1 = x(1);x2 = x(2);y =(4-2.1。*x1。^2+x1。^4./3)。*x1。^2+x1。;

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

最小化使用simulanealbnd

使用simulanealbnd,将函数手柄传递到目标函数和起点X0作为第二个论点。对于可重复性,请设置随机数流。

ObjectiveFunction = @simple_objective;x0 = [0.5 0.5];% 初始点RNG默认%可再现性[X,FVAL,EXITFLAG,输出] = simulanealbnd(objectionFunction,x0)
优化终止:最佳功能值的更改小于options.functionTolerance。
x =1×2-0.0896 0.7130
FVAL = -1.0316
出口= 1
输出=带有字段的结构:迭代:2948 FUNCCOUNT:2971消息:“优化终止:最佳功能值的更改小于选项。FunctionTolerance。”rngstate:[1x1 struct] alsiontype:“无约束”温度:[2x1 double]总时间:2.8401

simulanealbnd返回四个输出参数:

  • X- 找到的最佳点

  • FVAL- 最佳点功能值

  • 出口- 整数对应于功能停止的原因

  • 输出- 有关优化步骤的信息

约束最小化

您可以使用simulanealbnd通过约束来解决问题。作为向量传递和上限。对于每个坐标一世,求解器确保lb(i)<= x(i)<= ub(i)。强加边界–64 <= x(i)<= 64

lb = [-64 -64];ub = [64 64];

用下限和上限参数运行求解器。

[X,FVAL,EXITFLAG,输出] = simulannealbnd(objectionFunction,x0,lb,ub);
优化终止:最佳功能值的更改小于options.functionTolerance。
fprintf('迭代次数是:%d \ n',output.Iterations);
迭代次数为:2428
fprintf('功能评估的数量为:%d \ n',output.funccount);
功能评估的数量为:2447
fprintf('找到的最佳功能值是:%g \ n',fval);
找到的最佳功能值是:-1.03163

求解器找到与以前相同的解决方案。

使用其他参数最小化

有时,您希望一个目标函数通过在优化过程中充当常数的额外参数进行参数化。例如,在先前的目标函数中,您可能需要用可以更改的参数替换常数4、2.1和4,以创建目标函数家族。有关更多信息,请参阅传递额外的参数

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

min f(x)=(a -b*x1^2 + x1^4/3)*x1^2 + x1*x2 +(-c + c*x2^2)*x2^2;X

一个,,,,b, 和C是在优化过程中起作用的目标函数的参数(它们不是最小化的一部分)。为了实现目标函数计算,MATLAB文件参数化_objective.m包含以下代码:

类型参数化_objective
函数y = parameterized_objective(x,p1,p2,p3)%parameterized_objective objective目标函数用于patternsearch solver%版权所有2004 The MathWorks,Inc。x1 = x(1);x2 = x(2);y =(p1-p2。*x1。^2+x1。^4./3)。*x1。^2+x1。;

同样,您需要将函数句柄传递给目标函数以及第二个参数的起点。

simulanealbnd只用一个参数调用目标函数X,但是目标函数有四个论点:X,,,,一个,,,,b, 和C。要指示哪个变量是参数,请使用匿名函数捕获附加参数的值(常数一个,,,,b, 和C)。创建函数句柄目标函数到一个匿名函数,该功能接受一个输入X,但是打电话参数化_objectiveX,,,,一个,,,,bC。创建函数句柄时目标函数,变量一个,,,,b, 和C具有存储在匿名函数中的值。

a = 4;b = 2.1;C = 4;%定义常数值ObjectiveFunction = @(x)参数化_objective(x,a,b,c);x0 = [0.5 0.5];[x,fval] = simulanealbnd(客观函数,x0)
优化终止:最佳功能值的更改小于options.functionTolerance。
x =1×20.0898 -0.7127
FVAL = -1.0316

求解器找到与以前相同的解决方案。

参考

[1] Dixon,L。C. W.和G.P。Szego(编辑)。迈向全球优化2。北荷兰:阿姆斯特丹Elsevier Science Ltd.,1978年。

也可以看看

相关话题