主要内容

用模拟退火算法最小化

此示例演示如何使用模拟退火算法创建和最小化目标函数(Simulannealbnd.函数)在全局优化工具箱中。有关算法的详细信息,请参见模拟退火的工作原理.

简单的客观函数

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

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

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

实现目标函数计算,MATLAB文件简单目标具有以下代码:

类型简单目标
函数y=简单目标(x)%PATTERNSEARCH解算器的简单目标函数%Copyright 2004 The 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\u objective;x0=[0.50.5];%起点RNG.违约重复性的%[x,fval,exitFlag,output]=simulannealbnd(ObjectiveFunction,x0)
优化终止:最佳函数值的更改小于options.FunctionTolerance。
x=1×2-0.0896 0.7130
fval=-1.0316
exitFlag=1
输出=带字段的结构:迭代:2948 Funccount:2971消息:'优化终止:最佳函数值的变化小于选项。'RNGSTATE:[1x1 struct]问题类型:'不受约束的'温度:[2x1双] POSTTIME:2.5105

Simulannealbnd.返回四个输出参数:

  • x-找到最佳点

  • 未来值-最佳点的函数值

  • 出口滞后- 对应于函数停止的原因对应的整数

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

有界约束极小化

您可以使用Simulannealbnd.解决束缚约束的问题。将下限和上限作为载体。对于每个坐标,解算器确保lb(i)<= x(i)<= UB(i).施加界限–64<=x(i)<=64.

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

使用较低和上限参数运行求解器。

[x,fval,exitflag,输出] = simulannealbnd(looptfunction,x0,lb,Ub);
优化终止:最佳函数值的更改小于options.FunctionTolerance。
fprintf('迭代的数量是:%d \ n',输出。
迭代次数为:2428
fprintf('函数求值的数量为:%d\n',output.funcount);
函数评估的数量是:2447
fprintf('找到的最佳函数值为:%g\n',fval);
找到的最佳功能值为:-1.03163

解算器找到与以前基本相同的解决方案。

最小化使用其他参数

有时,您希望通过在优化过程中充当常量的额外参数来参数化目标函数。例如,在上一个目标函数中,您可能希望将常数4、2.1和4替换为可以更改以创建目标函数族的参数。有关详细信息,请参阅通过额外的参数.

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

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

A.,B, 和C是目标函数的参数,在优化过程中充当常量(它们在最小化过程中不会发生变化)。为了实现目标函数的计算,MATLAB文件参数化_objective.m包含以下代码:

类型参数化_objective.
函数y =参数化_objective(x,p1,p2,p3)%参数化_代表性目标函数for patternsearch solver%2004 Mathworks,Inc.X1 = x(1);x2 = x(2);y =(p1-p2。* x1。^ 2 + x1。^ 4./3)。* x1。^ 2 + x1。* x2 +( -  p3 + p3。* x2。^ 2)。* x2。^ 2;

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

Simulannealbnd.只需一个论点呼叫目标函数x,但目标函数有四个论点:x,A.,B, 和C. 要指示哪个变量是参数,请使用匿名函数捕获附加参数(常量)的值A.,B, 和C). 创建函数句柄OperativeFunction.指向接受一个输入的匿名函数x但是呼叫参数化_objective.具有x,A.,BC.创建功能句柄时OperativeFunction.,变量A.,B, 和C具有存储在匿名函数中的值。

a = 4;b = 2.1;c = 4;%定义恒定值ObjectiveFunction = @(x)参数化_objective(x,a,b,c);x0 = [0.5 0.5];[x,fval] = simulannealbnd(OperateFunction,x0)
优化终止:最佳函数值的更改小于options.FunctionTolerance。
x=1×20.0898 -0.7127
fval=-1.0316

解算器找到与以前基本相同的解决方案。

参考

[1] 迪克森,L。CW.和G.P。Szego(编辑)。朝向全球优化2。North-Holland:Elsevier Science Ltd.,阿姆斯特丹,1978年。

另见

相关话题