利用半无限规划分析不确定性的影响
这个例子展示了如何使用半无限规划来研究一个优化问题的模型参数的不确定性的影响。我们将用这个函数来阐述和解决一个优化问题fseminf,优化工具箱™中的半无限编程求解器。
这个例子所说明的问题涉及到空气污染的控制。具体来说,一组烟囱将在给定的地理区域建立。随着烟囱高度的增加,烟囱污染物的地面浓度会降低。然而,每个烟囱的建设成本随着高度的增加而增加。我们将解决一个问题,在地面污染浓度不超过法定限制的情况下,尽量减少烟囱的累积高度,从而降低建筑成本。这个问题概述在以下的参考文献中:
半无限规划的空气污染控制,A.I.F. Vaz和E.C. Ferreira,第28届全国统计调查大会,2004年10月
在本例中,我们将首先解决上面文章中发布的问题<年代pan class="emphasis">最小堆叠高度问题。这个问题中的模型依赖于几个参数,其中两个是风速和风向。在问题的第一次解中,假设所有模型参数都是准确已知的。
然后,我们通过允许风速和风向参数在给定范围内变化来扩展原始问题。这将使我们能够分析这些参数的不确定性对该问题的最优解的影响。
最小堆栈高度问题
考虑一个20km × 20km的区域R,其中有10个烟囱。这些烟囱向大气中释放了几种污染物,其中之一是二氧化硫。堆栈的x, y位置是固定的,但堆栈的高度可以变化。
烟囱的建造者希望使烟囱的总高度最小化,从而使施工成本最小化。然而,这与相互矛盾的要求相平衡,即R区域地面上任何一点的二氧化硫浓度不得超过法定最大值。
首先,让我们画出烟囱的初始高度。请注意,我们放大了R中4km × 4km的子区域,其中包含烟囱。
H0 = [210;210;180;180;150;150;120;120;90;90];plotChimneyStacks (h0<年代pan style="color:#A020F0">“烟囱初始高度”);
在这个问题中有两个与环境有关的参数,风速和风向。在本例的后面,我们将允许这些参数变化,但对于第一个问题,我们将把这些参数设置为典型值。
%风向,以弧度为单位Theta0 = 3.996;<年代pan style="color:#228B22">%风速,单位为m/sU0 = 5.64;
现在让我们绘制整个区域R的二氧化硫(SO2)地面浓度(记住,烟囱的图是在一个较小的区域上)。二氧化硫浓度是在烟囱设置为初始高度的情况下计算出来的。
我们可以看到SO2的浓度在感兴趣的区域是不同的。二氧化硫图有两个值得注意的特征:
SO2浓度在(x,y)平面的左上角上升
整个区域的二氧化硫浓度几乎为零
简单来说,第一个特征是由于盛行风,在这个例子中,盛行风将SO2吹向(x,y)平面的左上角。第二个因素是由于SO2通过扩散被运送到地面。与盛行风相比,这是一个较慢的过程,因此SO2只到达感兴趣区域左上角的地面。
有关烟囱大气扩散的更详细的讨论,请参考引言中引用的参考文献。
粉红色平面表示SO2的浓度<年代pan class="inlineequation">
.这是r区域二氧化硫浓度不得超过的法定最大值。从图中可以清楚地看到,SO2浓度超过了初始烟囱高度的最大值。
检查MATLAB文件concSulfurDioxide看看二氧化硫浓度是如何计算的。
plot二氧化硫(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) %空气污染演示的约束函数% % [c, ceq, K, s] = airPollutionCon(h, s, theta, U)计算空气污染优化工具箱(TM)演示的%约束。此%函数首先使用提供的网格%间距s创建(X, Y)点的网格,然后在网格的每个点%上计算以下约束:% %指定风向下的二氧化硫浓度,THETA和%风速U <= 1.25e-4 g/m^3 %参见AIRPOLLUTION版权2008 the MathWorks, Inc. %初始采样间隔如果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, theta, U) - maxsul;%重新缩放约束,使其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));[hspopt, sumh, exitflag] = fseminf(@(h)sum(h), h0, 1,<年代pan style="color:#0000FF">...@ (h, s) airPollutionCon (h, s, theta0情况 ), [], [], [], [], 磅);
局部最小值。约束满足。Fseminf停止,因为目标函数的预测变化小于函数公差的值,并且约束被满足在约束公差的值之内。
流(<年代pan style="color:#A020F0">烟囱最小累积计算高度:%7.2f m\n', sumh);
烟囱最小计算累积高度:3667.19 m
计算的最小累积高度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二氧化硫(hsop, theta0, U0, titleStr, xMaxSD);
SO2Max = conc二氧化硫(-20000,20000,hsop, theta0, U0);流(<年代pan style="color:#A020F0">' x = -20000m, y = 20000m时二氧化硫浓度:% eg /m^3\n', SO2Max);
x = -20000m, y = 20000m时二氧化硫浓度:1.250000e-04 g/m^3
考虑环境因素的不确定性
二氧化硫浓度取决于几个环境因素,这些因素在上面的问题中被保持在一个固定的值。其中两个环境因素是风速和风向。有关所有问题参数的更详细讨论,请参阅介绍中引用的参考资料。
我们可以研究风速和风向对系统行为的影响。在本节示例中,我们希望确保即使风向从3.82 rad变化到4.18 rad,平均风速在5到6.2 m/s之间变化,也能满足二氧化硫的限制。
我们需要实施一个半无限约束,以确保二氧化硫浓度不超过r区域的限制,这个约束要求对所有风速和风向对都是可行的。
这样的约束将有四个“无限”变量(风速和风向以及地面的x-y坐标)。然而,任何半无限约束提供给fseminf不能有超过两个“无限”变量。
以合适的形式实现此约束fseminf,我们回忆上一题中最优堆高处的SO2浓度。其中,SO2浓度在x = -20000m, y = 20000m处最大。为了减少“无限”变量的数量,我们将假设SO2浓度在存在不确定性时也会在此时取其最大值。然后我们要求SO2在这一点的浓度低于<年代pan class="inlineequation">
对于所有的风速和风向对。
这意味着这个问题的“无限”变量是风速和方向。要了解这个约束是如何实现的,请检查MATLAB文件uncertainAirPollutionCon.
类型<年代pan style="color:#A020F0">uncertainAirPollutionCon.m
function [c, ceq, K, s] = uncertainAirPollutionCon(h, s) % uncertainAirPollutionCon空气污染演示的约束函数% % [c, ceq, K, s] = uncertainAirPollutionCon(h, s)计算fsemf优化工具箱(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] =[-20000, 20000] %。此时我们计算SO2约束在% [theta, U]网格上的值。K = conc二氧化硫(-20000,20000,h, t1, t2) - maxsul;%重新缩放约束,使其0(1)K = 1e4*K; % No finite constraints c = []; ceq = [];
该约束函数可以分为与之前相同的三个部分:
1.定义约束评估的初始网格大小
注释“初始采样间隔”后面的代码初始化网格大小。
2.定义将用于约束计算的网格
下一段代码使用与初始问题中使用的类似结构创建一个网格(现在是风速和方向)。
3.计算网格上的约束条件
代码的其余部分计算风速/方向网格上每个点的SO2浓度。然后返回这些约束fseminf由上面的约束函数。
我们现在可以调用fseminf解决了考虑环境因素不确定性的堆高问题。
[hsopt2, sumh2, exitflag2] = fseminf(@(h)sum(h), h0, 1,<年代pan style="color:#0000FF">...@ unsureairpollution con, [], [], [], [], lb);
局部最小值。约束满足。Fseminf停止,因为目标函数的预测变化小于函数公差的值,并且约束被满足在约束公差的值之内。
流(<年代pan style="color:#A020F0">不确定性烟囱最小累积高度计算:%7.2f m\n', sumh2);
不确定性烟囱最小计算累积高度:3812.01 m
现在,我们可以看看有参数不确定性和没有参数不确定性的问题的最小累积堆栈高度之间的差异。当不确定性添加到问题中时,您应该能够看到最小累积高度增加。这一预期的高度增加使得SO2浓度保持在规定范围内所有风速/风向对的法定最大值以下。
我们可以通过检查二氧化硫地块来检查二氧化硫浓度是否超过感兴趣区域的限制。对于给定的(x, y)点,我们绘制了给定范围内风速和风向下的最大二氧化硫浓度。注意,我们放大了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];plot二氧化硫不确定(hsopt2, thetaRange, URange, XRange, YRange, titleStr);
最后,当问题定义存在不确定性时,我们绘制出烟囱的最佳高度。
plotChimneyStacks (hsopt2<年代pan style="color:#A020F0">“不确定条件下烟囱的最佳高度”);
半无限规划算法有很多选择,fseminf.有关详细信息,请参阅优化工具箱™用户指南,在使用优化工具箱求解器一章中,在约束非线性优化:fseminf问题的公式和算法下。
相关的话题
这个例子展示了如何使用半无限规划来研究一个优化问题的模型参数的不确定性的影响。我们将用这个函数来阐述和解决一个优化问题 这个例子所说明的问题涉及到空气污染的控制。具体来说,一组烟囱将在给定的地理区域建立。随着烟囱高度的增加,烟囱污染物的地面浓度会降低。然而,每个烟囱的建设成本随着高度的增加而增加。我们将解决一个问题,在地面污染浓度不超过法定限制的情况下,尽量减少烟囱的累积高度,从而降低建筑成本。这个问题概述在以下的参考文献中: 半无限规划的空气污染控制,A.I.F. Vaz和E.C. Ferreira,第28届全国统计调查大会,2004年10月 在本例中,我们将首先解决上面文章中发布的问题<年代pan class="emphasis">最小堆叠高度 然后,我们通过允许风速和风向参数在给定范围内变化来扩展原始问题。这将使我们能够分析这些参数的不确定性对该问题的最优解的影响。 考虑一个20km × 20km的区域R,其中有10个烟囱。这些烟囱向大气中释放了几种污染物,其中之一是二氧化硫。堆栈的x, y位置是固定的,但堆栈的高度可以变化。 烟囱的建造者希望使烟囱的总高度最小化,从而使施工成本最小化。然而,这与相互矛盾的要求相平衡,即R区域地面上任何一点的二氧化硫浓度不得超过法定最大值。 首先,让我们画出烟囱的初始高度。请注意,我们放大了R中4km × 4km的子区域,其中包含烟囱。 在这个问题中有两个与环境有关的参数,风速和风向。在本例的后面,我们将允许这些参数变化,但对于第一个问题,我们将把这些参数设置为典型值。 现在让我们绘制整个区域R的二氧化硫(SO2)地面浓度(记住,烟囱的图是在一个较小的区域上)。二氧化硫浓度是在烟囱设置为初始高度的情况下计算出来的。 我们可以看到SO2的浓度在感兴趣的区域是不同的。二氧化硫图有两个值得注意的特征: SO2浓度在(x,y)平面的左上角上升 整个区域的二氧化硫浓度几乎为零 简单来说,第一个特征是由于盛行风,在这个例子中,盛行风将SO2吹向(x,y)平面的左上角。第二个因素是由于SO2通过扩散被运送到地面。与盛行风相比,这是一个较慢的过程,因此SO2只到达感兴趣区域左上角的地面。 有关烟囱大气扩散的更详细的讨论,请参考引言中引用的参考文献。 粉红色平面表示SO2的浓度<年代pan class="inlineequation">
.这是r区域二氧化硫浓度不得超过的法定最大值。从图中可以清楚地看到,SO2浓度超过了初始烟囱高度的最大值。 检查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区域的限制,这个约束要求对所有风速和风向对都是可行的。 这样的约束将有四个“无限”变量(风速和风向以及地面的x-y坐标)。然而,任何半无限约束提供给 以合适的形式实现此约束 这意味着这个问题的“无限”变量是风速和方向。要了解这个约束是如何实现的,请检查MATLAB文件 该约束函数可以分为与之前相同的三个部分: 1.定义约束评估的初始网格大小 注释“初始采样间隔”后面的代码初始化网格大小。 2.定义将用于约束计算的网格 下一段代码使用与初始问题中使用的类似结构创建一个网格(现在是风速和方向)。 3.计算网格上的约束条件 代码的其余部分计算风速/方向网格上每个点的SO2浓度。然后返回这些约束 我们现在可以调用 现在,我们可以看看有参数不确定性和没有参数不确定性的问题的最小累积堆栈高度之间的差异。当不确定性添加到问题中时,您应该能够看到最小累积高度增加。这一预期的高度增加使得SO2浓度保持在规定范围内所有风速/风向对的法定最大值以下。 我们可以通过检查二氧化硫地块来检查二氧化硫浓度是否超过感兴趣区域的限制。对于给定的(x, y)点,我们绘制了给定范围内风速和风向下的最大二氧化硫浓度。注意,我们放大了X-Y平面的左上角。 最后,当问题定义存在不确定性时,我们绘制出烟囱的最佳高度。 半无限规划算法有很多选择,最小堆栈高度问题
H0 = [210;210;180;180;150;150;120;120;90;90];plotChimneyStacks (h0<年代pan style="color:#A020F0">“烟囱初始高度”
%风向,以弧度为单位
plot二氧化硫(h0, theta0, U0,<年代pan style="color:#0000FF">...
如何
fseminf
写出非线性约束函数
类型<年代pan style="color:#A020F0">airPollutionCon.m
function [c, ceq, K, s] = airPollutionCon(h, s, theta, U) %空气污染演示的约束函数% % [c, ceq, K, s] = airPollutionCon(h, s, theta, U)计算空气污染优化工具箱(TM)演示的%约束。此%函数首先使用提供的网格%间距s创建(X, Y)点的网格,然后在网格的每个点%上计算以下约束:% %指定风向下的二氧化硫浓度,THETA和%风速U <= 1.25e-4 g/m^3 %参见AIRPOLLUTION版权2008 the MathWorks, Inc. %初始采样间隔如果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, theta, U) - maxsul;%重新缩放约束,使其0(1)K = 1e4*K;%无有限约束c = [];Ceq = [];
解决优化问题
Lb = 10*ones(size(h0));[hspopt, sumh, exitflag] = fseminf(@(h)sum(h), h0, 1,<年代pan style="color:#0000FF">...
局部最小值。约束满足。Fseminf停止,因为目标函数的预测变化小于函数公差的值,并且约束被满足在约束公差的值之内。
流(<年代pan style="color:#A020F0">烟囱最小累积计算高度:%7.2f m\n'
烟囱最小计算累积高度:3667.19 m
plotChimneyStacks (hsopt<年代pan style="color:#A020F0">“烟囱的最佳高度”
检查优化结果
titleStr =<年代pan style="color:#A020F0">“最佳二氧化硫浓度及其最大值(蓝色)”
SO2Max = conc二氧化硫(-20000,20000,hsop, theta0, U0);流(<年代pan style="color:#A020F0">' x = -20000m, y = 20000m时二氧化硫浓度:% eg /m^3\n'
x = -20000m, y = 20000m时二氧化硫浓度:1.250000e-04 g/m^3
考虑环境因素的不确定性
类型<年代pan style="color:#A020F0">uncertainAirPollutionCon.m
function [c, ceq, K, s] = uncertainAirPollutionCon(h, s) % uncertainAirPollutionCon空气污染演示的约束函数% % [c, ceq, K, s] = uncertainAirPollutionCon(h, s)计算fsemf优化工具箱(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] =[-20000, 20000] %。此时我们计算SO2约束在% [theta, U]网格上的值。K = conc二氧化硫(-20000,20000,h, t1, t2) - maxsul;%重新缩放约束,使其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.01 m
titleStr =<年代pan style="color:#A020F0">“不确定性下的最佳二氧化硫浓度”
plotChimneyStacks (hsopt2<年代pan style="color:#A020F0">“不确定条件下烟囱的最佳高度”
相关的话题