用半无限规划分析不确定性的影响
这个例子展示了如何使用半无限规划来研究一个优化问题的模型参数的不确定性的影响。我们将用这个函数来表述和解决一个优化问题fseminf,优化工具箱™中的半无限编程求解器。
这个例子所说明的问题涉及到空气污染的控制。具体来说,就是在一个特定的地理区域建造一组烟囱。随着烟囱高度的增加,来自烟囱的污染物在地面的浓度降低。然而,每个烟囱的建造成本随着高度的增加而增加。在地面污染浓度不超过法定限制的情况下,我们将解决烟囱累积高度最小化的问题,从而降低建筑成本。这个问题在下列参考资料中概述:
用半无限规划控制空气污染,A.I.F. Vaz和E.C. Ferreira,第二十八届国家统计调查大会,2004年10月
在本例中,我们将首先解决上面文章中发布的问题<年代pan class="emphasis">最小堆叠高度问题。这个问题中的模型依赖于几个参数,其中两个是风速和风向。在问题的第一个解中,假设所有模型参数都是准确已知的。
然后,我们通过允许风速和风向参数在给定范围内变化来扩展原来的问题。这将允许我们分析这些参数的不确定性对该问题的最优解的影响。
最小堆叠高度问题
考虑一个20km × 20km的区域,R,其中放置十个烟囱。这些烟囱向大气中释放几种污染物,其中一种是二氧化硫。栈的x、y位置是固定的,但栈的高度可以变化。
堆栈的构造者希望最小化堆栈的总高度,从而最小化施工成本。然而,这与另一个相互矛盾的要求相平衡,即R地区地面上任何一点的二氧化硫浓度不得超过法定最大值。
首先,让我们画出烟囱的初始高度。注意,我们放大了包含烟囱的4km × 4km的R子区域。
H0 = [210;210;180;180;150;150;120;120;90;plotChimneyStacks (h0<年代pan style="color:#A020F0">“烟囱初始高度”);
在这个问题中有两个与环境相关的参数,风速和风向。在本例的后面,我们将允许这些参数变化,但对于第一个问题,我们将把这些参数设置为典型值。
%以弧度表示的风向Theta0 = 3.996;<年代pan style="color:#228B22">%风速,单位为米/秒U0 = 5.64;
现在让我们绘制整个区域R的地面二氧化硫(SO2)浓度(记住烟囱的图是在一个更小的区域上)。二氧化硫浓度是在烟囱设置为初始高度的情况下计算出来的。
我们可以看到二氧化硫的浓度在所关注的区域内是不同的。二氧化硫图有两个值得注意的特征:
SO2浓度在(x,y)平面左上角上升
该地区大部分地区的二氧化硫浓度几乎为零
简单地说,第一个特征是由于盛行风,在这个例子中,它将SO2吹向(x,y)平面的左上角。第二个因素是由于二氧化硫通过扩散输送到地面。与盛行风相比,这是一个较慢的过程,因此二氧化硫只到达感兴趣区域左上角的地面。
关于烟囱烟囱的大气分散的更详细的讨论,请参考介绍中引用的参考文献。
粉红色的平面表示SO2的浓度<年代pan class="inlineequation">
.这是r地区二氧化硫浓度不能超过的法定最大值。从图中可以清楚地看出,二氧化硫浓度超过了初始烟囱高度的最大值。
检查MATLAB文件concSulfurDioxide看看二氧化硫浓度是如何计算出来的。
图二氧化硫(h0, theta0, U0,<年代pan style="color:#0000FF">...“初始堆栈高度处的二氧化硫浓度”);
如何fseminf作品
在我们解决最小堆栈高度问题之前,我们将概述如何解决fseminf解决了一个半无穷问题。一般的半无限规划问题可以表述为:
这样
(线性不等式约束)
(线性等式约束)
(非线性不等式约束)
(非线性等式约束)
(范围)
而且
,在那里<年代pan class="inlineequation">
为<年代pan class="inlineequation">
(非线性半无限约束)
这个算法允许你为非线性优化问题指定约束条件,这些约束条件必须在辅助变量的区间内满足,<年代pan class="inlineequation">
.注意对于fseminf,对于每个半无限约束,该变量被限制为1维或2维。
这个函数fseminf通过从初值开始解决一般的半无限问题,<年代pan class="inlineequation">
,并利用迭代过程获得最优解,<年代pan class="inlineequation">
.
该算法的关键部分是处理“半无限”约束,<年代pan class="inlineequation">
.在<年代pan class="inlineequation">
它被要求<年代pan class="inlineequation">
的每一个值都必须是可行的<年代pan class="inlineequation">
在这段时间内<年代pan class="inlineequation">
.的所有局部极大值可以简化该约束<年代pan class="inlineequation">
关于<年代pan class="inlineequation">
在这段时间内<年代pan class="inlineequation">
.原始的约束等价于要求的值<年代pan class="inlineequation">
在上述每一个局部极大值处都是可行的。
fseminf计算每个半无限约束的所有局部最大值的近似值,<年代pan class="inlineequation">
.要做到这一点,fseminf首先计算网格上的每个半无限约束<年代pan class="inlineequation">
值。然后用一个简单的差分格式计算所有的局部最大值<年代pan class="inlineequation">
从求值的半无限约束。
正如我们稍后将看到的,您可以在约束函数中创建这个网格。你应该使用的间距<年代pan class="inlineequation">
网格的坐标由fseminf.
在算法的每次迭代中,执行以下步骤:
评估<年代pan class="inlineequation">
在一个网状的<年代pan class="inlineequation">
-使用每个网格的当前间距值<年代pan class="inlineequation">
协调。
的所有局部最大值的近似值<年代pan class="inlineequation">
使用评估<年代pan class="inlineequation">
从第一步开始。
替换每个<年代pan class="inlineequation">
在一般半无限问题中,在步骤1-2中发现的局部最大值集。这个问题现在有有限数量的非线性约束。fseminf使用的SQP算法fmincon对修正后的问题进行迭代。
检查在新的点上是否满足任何SQP算法的停止条件<年代pan class="inlineequation">
.如果满足任何条件,算法终止;如果不是这样,fseminf继续执行步骤5。例如,如果第3步中定义的问题的一阶最优性值小于指定的公差,那么fseminf将终止。
更新在第1步中计算半无限约束时使用的网格间距。
非线性约束函数的编写
在我们打电话之前fseminf为了解决这个问题,我们需要编写一个函数来计算这个问题中的非线性约束。实施的约束是地面二氧化硫浓度不能超过<年代pan class="inlineequation">
在区域R的每一点上。
这是一个半无限约束,本节将解释约束函数的实现。对于最小堆栈高度问题,我们在MATLAB文件中实现了约束airPollutionCon.
类型<年代pan style="color:#A020F0">airPollutionCon.m
function [c, ceq, K, s] = airPollutionCon(h, s, theta, U) % airPollutionCon空气污染演示约束函数% % [c, ceq, K, s] = airPollutionCon(h, s, theta, U)计算空气污染优化工具箱(TM)演示的约束%。这个%函数首先使用提供的网格%间距s创建一个(X, Y)点的网格,然后在网格的每个点%上计算以下约束:% %二氧化硫浓度在指定的风向,THETA和%风速U <= 1.25e-4 g/m^3 % %参见AIRPOLLUTION % Copyright 2008 the MathWorks, Inc. %初始采样间隔if nargin < 2 || isnan(s(1,1)) s = [1000 4000];定义网格,“无限”约束将在w1x = -20000:s(1,1):20000;W1y = -20000:s(1,2):20000;[t1,t2] = meshgrid(w1x,w1y);%最大允许二氧化硫maxsul = 1.25e-4;%计算网格K = conc二氧化硫(t1, t2, h, θ, U) - maxsul;% Rescale约束使其为0(1)K = 1e4*K;%无有限约束c = [];Ceq = [];
这个函数说明了半无限规划问题的约束函数的一般结构。特别地,一个约束函数fseminf可分为三部分:
1.定义约束评估的初始网格大小
回想一下,fseminf评估网格上的“半无限”约束作为这些约束的整体计算的一部分。当约束函数被调用时fseminf,你应该使用的网格间距提供给你的函数。Fseminf将初始调用网格间距的约束函数,年代,设置为“NaN”。这允许您初始化约束计算的网格大小。在这里,我们在两个“无限”变量中有一个“无限”约束。这意味着我们需要初始化网格大小为1 × 2矩阵,在本例中,S = [1000 4000].
2.定义将用于约束评估的网格
需要创建一个用于约束评估的网格。注释“定义计算“无限”约束的网格”后面的三行代码airPollutionCon可以修改为大多数二维半无限规划问题。
3.计算网格上的约束条件
一旦定义了网格,就可以在其上计算约束。然后返回这些约束fseminf从上面的约束函数。
请注意,在这个问题中,我们还调整了约束条件,使其在更接近于目标函数的范围内变化。这可以帮助fseminf避免与目标和约束相关的规模问题,这些目标和约束在不同的规模上有所不同。
解决优化问题
我们现在可以叫fseminf解决问题。烟囱必须至少有10米高,我们使用前面指定的初始烟囱高度。注意,第三个输入参数为fseminf(1)表示只有一个半无限约束。
Lb = 10*ones(size(h0));[hopt, sumh, exitflag] = fseminf(@(h)sum(h), h0, 1,<年代pan style="color:#0000FF">...@ (h, s) airPollutionCon (h, s, theta0情况 ), [], [], [], [], 磅);
可能的局部最小值。约束满足。Fseminf停止的原因是预测的目标函数的变化小于函数公差的值,约束条件满足在约束公差的值之内。
流(<年代pan style="color:#A020F0">'\n烟囱最小累积计算高度:%7.2f m\n', sumh);
烟囱垛的最小计算累积高度:3667.19米
最小累积高度由fseminf比烟囱的初始总高度高很多。在后面的示例中,我们将看到当参数不确定性添加到问题中时,最小累积高度是如何变化的。现在,让我们画出烟囱的最佳高度。
检查MATLAB文件plotChimneyStacks看看情节是怎么形成的。
plotChimneyStacks (hsopt<年代pan style="color:#A020F0">“烟囱最佳高度”);
检查优化结果
回想一下,fseminf通过确保约束的离散极大值低于指定的界,确定半无限约束在任何地方都得到满足。我们可以通过绘制最优堆栈高度的地面二氧化硫浓度来验证半无限约束在任何地方都是满足的。
请注意,二氧化硫浓度在(x, y)平面左上角取其可能的最大值,即在x = -20000m, y = 20000m处。这个点由下图中的蓝点标出,并通过计算该点的二氧化硫浓度来验证。
检查MATLAB文件plotSulfurDioxide看看这些图是如何生成的。
titleStr =<年代pan style="color:#A020F0">“最佳二氧化硫浓度及其最大值(蓝色)”;xMaxSD = [-20000 20000];plot二氧化硫(hopt, theta0, U0, titleStr, xMaxSD);
SO2Max = conc二氧化硫(-20000,20000,hopt, theta0, U0);流(<年代pan style="color:#A020F0">'二氧化硫浓度在x = -20000m, y = 20000m: % g/m^3\n', SO2Max);
x = -20000m, y = 20000m处的二氧化硫浓度:1.250000 -04 g/m^3
考虑环境因素的不确定性
二氧化硫浓度取决于几个环境因素,在上述问题中,这些因素被保持在固定值。其中两个环境因素是风速和风向。有关所有问题参数的更详细讨论,请参阅介绍中引用的参考资料。
我们可以研究风速和风向对系统行为的影响。在本节示例中,我们希望确保即使风向从3.82 rad变化到4.18 rad,平均风速在5到6.2 m/s之间变化,也能满足二氧化硫限值。
我们需要实现一个半无限约束,以确保二氧化硫浓度不超过r区域的限制,这个约束要求对所有风速和风向对都是可行的。
这样的约束将有4个“无限”变量(风速和风向以及地面的x-y坐标)。然而,任何半无限约束提供给fseminf不能有超过两个“无限”变量。
以合适的形式实现此约束fseminf,我们回顾了上一题中最优堆叠高度处的SO2浓度。特别地,SO2浓度在x = -20000m, y = 20000m处取其可能的最大值。为了减少“无限”变量的数量,我们假定在存在不确定性时,SO2浓度也将取其最大值。然后我们要求SO2浓度在这一点以下<年代pan class="inlineequation">
对所有的风速和风向。
这意味着这个问题的“无限”变量是风速和风向。要了解这个约束是如何实现的,请查看MATLAB文件uncertainAirPollutionCon.
类型<年代pan style="color:#A020F0">uncertainAirPollutionCon.m
函数[c, ceq, K, s] = undeterminairpollution con (h, s) % undeterminairpollution con空气污染演示约束函数% % [c, ceq, K, s] = undeterminairpollution con (h, s)计算fseminf优化工具箱(TM)演示的%约束。这个%函数首先使用%提供的网格间距s创建一个风速/风向点的网格,然后计算以下约束%在网格的每个点上:% %二氧化硫浓度在x = -20000m, y = 20000m <= 1.25e- 4% g/m^ 3% %参见AIRPOLLUTION con, AIRPOLLUTION % Copyright 2008 the MathWorks, Inc. %最大允许二氧化硫maxsul = 1.25e-4;%初始采样间隔if nargin < 2 || isnan(s(1,1)) s = [0.02 0.04];定义“无限”约束将在w1x = 3.82:s(1,1):4.18;%风向w1y = 5.0:s(1,2):6.2;%风速[t1,t2] = meshgrid(w1x,w1y);我们假设所有风速/风向对的SO2浓度最大值为[x, y] =[- 200,20000] %。我们在这一点上计算SO2约束在% [theta, U]网格上的值。K = conc二氧化硫(-20000,20000,h, t1, t2) - maxsul;% Rescale约束使其为0(1)K = 1e4*K; % No finite constraints c = []; ceq = [];
这个约束函数可以分为和前面一样的三个部分:
1.定义约束评估的初始网格大小
注释“初始采样间隔”后面的代码初始化网格大小。
2.定义将用于约束评估的网格
代码的下一部分使用与最初问题中使用的类似的结构创建网格(现在是风速和方向)。
3.计算网格上的约束条件
代码的其余部分计算风速/风向网格每一点的二氧化硫浓度。然后返回这些约束fseminf从上面的约束函数。
我们现在可以叫fseminf解决考虑环境因素不确定性的堆高问题。
[hsopt2, sumh2, exitflag2] = fseminf(@(h)sum(h), h0, 1,<年代pan style="color:#0000FF">...@ unsure airpollution con, [], [], [], [], lb);
可能的局部最小值。约束满足。Fseminf停止的原因是预测的目标函数的变化小于函数公差的值,约束条件满足在约束公差的值之内。
流(<年代pan style="color:#A020F0">'不确定度最小计算烟囱累积高度:%7.2f m\n', sumh2);
不确定烟囱最小累积计算高度:3812.13 m
现在我们可以看看有参数不确定性和没有参数不确定性的问题的最小计算累积堆栈高度之间的差异。您应该能够看到,当不确定性添加到问题中时,最小累积高度增加了。这一预期高度的增加使二氧化硫浓度保持在规定范围内所有风速/风向对的法定最大值以下。
我们可以通过对二氧化硫小区的检查来检查二氧化硫浓度是否超过感兴趣区域的限制。对于给定的(x, y)点,我们绘制了风速和风向在规定范围内的最大SO2浓度。注意,我们放大了X-Y平面的左上角。
titleStr =<年代pan style="color:#A020F0">“不确定条件下的最佳二氧化硫浓度”;thetaRange = 3.82:0.02:4.18;URange = 5:0.2:6.2;XRange = [-20000,-15000];YRange = [15000,20000];(hsopt2, thetaRange, URange, XRange, YRange, titleStr);
最后,当问题定义中存在不确定性时,绘制出烟囱的最佳高度。
plotChimneyStacks (hsopt2<年代pan style="color:#A020F0">“不确定条件下烟囱的最佳高度”);
半无限规划算法有很多可用的选项,fseminf.详细信息请参阅优化工具箱™用户指南,在“使用优化工具箱求解器”一章中,参阅约束非线性优化:fseminf问题的公式和算法。
相关的话题
这个例子展示了如何使用半无限规划来研究一个优化问题的模型参数的不确定性的影响。我们将用这个函数来表述和解决一个优化问题 这个例子所说明的问题涉及到空气污染的控制。具体来说,就是在一个特定的地理区域建造一组烟囱。随着烟囱高度的增加,来自烟囱的污染物在地面的浓度降低。然而,每个烟囱的建造成本随着高度的增加而增加。在地面污染浓度不超过法定限制的情况下,我们将解决烟囱累积高度最小化的问题,从而降低建筑成本。这个问题在下列参考资料中概述: 用半无限规划控制空气污染,A.I.F. Vaz和E.C. Ferreira,第二十八届国家统计调查大会,2004年10月 在本例中,我们将首先解决上面文章中发布的问题<年代pan class="emphasis">最小堆叠高度 然后,我们通过允许风速和风向参数在给定范围内变化来扩展原来的问题。这将允许我们分析这些参数的不确定性对该问题的最优解的影响。 考虑一个20km × 20km的区域,R,其中放置十个烟囱。这些烟囱向大气中释放几种污染物,其中一种是二氧化硫。栈的x、y位置是固定的,但栈的高度可以变化。 堆栈的构造者希望最小化堆栈的总高度,从而最小化施工成本。然而,这与另一个相互矛盾的要求相平衡,即R地区地面上任何一点的二氧化硫浓度不得超过法定最大值。 首先,让我们画出烟囱的初始高度。注意,我们放大了包含烟囱的4km × 4km的R子区域。 在这个问题中有两个与环境相关的参数,风速和风向。在本例的后面,我们将允许这些参数变化,但对于第一个问题,我们将把这些参数设置为典型值。 现在让我们绘制整个区域R的地面二氧化硫(SO2)浓度(记住烟囱的图是在一个更小的区域上)。二氧化硫浓度是在烟囱设置为初始高度的情况下计算出来的。 我们可以看到二氧化硫的浓度在所关注的区域内是不同的。二氧化硫图有两个值得注意的特征: SO2浓度在(x,y)平面左上角上升 该地区大部分地区的二氧化硫浓度几乎为零 简单地说,第一个特征是由于盛行风,在这个例子中,它将SO2吹向(x,y)平面的左上角。第二个因素是由于二氧化硫通过扩散输送到地面。与盛行风相比,这是一个较慢的过程,因此二氧化硫只到达感兴趣区域左上角的地面。 关于烟囱烟囱的大气分散的更详细的讨论,请参考介绍中引用的参考文献。 粉红色的平面表示SO2的浓度<年代pan class="inlineequation">
.这是r地区二氧化硫浓度不能超过的法定最大值。从图中可以清楚地看出,二氧化硫浓度超过了初始烟囱高度的最大值。 检查MATLAB文件 在我们解决最小堆栈高度问题之前,我们将概述如何解决
这样
(线性不等式约束)
(线性等式约束)
(非线性不等式约束)
(非线性等式约束)
(范围) 而且
,在那里<年代pan class="inlineequation">
为<年代pan class="inlineequation">
(非线性半无限约束) 这个算法允许你为非线性优化问题指定约束条件,这些约束条件必须在辅助变量的区间内满足,<年代pan class="inlineequation">
.注意对于 这个函数 该算法的关键部分是处理“半无限”约束,<年代pan class="inlineequation">
.在<年代pan class="inlineequation">
它被要求<年代pan class="inlineequation">
的每一个值都必须是可行的<年代pan class="inlineequation">
在这段时间内<年代pan class="inlineequation">
.的所有局部极大值可以简化该约束<年代pan class="inlineequation">
关于<年代pan class="inlineequation">
在这段时间内<年代pan class="inlineequation">
.原始的约束等价于要求的值<年代pan class="inlineequation">
在上述每一个局部极大值处都是可行的。 正如我们稍后将看到的,您可以在约束函数中创建这个网格。你应该使用的间距<年代pan class="inlineequation">
网格的坐标由 在算法的每次迭代中,执行以下步骤: 评估<年代pan class="inlineequation">
在一个网状的<年代pan class="inlineequation">
-使用每个网格的当前间距值<年代pan class="inlineequation">
协调。 的所有局部最大值的近似值<年代pan class="inlineequation">
使用评估<年代pan class="inlineequation">
从第一步开始。 替换每个<年代pan class="inlineequation">
在一般半无限问题中,在步骤1-2中发现的局部最大值集。这个问题现在有有限数量的非线性约束。 检查在新的点上是否满足任何SQP算法的停止条件<年代pan class="inlineequation">
.如果满足任何条件,算法终止;如果不是这样, 更新在第1步中计算半无限约束时使用的网格间距。 在我们打电话之前 这是一个半无限约束,本节将解释约束函数的实现。对于最小堆栈高度问题,我们在MATLAB文件中实现了约束 这个函数说明了半无限规划问题的约束函数的一般结构。特别地,一个约束函数 1.定义约束评估的初始网格大小 回想一下, 2.定义将用于约束评估的网格 需要创建一个用于约束评估的网格。注释“定义计算“无限”约束的网格”后面的三行代码 3.计算网格上的约束条件 一旦定义了网格,就可以在其上计算约束。然后返回这些约束 请注意,在这个问题中,我们还调整了约束条件,使其在更接近于目标函数的范围内变化。这可以帮助 我们现在可以叫 最小累积高度由 检查MATLAB文件 回想一下, 请注意,二氧化硫浓度在(x, y)平面左上角取其可能的最大值,即在x = -20000m, y = 20000m处。这个点由下图中的蓝点标出,并通过计算该点的二氧化硫浓度来验证。 检查MATLAB文件 二氧化硫浓度取决于几个环境因素,在上述问题中,这些因素被保持在固定值。其中两个环境因素是风速和风向。有关所有问题参数的更详细讨论,请参阅介绍中引用的参考资料。 我们可以研究风速和风向对系统行为的影响。在本节示例中,我们希望确保即使风向从3.82 rad变化到4.18 rad,平均风速在5到6.2 m/s之间变化,也能满足二氧化硫限值。 我们需要实现一个半无限约束,以确保二氧化硫浓度不超过r区域的限制,这个约束要求对所有风速和风向对都是可行的。 这样的约束将有4个“无限”变量(风速和风向以及地面的x-y坐标)。然而,任何半无限约束提供给 以合适的形式实现此约束 这意味着这个问题的“无限”变量是风速和风向。要了解这个约束是如何实现的,请查看MATLAB文件 这个约束函数可以分为和前面一样的三个部分: 1.定义约束评估的初始网格大小 注释“初始采样间隔”后面的代码初始化网格大小。 2.定义将用于约束评估的网格 代码的下一部分使用与最初问题中使用的类似的结构创建网格(现在是风速和方向)。 3.计算网格上的约束条件 代码的其余部分计算风速/风向网格每一点的二氧化硫浓度。然后返回这些约束 我们现在可以叫 现在我们可以看看有参数不确定性和没有参数不确定性的问题的最小计算累积堆栈高度之间的差异。您应该能够看到,当不确定性添加到问题中时,最小累积高度增加了。这一预期高度的增加使二氧化硫浓度保持在规定范围内所有风速/风向对的法定最大值以下。 我们可以通过对二氧化硫小区的检查来检查二氧化硫浓度是否超过感兴趣区域的限制。对于给定的(x, y)点,我们绘制了风速和风向在规定范围内的最大SO2浓度。注意,我们放大了X-Y平面的左上角。 最后,当问题定义中存在不确定性时,绘制出烟囱的最佳高度。 半无限规划算法有很多可用的选项,最小堆叠高度问题
H0 = [210;210;180;180;150;150;120;120;90;plotChimneyStacks (h0<年代pan style="color:#A020F0">“烟囱初始高度”
%以弧度表示的风向
图二氧化硫(h0, theta0, U0,<年代pan style="color:#0000FF">...
如何
fseminf
非线性约束函数的编写
类型<年代pan style="color:#A020F0">airPollutionCon.m
function [c, ceq, K, s] = airPollutionCon(h, s, theta, U) % airPollutionCon空气污染演示约束函数% % [c, ceq, K, s] = airPollutionCon(h, s, theta, U)计算空气污染优化工具箱(TM)演示的约束%。这个%函数首先使用提供的网格%间距s创建一个(X, Y)点的网格,然后在网格的每个点%上计算以下约束:% %二氧化硫浓度在指定的风向,THETA和%风速U <= 1.25e-4 g/m^3 % %参见AIRPOLLUTION % Copyright 2008 the MathWorks, Inc. %初始采样间隔if nargin < 2 || isnan(s(1,1)) s = [1000 4000];定义网格,“无限”约束将在w1x = -20000:s(1,1):20000;W1y = -20000:s(1,2):20000;[t1,t2] = meshgrid(w1x,w1y);%最大允许二氧化硫maxsul = 1.25e-4;%计算网格K = conc二氧化硫(t1, t2, h, θ, U) - maxsul;% Rescale约束使其为0(1)K = 1e4*K;%无有限约束c = [];Ceq = [];
解决优化问题
Lb = 10*ones(size(h0));[hopt, sumh, exitflag] = fseminf(@(h)sum(h), h0, 1,<年代pan style="color:#0000FF">...
可能的局部最小值。约束满足。Fseminf停止的原因是预测的目标函数的变化小于函数公差的值,约束条件满足在约束公差的值之内。
流(<年代pan style="color:#A020F0">'\n烟囱最小累积计算高度:%7.2f m\n'
烟囱垛的最小计算累积高度:3667.19米
plotChimneyStacks (hsopt<年代pan style="color:#A020F0">“烟囱最佳高度”
检查优化结果
titleStr =<年代pan style="color:#A020F0">“最佳二氧化硫浓度及其最大值(蓝色)”
SO2Max = conc二氧化硫(-20000,20000,hopt, theta0, U0);流(<年代pan style="color:#A020F0">'二氧化硫浓度在x = -20000m, y = 20000m: % g/m^3\n'
x = -20000m, y = 20000m处的二氧化硫浓度:1.250000 -04 g/m^3
考虑环境因素的不确定性
类型<年代pan style="color:#A020F0">uncertainAirPollutionCon.m
函数[c, ceq, K, s] = undeterminairpollution con (h, s) % undeterminairpollution con空气污染演示约束函数% % [c, ceq, K, s] = undeterminairpollution con (h, s)计算fseminf优化工具箱(TM)演示的%约束。这个%函数首先使用%提供的网格间距s创建一个风速/风向点的网格,然后计算以下约束%在网格的每个点上:% %二氧化硫浓度在x = -20000m, y = 20000m <= 1.25e- 4% g/m^ 3% %参见AIRPOLLUTION con, AIRPOLLUTION % Copyright 2008 the MathWorks, Inc. %最大允许二氧化硫maxsul = 1.25e-4;%初始采样间隔if nargin < 2 || isnan(s(1,1)) s = [0.02 0.04];定义“无限”约束将在w1x = 3.82:s(1,1):4.18;%风向w1y = 5.0:s(1,2):6.2;%风速[t1,t2] = meshgrid(w1x,w1y);我们假设所有风速/风向对的SO2浓度最大值为[x, y] =[- 200,20000] %。我们在这一点上计算SO2约束在% [theta, U]网格上的值。K = conc二氧化硫(-20000,20000,h, t1, t2) - maxsul;% Rescale约束使其为0(1)K = 1e4*K; % No finite constraints c = []; ceq = [];
[hsopt2, sumh2, exitflag2] = fseminf(@(h)sum(h), h0, 1,<年代pan style="color:#0000FF">...
可能的局部最小值。约束满足。Fseminf停止的原因是预测的目标函数的变化小于函数公差的值,约束条件满足在约束公差的值之内。
流(<年代pan style="color:#A020F0">'不确定度最小计算烟囱累积高度:%7.2f m\n'
不确定烟囱最小累积计算高度:3812.13 m
titleStr =<年代pan style="color:#A020F0">“不确定条件下的最佳二氧化硫浓度”
plotChimneyStacks (hsopt2<年代pan style="color:#A020F0">“不确定条件下烟囱的最佳高度”
相关的话题