主要内容

使用并行计算工具箱最小化代价高昂的优化问题™

此示例显示如何使用优化工具箱™和全局优化工具箱中的函数加快最小化昂贵的优化问题。在示例的第一部分,我们通过以串行方式评估函数来解决优化问题,并且在示例的第二部分中,我们使用并行循环解决相同的问题(帕弗)我们比较了两种情况下优化函数所花费的时间。

代价优化问题

出于该示例的目的,我们在四个变量中解决了一个问题,其中目标和约束函数通过暂停构造昂贵。

作用f=昂贵的(x)%昂贵的目标函数,例如,在Optimpar中使用的昂贵目标函数。%版权所有2007-2013 The MathWorks,Inc。%通过暂停来模拟昂贵的函数暂停(0.1)%评价目标函数f=exp(x(1))*(4*x(3)^2+2*x(4)^2+4*x(1)*x(2)+2*x(2)+1);
作用[C,CEQ] = ulipal_confun(x)%昂贵的约束函数,例如,在OptimiPar中使用的昂贵约束函数。%版权所有2007-2013 The MathWorks,Inc。%通过暂停来模拟昂贵的函数暂停(0.1);%评估约束条件c=[1.5+x(1)*x(2)*x(3)-x(1)-x(2)-x(4);-x(1)*x(2)+x(4)-10];%无非线性等式约束:ceq=[];

最小化使用铁铬镍铁合金

我们感兴趣的是测量铁铬镍铁合金以串行方式,以便我们可以将其与并行时间进行比较。

startPoint=[-1-1];options=options(“fmincon”,“显示”,“国际热核实验堆”,“算法”,“内点”); startTime=tic;xsol=fmincon(@priced_objfun,startPoint,[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、@priced_confun,options);时间=toc(开始时间);fprintf('串行FMINCON优化需要%g秒。\n',time_fmincon_sequential);
Iter F计数F(x)的一阶范数1.1)1.7 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7.934e-01 7.372e-012.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-7.180116e+00 0.000e+00 1.069e-03 4.670e-02 14 79-7.180409e+00 0.000e+00 7.799e-04 2.815e-03 15 84-7.180410e+00 0.000e+00 6.189e-06 3.122e-04找到满足约束的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性公差范围内,且约束满足在约束公差值。串行FMINCON优化需要17.0722秒。

基于遗传算法的最小化问题

自从ga通常需要的函数求值比铁铬镍铁合金,我们从这个问题中移除了昂贵的约束,并执行无约束优化。传递空矩阵[]对于约束。此外,我们将最大代数限制为15代ga因此ga可以在合理的时间内终止。我们感兴趣的是测量ga这样我们就可以把它和平行线进行比较ga评估。注意运行ga需要全局优化工具箱。

rng违约%为了再现性尝试gaAvailable=false;nvar=4;gaoptions=options(“嘎”,“最大世代”,15,“显示”,“国际热核实验堆”); startTime=tic;gasol=ga(@priced_objfun,nvar,[]、[]、[]、[]、[]、[]、[]、[]、[]、gaoptions);时间=toc(开始时间);fprintf('串行GA优化取得%G秒。\ n',time_ga_sequential);gaAvailable=true;接住提醒我(留言)('optimdemos:optimparfor:gaNotFound'));终止
最佳平均失速生成函数计数f(x)f(x)1.116e+16 0 0 3 3 0 3 3 3 3 3 3 3 3 3 3 200-7.556e+17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 6 6 6 6 6 6 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 45-4.67e+43 0 12 650-2.589e+47-6.281e+45 0 13 700-2.589e+47-1.015 E+46 1 14 750-8.149e+47-5.855e+46 0 15 800-9.503e+47-1.29e+47 0优化终止:超过最大生成数。串行GA优化需要80.2351秒。

设置并行计算工具箱

优化工具箱中的函数用于近似导数的有限差分是使用帕弗如果并行计算工具箱可用,并且有一个并行的工作人员池,则具有此功能。类似地,ga,伽默多布吉模式搜索全局优化工具箱中的解算器并行计算函数帕弗功能,我们使用帕尔普函数来设置并行环境。发布此示例的计算机有四个内核,因此帕尔普启动四个Matlab®工人。如果在运行此示例时已经有一个并行池,则使用该池;查看文档帕尔普了解更多信息。

如果最大(尺寸(gcp))==0需要%并行池帕尔普%创建并行池终止

使用并行计算最小化铁铬镍铁合金

使用并行程序最小化代价高昂的优化问题铁铬镍铁合金功能,我们需要明确表示我们的目标和约束函数可以并行评估,我们想要铁铬镍铁合金尽可能使用其并行功能。目前,可以并行完成有限差异。我们感兴趣的是测量铁铬镍铁合金这样我们就可以将其与序列进行比较铁铬镍铁合金

选项=最佳选项(选项,“使用并行”,true);开始时间=tic;xsol=fmincon(@pricine_objfun,开始点,[]、[]、[]、[]、[]、[]、[]、[]、@pricine_confun,选项);时间=toc(开始时间);fprintf('并行FMINCON优化需要%g秒。\n',时间(平行);
Iter F计数F(x)的一阶范数1.1)1.7 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7.934e-01 7.372e-012.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-7.180116e+00 0.000e+00 1.069e-034.670e-02 14 79-7.180409e+00 0.000e+00 7.799e-04 2.815e-03 15 84-7.180410e+00 0.000e+00 6.189e-06 3.122e-04满足约束条件的局部最小值。优化已完成,因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。并行FMINCON优化需要8.11945秒。

基于并行遗传算法的最小化问题

使用ga函数,我们需要明确指出我们的目标函数可以并行计算,并且我们希望ga尽可能使用其并行功能。使用并行ga我们还要求将“矢量化”选项设置为默认值(即“关闭”)ga这样我们就可以将其与序列进行比较ga跑虽然此运行可能与串行的不同,因为ga使用随机数发生器,两次运行中昂贵的函数评估的数量是相同的。注意跑步ga需要全局优化工具箱。

rng违约%以获得与上一次运行相同的评估如果gaAvailable gaoptions=最优选项(gaoptions,“使用并行”,对);startTime=tic;gasol=ga(@priced_objfun,nvar,[]、[]、[]、[]、[]、[]、[]、[]、[]、gaoptions);平行时间=toc(开始时间);fprintf('并行GA优化需要%g秒。\n',time_ga_parelatel);终止
最佳平均失速生成函数计数f(x)f(x)1.116e+16 0 0 3 3 0 3 3 3 3 3 3 3 3 3 3 200-7.556e+17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 6 6 6 6 6 6 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 45-4.67e+43 0 12 650-2.589e+47-6.281e+45 0 13 700-2.589e+47-1.015 E+46 1 14 750-8.149e+47-5.855e+46 0 15 800-9.503e+47-1.29e+47 0优化终止:超出最大生成数。并行GA优化需要15.6984秒。

比较串行和并行时间

x = [time_fmincon_sequential time_fmincon_parallel];y = [time_ga_sequential time_ga_parallel];t = [0 1];绘图(t,x,“r——”,t,y,“k-”)ylabel(“以秒为单位的时间”)传奇(“fmincon”,“嘎”)ax=gca;ax.XTick=[01];ax.XTickLabel={“连载”“平行”};轴([0110单元(最大([XY])]))标题(“串行与并行时间”)

通过并行功能评估通过帕弗提高了两者的效率铁铬镍铁合金ga.改进通常更好地用于昂贵的目标和约束函数。

相关话题