Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

并行计算工具箱™ を使用した、時間のかかる最適化問題の最小化

この例では、Optimization Toolbox™ と Global Optimization Toolbox の関数を使用して、時間のかかる最適化問題の最小化を高速で行う方法を説明します。例の前半では、関数を連続的に評価することで最適化問題を解きます。例の後半では、並列 for ループ (parfor)机能をてを并列で评価により,问题をを解きますます。。最最最适化关数の处理处理处理にににかかるかかるかかる

時間のかかる最適化問題

この例では、4 つの変数をもつ問題を解きます。一時停止することで、意図的に目的関数と制約関数の処理に時間がかかるようにします。

functionf =昂贵的_objfun(x)%EXPENSIVE_OBJFUN An expensive objective function used in optimparfor example.%版权2007-2013 The Mathworks,Inc。% Simulate an expensive function by pausing暂停(0.1)% Evaluate objective functionf = exp(x(1)) * (4*x(3)^2 + 2*x(4)^2 + 4*x(1)*x(2) + 2*x(2) + 1);
function[c,ceq] = expensive_confun(x)%EXPENSIVE_CONFUN An expensive constraint function used in optimparfor example.%版权2007-2013 The Mathworks,Inc。% Simulate an expensive function by pausing暂停(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 = [];

Fminconを使用た最小化

逐次処理でFminconにかかる时间し并列実行の时间できるようにし。。

startPoint = [-1 1 1 -1]; options = optimoptions('fmincon',,,,'Display',,,,'iTer',,,,'Algorithm',,,,'interior-point');starttime = tic;XSOL = FMINCON(@quince_objfun,startpoint,[],[],[],[],[],[],[],@quonce_confun,options);time_fmincon_sequential = toc(starttime);fprintf('Serial FMINCON optimization takes %g seconds.\n',,,,time_fmincon_sequential);
ITER F计数F(X)可行性最佳步骤0 5 1.839397E+00 1.500E+00 3.211E+00 1 11 -9.760099E-01 3.708E+00 7.902E-01 2.362E+00 2 2.76009E-01 2.362E+00 2 216 -1.480976E+00 0.000E+00 8.344E -01 1.069E+00 3 21 -2.601599E+00 0.000E+00 8.390E -01.218E+00 4 29 -2.823630E+00 1.118E+00 5 34 -3.905339E+00 0.000E+00 1.210E+00 7.302E -01 6 39 -6.212992E+00 3.934E -01 7.372E -01 7.372E -01 2.405E+00 7 44 -5.9488762E+00 7 44 -5.948762E+0000 0.000E+00 1.784E+00 1.905E+00 8 49 -6.940062E+00 1.233E-02 7.668E-01 7.553E-01 9 54 -6.97387E+00 0.000E+00 0.000E+00 0.000E+00 2.549E-01 3.99E-01 3.9920E-3.901 3.901 3.920E-3 3.920E-3 3.920E-3 3.920E-3 3.920E--01 3.920E-3 3.920E-3 3.920E-3 3.920E-3 3.920E-3 3.920E-3 3.920E-3 3.920E-3.92010E-301 10 59 -7.142993e+00 0.000e+00 1.903e-01 4.735e-01 11 64 -7.155325e+00 0.000e+00 1.365e-01 2.626e-01 12 69 -7.179122e+00 0.000e+006.336e-02 9.115e-02 13 74 -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)ではFminconよりもの评価评価行われるため时间のかかるをこの问题问题からから取り除き取り除き取り除き,,代わりにになしなしの最适最适最适化化を実行実行[]を渡します。また、妥当な時間内にgaが終了できるように、ga15にに制限します。。。。。gaの处理かかるを测定て,并列ののgaの评価比较できるにします。gaの実行には、Global Optimization Toolbox が必要なことに注意してください。

rng默认%可再现性trygaavailable = false;nvar = 4;gaoptions = optimoptions('ga',,,,“最大化”,15,'Display',,,,'iTer');starttime = tic;gasol = ga(@expensive_objfun,nvar,[],[],[],[],[],[],[],gaoptions); time_ga_sequential = toc(startTime); fprintf('Serial GA optimization takes %g seconds.\n',,,,time_ga_sequential); gaAvailable = true;catchME warning(message('optimdemos:optimparfor:gaNotFound'));end
最佳平均摊位生成func -count f(x)F(x)代1 100 -5.546E+05 1.483E+15 0 2 150 -5.581E+17 -1.116E+16 0 3 200 -7.556E+17 6.679E+22 0 4 250 -7.556E+17 -7.195E+16 1 5 300 -9.381E+27 -1.876E+26 0 6 350 -9.673E+27 -7.497E+26 0 7 400 -4.44444400 -4.511E+36-9.403E+34 0 8 450 -5.111E+36 -3.011E+35 0 9 500 -7.671E+36 9.346E+37 0 10 550 -1.52E+43 -3.113E+41 01 01 0 11 600 -2.273E+45 -2.273E-4.67E+43 0 12 650 -2.589E+47 -6.281E+45 0 13 700 -2.589E+47 -1.015E+46 1 14 750 -8.149E+47 -5.855E+47 -1.29E+47 0优化终止:超过世代的最大数量。Serial GA optimization takes 80.2351 seconds.

并行计算工具箱の設定

并行计算工具箱を使用でき、かつワーカーの並列プールが存在する場合、Optimization Toolbox の関数によって導関数を近似する有限差分化は、parfor机能をして的的行われれ。同様に,,,,,,,,,,,,,,,,,,,,gagamultiobjおよびpatternsearchの各は关数をに评価し。。parfor机能をするために关数关数Parpoolを使用して並列環境を設定します。この例のパブリッシュ先となるコンピューターには 4 つのコアがあるため、Parpoolは 4 つの MATLAB® ワーカーを起動します。この例を実行する際に並列プールが既に存在する場合は、そのプールを使用します。詳細は、Parpoolのドキュメンテーションを参照してください。

ifmax(size(gcp)) == 0% parallel pool neededParpool% create the parallel poolend

並列なFminconを使用た最小化

关数Fminconを並列で使用して時間のかかる最適化問題を最小化するには、目的関数と制約関数が並列で評価されうること、そしてFminconにその並列な機能性を可能な限り使用させることを明示的に指定する必要があります。現在,有限差分を並列で実行できます。Fminconの処理にかかる時間を測定して、Fminconの逐次的実行と比較できるようにします。

选项= optimoptions(选项,“ useparalallel',,,,true); startTime = tic; xsol = fmincon(@expensive_objfun,startPoint,[],[],[],[],[],[],@expensive_confun,options); time_fmincon_parallel = toc(startTime); fprintf('平行fmincon优化需要%g秒。\ n',time_fmincon_parallel);
ITER F计数F(X)可行性最佳步骤0 5 1.839397E+00 1.500E+00 3.211E+00 1 11 -9.760099E-01 3.708E+00 7.902E-01 2.362E+00 2 2.76009E-01 2.362E+00 2 216 -1.480976E+00 0.000E+00 8.344E -01 1.069E+00 3 21 -2.601599E+00 0.000E+00 8.390E -01.218E+00 4 29 -2.823630E+00 1.118E+00 5 34 -3.905339E+00 0.000E+00 1.210E+00 7.302E -01 6 39 -6.212992E+00 3.934E -01 7.372E -01 7.372E -01 2.405E+00 7 44 -5.9488762E+00 7 44 -5.948762E+0000 0.000E+00 1.784E+00 1.905E+00 8 49 -6.940062E+00 1.233E-02 7.668E-01 7.553E-01 9 54 -6.97387E+00 0.000E+00 0.000E+00 0.000E+00 2.549E-01 3.99E-01 3.9920E-3.901 3.901 3.920E-3 3.920E-3 3.920E-3 3.920E-3 3.920E--01 3.920E-3 3.920E-3 3.920E-3 3.920E-3 3.920E-3 3.920E-3 3.920E-3 3.920E-3.92010E-301 10 59 -7.142993e+00 0.000e+00 1.903e-01 4.735e-01 11 64 -7.155325e+00 0.000e+00 1.365e-01 2.626e-01 12 69 -7.179122e+00 0.000e+006.336e-02 9.115e-02 13 74 -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局部最小值发现满足约束。之所以完成优化,是因为目标函数在可行的方向,最优性公差值之内不折叠,并且在约束公差的值之内满足了约束。Parallel FMINCON optimization takes 8.11945 seconds.

并列な的を使用た最小化

关数gaを并列し时间の最适问题最小するにには,目的关数关数が并列并列で评価さされれgaにその性を可能限りさせること明示的にに指定するする必要ががあり并列gaを使用するには、[ベクトル化] オプションを既定値 (つまり [off]) に設定することも必要です。ここでも、gaの処理にかかる時間を測定して、gaの逐次的実行と比較できるようにします。gaでは乱数発生器が使用されるため、この実行は逐次的実行とは異なることがありますが、時間のかかる関数評価の回数は両方の実行で同じです。gaの実行には、Global Optimization Toolbox が必要なことに注意してください。

rng默认%获得与上一步相同的评估ifgaavailable gaoptions = optimoptions(GAOPTIONS,“ useparalallel',,,,true); startTime = tic; gasol = ga(@expensive_objfun,nvar,[],[],[],[],[],[],[],gaoptions); time_ga_parallel = toc(startTime); fprintf('Parallel GA optimization takes %g seconds.\n',,,,time_ga_parallel);end
最佳平均摊位生成func -count f(x)F(x)代1 100 -5.546E+05 1.483E+15 0 2 150 -5.581E+17 -1.116E+16 0 3 200 -7.556E+17 6.679E+22 0 4 250 -7.556E+17 -7.195E+16 1 5 300 -9.381E+27 -1.876E+26 0 6 350 -9.673E+27 -7.497E+26 0 7 400 -4.44444400 -4.511E+36-9.403E+34 0 8 450 -5.111E+36 -3.011E+35 0 9 500 -7.671E+36 9.346E+37 0 10 550 -1.52E+43 -3.113E+41 01 01 0 11 600 -2.273E+45 -2.273E-4.67E+43 0 12 650 -2.589E+47 -6.281E+45 0 13 700 -2.589E+47 -1.015E+46 1 14 750 -8.149E+47 -5.855E+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]; plot(t,X,'r--',,,,t,Y,'k-')ylabel('Time in seconds') 传奇('fmincon',,,,'ga')ax = gca;ax.xtick = [0 1];ax.xticklabel = {“系列”'Parallel'}; axis([0 1 0 ceil(max([X Y]))]) title('Serial Vs. Parallel Times'

parforによって关数を并列することで,Fmincongaの效率向上しまし。。向上多く多くの场合,时间のかかるかかる目的关数とと制约关数关数关数によりにより

関連するトピック