主要内容

最大化使用GlobalSearch和MultiStart单色偏振光干涉图样

这个例子展示了如何使用功能GlobalSearchMultiStart

介绍

这个例子展示了如何全局优化工具箱函数,特别是GlobalSearchMultiStart,可以帮助找到最大的电磁干扰模式。简单的建模、模式起源于单色偏振光从点源扩散。

由于来源我的电场测量的方向极化x和时间t点

$ $ E_i = \压裂{ai} {d_i (x)} \罪(\ phi_i + \ω(t - d1 (x) / c)), $ $

在哪里\ phi_i美元是源的相位在时间为零我美元,美元加元是光速,ω\美元光的频率,ai美元源的振幅吗我美元,d_i (x)美元源的距离吗我美元x美元

对于一个不动点x美元光的强度的平方的时间平均净电场。的净电场和电场由于来源。时间平均只取决于电场的大小和相对的阶段x美元。计算净电场,把个人贡献用相量法。相量,每个源贡献一个向量。向量是振幅的长度除以距离源,向量的角度,美元\ phi_i - \ωd_i (x) /加元的相点。

在这个例子中,我们定义了三个点光源相同的频率(ω\美元)和振幅(一个美元),但是不同的初始阶段(\ phi_i美元)。我们安排这些资源在一个固定的平面上。

%频率峰值的数量成正比relFreqConst = 2 *π* 2.5;amp = 2.2;阶段= - [0;0.54;2.07);numSources = 3;身高= 3;%所有点源是一致的(x_i, y_i, z)xcoords = (2.4112 0.2064 1.6787);ycoords = (0.3957 0.3927 0.9877);zcoords =身高*的(numSources, 1);起源= [xcoords ycoords zcoords];

可视化干涉图样

现在让我们想象一片平面上的干涉图样z = 0。

正如你所看到的从下面的情节,有许多高峰和低谷指示建设性和破坏性的干扰。

%通过额外的参数通过一个匿名函数:waveIntensity_x = @ (x) waveIntensity (x, amp,阶段,relFreqConst numSources,起源);%生成网格(X, Y) = meshgrid (4:0.035:4 4:0.035:4);%计算网格的强度Z = arrayfun (@ (x, y) waveIntensity_x ([x y]), x, y);%绘制表面和轮廓图冲浪(X, Y, Z,“EdgeColor”,“没有”)包含(“x”)ylabel (“y”)zlabel (“强度”)

摆姿势的优化问题

我们感兴趣的位置这波强度达到最高峰。

波的强度(我美元)脱落,我们远离源成正比1美元/ d1 (x)美元。因此,让我们限制的空间通过添加约束问题的可行的解决方案。金宝搏官方网站

如果我们限制曝光的来源与一个光圈,那么我们可以预期的最大躺在十字路口光阑在观察平面的投影。我们模型的影响一个孔径通过限制搜索在每个源为中心的圆形区域。

我们也限制了通过添加边界问题的解空间。虽然这些界限可以冗余(考虑到非线性约束),他们是有用的,因为它们限制的范围开始点(见生成GlobalSearch MultiStart工作如何的更多信息)。

现在我们的问题变成了:

$ $ \ max_ {x, y}我(x, y) $ $

$ $ (x -间{c1}) ^ 2 + (y - y_ {c1}) ^ 2 \ le r_1 ^ 2 $ $

$ $ (x -间{c2}) ^ 2 + (y - y_ {c2}) ^ 2 \ le r_2 ^ 2 $ $

$ $ (x -间{c3}) ^ 2 + (y - y_ {c3}) ^ 2 \ le r_3 ^ 2 $ $

$ $ -0.5 \ leq x \ leq 3.5 $ $

$ $ 2 \ leq y \ leq 3 $ $

在哪里y_(美元间{cn}, {cn})美元r_n美元坐标和孔径的半径吗$ n ^ {th} $分别点光源。每个源给出一个孔半径为3。给定的范围包括可行域。

我们的目标(我(x, y)美元)和非线性约束函数中定义单独的MATLAB®文件,waveIntensity.mapertureConstraint.m分别列出在这个例子。

可视化与约束

现在让我们想象的轮廓与非线性约束边界叠加干涉图样。可行域内部的三个圆圈的十字路口(黄、绿、蓝)。变量的范围由虚线框表示。

%想象我们干涉表面的轮廓域= 5.5 [3 4 5];图;ezcontour (@ (X, Y) arrayfun (@ (X, Y) waveIntensity_x ([X Y]), X, Y),域,150);持有%的阴谋约束g1 = @ (x, y) (x-xcoords (1))。^ 2 + (y-ycoords (1))。^ 2 - 9;g2 = @ (x, y) (x-xcoords (2))。^ 2 + (y-ycoords (2))。^ 2 - 9;g3 = @ (x, y) (x-xcoords (3))。^ 2 + (y-ycoords (3))。^ 2 - 9;h1 = ezplot (g1、领域);h1。颜色= (0.8 0.7 0.1);%的黄色h1。线宽= 1.5;h2 = ezplot (g2、领域);h2。颜色= (0.3 0.7 0.5);%绿色h2。线宽= 1.5;h3 = ezplot (g3、领域);h3。颜色= (0.4 0.4 0.6);%的蓝色h3。线宽= 1.5;%画界限磅= (-0.5 - 2);乌兰巴托= (3.5 - 3);线([磅(1)磅(1)]、[磅(2)乌兰巴托(2)),“线型”,“——”)([乌兰巴托(1)乌兰巴托(1)]、[磅(2)乌兰巴托(2)),“线型”,“——”)((磅(1)乌兰巴托(1)]、[磅(2)磅(2)),“线型”,“——”)((磅(1)乌兰巴托(1)]、[乌兰巴托(2)乌兰巴托(2)),“线型”,“——”)标题(模式与约束边界轮廓的)

设置和解决当地的问题解决者

考虑到非线性约束,我们需要一个约束非线性规划求解,即fmincon

让我们建立一个结构描述问题优化问题。我们想最大化强度函数,所以我们否定形式返回的值waveIntensity。让我们选择一个任意的起点,恰好是在可行域附近。

对于这个小问题,我们将使用fmincon的SQP算法。

%通过额外的参数通过一个匿名函数:apertureConstraint_x = @ (x) apertureConstraint (x, xcoords ycoords);%建立fmincon选项x0 = 1 [3];选择= optimoptions (“fmincon”,“算法”,“sqp”);问题= createOptimProblem (“fmincon”,“目标”,@ (x) -waveIntensity_x (x)“x0”x0,“磅”磅,乌兰巴托的乌兰巴托,“nonlcon”apertureConstraint_x,“选项”、选择);%叫fmincon[xlocal, fvallocal] = fmincon(问题)
局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。xlocal fvallocal 0.4945 = -0.5000 = -1.4438

现在,让我们看看我们如何通过展示的结果fmincon在我们的等高线图。请注意,fmincon没有进入全球最大,这也是注释的阴谋。请注意,我们只活跃的绑定解决方案的阴谋。

[~,maxIdx] = max (Z (:));xmax = [X (maxIdx), Y (maxIdx)]图轮廓(X, Y, Z)%显示范围线([磅(1)磅(1)]、[磅(2)乌兰巴托(2)),“线型”,“——”)%创建textarrow显示xlocal的位置注释(“textarrow”(0.25 - 0.21),(0.86 - 0.60),“TextEdgeColor”(0 0 0),“TextBackgroundColor”(1 1 1),“字形大小”11“字符串”,{“单一运行结果”});%创建textarrow显示xglobal的位置注释(“textarrow”(0.44 - 0.50),(0.63 - 0.58),“TextEdgeColor”(0 0 0),“TextBackgroundColor”(1 1 1),“字形大小”12“字符串”,{“全球最大”});轴([1 3.75 - 3 3])
xmax = 1.2500 - 0.4450

使用GlobalSearchMultiStart

给定一个任意的初始猜测,fmincon被困在一个附近的局部最大值。全局优化工具箱解决者,特别是GlobalSearchMultiStart,给我们一个更好的机会在全球最大,因为他们会发现fmincon从多个初始点生成的(或者我们自己的点,如果我们选择)。

我们的问题已经建立的问题结构,所以现在我们构建解决对象和运行它们。第一个输出运行的位置是最好的结果。

%建立GlobalSearch对象gs = GlobalSearch;%构造一个基于我们GlobalSearch MultiStart对象属性女士= MultiStart;rng (4“旋风”)%的再现性% GlobalSearch运行抽搐;[xg, ~, ~, ~, solsgs] =运行(gs、问题);toc xg%运行MultiStart 15随机生成的点抽搐;[xms, ~, ~, ~, solsms] = (ms,问题,15);toc xms
GlobalSearch停止,因为所有审判点分析。所有14当地解决运行聚合与当地一个积极的解决者退出旗。运行时间是0.229525秒。xg = 1.2592 - 0.4284 MultiStart完成了从开始点。当地所有15解决运行聚合与当地一个积极解决退出旗。运行时间是0.109984秒。xms = 1.2592 - 0.4284

检查结果

让我们检查的结果解决者都回来了。需要注意的一件重要的事情,是结果会根据随机开始点为每个解算器创建。另一个贯穿这个例子可以给不同的结果。最好的结果的坐标xgxms输出到命令行。我们将展示独特的返回的结果GlobalSearchMultiStart从每个解算器并强调最好的结果,在接近全球解决方案。

每个解算器是一个向量的第五输出包含不同的最小值(或最大值,在这种情况下)。我们将图的(x, y)对结果,solsgssolsms,而我们的等高线图我们使用。

% GlobalSearch结果使用“*”标记的阴谋xg = cell2mat ({solsgs (:)。x}”);散射(xg (: 1) xg (:, 2),‘*’,“MarkerEdgeColor”(0 0 1),“线宽”,1.25)%的阴谋MultiStart结果用一个圆圈标记xMS = cell2mat ({solsms (:)。x}”);散射(xMS (: 1), xMS (:, 2),“o”,“MarkerEdgeColor”(0 0 0),“线宽”传说,1.25)(“强度”,“约束”,“GlobalSearch”,“MultiStart”,“位置”,“最佳”)标题(“GlobalSearch和MultiStart结果”)

放松的界限

严格的界限问题,GlobalSearchMultiStart能够定位全球最大运行。

发现紧界限很难在实践中,当我们不太清楚目标函数或约束。一般来说,我们可以想一个合理的区域我们想限制开始点的集合。出于演示的目的,让我们放松边界定义一个面积较大的产生开始点和重试的解决者。

%放松边界蔓延出的开始点问题。磅= 5 * 1 (2,1);问题。乌兰巴托= 5 * 1 (2,1);% GlobalSearch运行抽搐;[xg, ~, ~, ~, solsgs] =运行(gs、问题);toc xg%运行MultiStart 15随机生成的点抽搐;[xms, ~, ~, ~, solsms] = (ms,问题,15);toc xms
GlobalSearch停止,因为所有审判点分析。所有4本地解决运行聚合与当地一个积极的解决者退出旗。运行时间是0.173760秒。xg = 0.6571 - -0.2096 MultiStart完成了从开始点。当地所有15解决运行聚合与当地一个积极解决退出旗。运行时间是0.134150秒。xms = 2.4947 - -0.1439
%显示轮廓图轮廓(X, Y, Z)%创建textarrow显示xglobal的位置注释(“textarrow”(0.44 - 0.50),(0.63 - 0.58),“TextEdgeColor”(0 0 0),“TextBackgroundColor”(1 1 1),“字形大小”12“字符串”,{“全球最大”});轴([1 3.75 - 3 3])% GlobalSearch结果使用“*”标记的阴谋xg = cell2mat ({solsgs (:)。x}”);散射(xg (: 1) xg (:, 2),‘*’,“MarkerEdgeColor”(0 0 1),“线宽”,1.25)%的阴谋MultiStart结果用一个圆圈标记xMS = cell2mat ({solsms (:)。x}”);散射(xMS (: 1), xMS (:, 2),“o”,“MarkerEdgeColor”(0 0 0),“线宽”,1.25)从每个%强调最好的结果:% GlobalSearch导致红,MultiStart导致蓝色情节(xg (1) xg (2),“某人”,“MarkerSize”12“MarkerFaceColor”(1 0 0))情节(xms (1), xms (2),“某人”,“MarkerSize”12“MarkerFaceColor”传说,[0 0 1])(“强度”,“GlobalSearch”,“MultiStart”,“最好的GS”,“最好的女士”,“位置”,“最佳”)标题(“GlobalSearch和MultiStart结果与放松的界限”)

最好的结果GlobalSearch显示的红场和最好的结果MultiStart显示的蓝色的正方形。

调优GlobalSearch参数

注意,在这种运行,考虑到更大的区域范围定义的,无论是解算器能够识别的最大强度。我们可以努力克服这几方面。首先,我们检查GlobalSearch

请注意,GlobalSearch只跑了fmincon几次。增加了全球最大的机会找到,我们想更点运行。限制起点设置为候选人最容易找到全球最大,我们将指导每个解算器忽略开始通过设置点不满足约束StartPointsToRun财产bounds-ineqs。此外,我们将设置MaxWaitCycleBasinRadiusFactor属性,这样GlobalSearch能够迅速识别狭窄的山峰。减少MaxWaitCycle原因GlobalSearch减少的吸引半径的盆地BasinRadiusFactor通常使用默认设置。

%增加总候选点,但过滤掉不可行的gs = GlobalSearch (gs,“StartPointsToRun”,“bounds-ineqs”,“MaxWaitCycle”3,“BasinRadiusFactor”,0.3);% GlobalSearch运行抽搐;xg =运行(gs、问题);toc xg
GlobalSearch停止,因为所有审判点分析。所有10个当地聚合与解算器运行积极解决退出旗。运行时间是0.242955秒。xg = 1.2592 - 0.4284

利用MultiStart的并行功能

蛮力的方法来提高我们发现全球最大的机会就是尝试更多的开始点。同样,这可能不是实际的在所有的情况下。在我们的例子中,我们只尝试了一组小到目前为止和运行时间并不是很长。所以它是合理的尝试更多的开始点。速度计算我们运行MultiStart同时如果并行计算工具箱™是可用的。

%设置UseParallel MultiStart的属性= MultiStart女士(女士,“UseParallel”,真正的);试一试demoOpenedPool = false;%创建并行池如果不存在%(需要并行计算工具箱)如果max(大小(gcp)) = = 0%如果没有游泳池parpool demoOpenedPool = true;结束我警告消息(“globaloptim: globaloptimdemos: opticalInterferenceDemo: noPCT”));结束%的解算器抽搐;xms =运行(女士,100年问题);toc xms如果demoOpenedPool%确定删除池如果成立于这个例子删除(gcp)%删除池结束
MultiStart完成了从开始点。所有100名当地解决运行聚合与当地一个积极解决出口标志。运行时间是0.956671秒。xms = 1.2592 - 0.4284

客观和非线性约束

这里我们列出了定义的函数优化问题:

函数p = waveIntensity (x, amp,阶段,relFreqConst numSources,起源)% opticalInterferenceDemo WaveIntensity强度函数。% 2009年版权MathWorks公司。d = distanceFromSource (x, numSources起源);ampVec =[总和(amp。- d / d。* cos(阶段* relFreqConst));总和(amp。- d / d。* sin(阶段* relFreqConst)));%强度| | AmpVec | | ^ 2p = ampVec ' * ampVec;
函数测查[c] = apertureConstraint (x, xcoords ycoords)% opticalInterferenceDemo apertureConstraint孔径约束函数。% 2009年版权MathWorks公司。测查= [];c = (x (1) - xcoords)。^ 2 + (x (2) - ycoords)。^ 2 - 9;
函数d = distanceFromSource (v, numSources起源)% opticalInterferenceDemo distanceFromSource距离函数。% 2009年版权MathWorks公司。d = 0 (numSources, 1);k = 1: numSources d (k) =规范(起源(k,:) - v [0]);结束

另请参阅

|

相关的话题