Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Analizando el efecto de la incertidumbre usando la programación semi-infinita

En este ejemplo se muestra cómo utilizar la programación semiinfinita para investigar el efecto de la incertidumbre en los parámetros del modelo de un problema de optimización. Formularemos y resolveremos un problema de optimización utilizando la función, un solucionador de programación semi-infinita en Optimization Toolbox™.fseminf

El problema ilustrado en este ejemplo implica el control de la contaminación atmosférica. Concretamente, se construirá un conjunto de chimeneas en un área geográfica determinada. A medida que aumenta la altura de cada pila de chimeneas, la concentración del nivel del suelo de los contaminantes de la pila disminuye. Sin embargo, el costo de construcción de cada chimenea aumenta con la altura. Resolveremos un problema para minimizar la altura acumulada de las pilas de chimeneas, por lo tanto, el costo de construcción, sujeto a la concentración de contaminación a nivel del suelo que no exceda un límite legislado. Este problema se describe en la siguiente referencia:

Control de la contaminación atmosférica con programación semi-infinita, A.I.F. Vaz y C.E. Ferreira, XXVIII Congreso Nacional de Estadistica E INVESTIGACION operativa, octubre 2004

En este ejemplo vamos a resolver primero el problema publicado en el artículo anterior como el problema.Minimal Stack Height Los modelos en este problema dependen de varios parámetros, dos de los cuales son la velocidad y la dirección del viento. Se asume que todos los parámetros del modelo se conocen exactamente en la primera solución del problema.

A continuación, ampliamos el problema original al permitir que los parámetros de velocidad y dirección del viento varíen dentro de los rangos dados. Esto nos permitirá analizar los efectos de la incertidumbre en estos parámetros sobre la solución óptima a este problema.

Problema mínimo de altura de pila

Consideremos una región de 20km por 20km, R, en la que se colocarán diez chimeneas. Estas chimeneas liberan varios contaminantes en la atmósfera, uno de los cuales es dióxido de azufre. Las ubicaciones x, y de las pilas son fijas, pero la altura de las pilas puede variar.

A los constructores de las pilas les gustaría minimizar la altura total de las pilas, minimizando así los costes de construcción. Sin embargo, esto se equilibra con el requisito contradictoria de que la concentración de dióxido de azufre en cualquier punto del terreno en la región R no debe exceder el máximo legislado.

Primero, vamos a trazar las pilas de la chimenea a su altura inicial. Tenga en cuenta que hemos ampliado en una subregión de 4km-por-4km de R que contiene las pilas de la chimenea.

h0 = [210;210;180;180;150;150;120;120;90;90]; plotChimneyStacks(h0, 'Chimney Stack Initial Height');

Hay dos parámetros relacionados con el entorno en este problema, la velocidad y la dirección del viento. Más adelante en este ejemplo permitiremos que estos parámetros varíen, pero para el primer problema establecemos estos parámetros en valores típicos.

% Wind direction in radians theta0 = 3.996;    % Wind speed in m/s U0 = 5.64;

Ahora vamos a trazar la concentración en el nivel del suelo de dióxido de azufre (SO2) en toda la región R (Recuerde que la parcela de chimeneas se encontraba sobre una región más pequeña). La concentración de SO2 se ha calculado con las pilas de chimeneas establecidas en sus alturas iniciales.

Podemos ver que la concentración de SO2 varía en la región de interés. Hay dos características del gráfico de dióxido de azufre de la Nota:

  • La concentración de SO2 se eleva en la esquina superior izquierda del plano (x, y)

  • La concentración de SO2 es aproximadamente nula en la mayor parte de la región

En términos muy simples, la primera característica se debe al viento predominante, que está soplando SO2 hacia la esquina superior izquierda del plano (x, y) en este ejemplo. El segundo factor se debe a que el SO2 se transporta al suelo a través de la difusión. Se trata de un proceso más lento en comparación con el viento predominante y por lo tanto el SO2 sólo alcanza el nivel del suelo en la esquina superior izquierda de la región de interés.

Para una discusión más detallada de la dispersión atmosférica de las chimeneas, consulte la referencia citada en la introducción.

El plano rosado indica una concentración de SO2 de

<math display="inline">
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>0</mn>
<mn>0</mn>
<mn>0</mn>
<mn>1</mn>
<mn>2</mn>
<mn>5</mn>
<mi>g</mi>
<msup>
<mrow>
<mi>m</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>3</mn>
</mrow>
</msup>
</mrow>
</math>
. Este es el máximo legislado para el cual la concentración de dióxido de azufre no debe exceder en la región R. Se puede ver claramente desde el gráfico que la concentración de SO2 excede el máximo para la altura inicial del stack de la chimenea.

Examine el archivo MATLAB para ver cómo se calcula la concentración de dióxido de azufre.concSulfurDioxide

plotSulfurDioxide(h0, theta0, U0, ...     'Sulfur Dioxide Concentration at Initial Stack Height');

¿Cómo funcionafseminf

Antes de resolver el problema de altura mínimo de la pila, vamos a delinear cómo resuelve un problema semi-infinito.fseminf Un problema de programación semi-infinito general se puede señalar como:

<math display="block">
<mrow>
<mrow>
<mi mathvariant="normal">min</mi>
</mrow>
<mi>f</mi>
<mo stretchy="false">(</mo>
<mi>x</mi>
<mo stretchy="false">)</mo>
</mrow>
</math>

tal que

<math display="inline">
<mrow>
<mi>A</mi>
<mi>x</mi>
<mo><</mo>
<mo>=</mo>
<mi>b</mi>
</mrow>
</math>
(Restricciones de desigualdad lineales)

<math display="inline">
<mrow>
<mi>A</mi>
<mi>e</mi>
<mi>q</mi>
<mo>*</mo>
<mi>x</mi>
<mo>=</mo>
<mi>b</mi>
<mi>e</mi>
<mi>q</mi>
</mrow>
</math>
(Restricciones de igualdad lineales)

<math display="inline">
<mrow>
<mi>c</mi>
<mo stretchy="false">(</mo>
<mi>x</mi>
<mo stretchy="false">)</mo>
<mo><</mo>
<mo>=</mo>
<mn>0</mn>
</mrow>
</math>
(Restricciones de desigualdad no lineales)

<math display="inline">
<mrow>
<mi>c</mi>
<mi>e</mi>
<mi>q</mi>
<mo stretchy="false">(</mo>
<mi>x</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mn>0</mn>
</mrow>
</math>
(Restricciones de igualdad no lineales)

<math display="inline">
<mrow>
<mi>l</mi>
<mo><</mo>
<mo>=</mo>
<mi>x</mi>
<mo><</mo>
<mo>=</mo>
<mi>u</mi>
</mrow>
</math>
Límites

Y

<math display="inline">
<mrow>
<msub>
<mrow>
<mi>K</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
<mo stretchy="false">(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>w</mi>
<mo stretchy="false">)</mo>
<mo><</mo>
<mo>=</mo>
<mn>0</mn>
</mrow>
</math>
Dónde
<math display="inline">
<mrow>
<mi>w</mi>
<mo></mo>
<msub>
<mrow>
<mi>I</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
</math>
Para
<math display="inline">
<mrow>
<mi>j</mi>
<mo>=</mo>
<mn>1</mn>
<mo>,</mo>
<mo>.</mo>
<mo>.</mo>
<mo>.</mo>
<mo>,</mo>
<msub>
<mrow>
<mi>n</mi>
</mrow>
<mrow>
<mi>i</mi>
<mi>n</mi>
<mi>f</mi>
</mrow>
</msub>
</mrow>
</math>
(Restricciones semi-infinitas no lineales)

Este algoritmo le permite especificar restricciones para un problema de optimización no lineal que debe cumplirse a través de intervalos de una variable auxiliar,

<math display="inline">
<mrow>
<mi>w</mi>
</mrow>
</math>
. Tenga en cuenta que, para, esta variable está restringida para ser 1 o 2 dimensional para cada restricción semi-infinita.fseminf

La función resuelve el problema general semi-infinito a partir de un valor inicial,fseminf

<math display="inline">
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>0</mn>
</mrow>
</msub>
</mrow>
</math>
, y utilizando un procedimiento iterativo para obtener una solución óptima,
<math display="inline">
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mi>o</mi>
<mi>p</mi>
<mi>t</mi>
</mrow>
</msub>
</mrow>
</math>
.

El componente clave del algoritmo es el manejo de las restricciones "semi-infinitas",

<math display="inline">
<mrow>
<msub>
<mrow>
<mi>K</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
</math>
. En
<math display="inline">
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mi>o</mi>
<mi>p</mi>
<mi>t</mi>
</mrow>
</msub>
</mrow>
</math>
se requiere que el
<math display="inline">
<mrow>
<msub>
<mrow>
<mi>K</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
</math>
debe ser factible en cada valor de
<math display="inline">
<mrow>
<mi>w</mi>
</mrow>
</math>
en el intervalo
<math display="inline">
<mrow>
<msub>
<mrow>
<mi>I</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
</math>
. Esta restricción se puede simplificar teniendo en cuenta todos los máximos locales de
<math display="inline">
<mrow>
<msub>
<mrow>
<mi>K</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
</math>
con respecto a
<math display="inline">
<mrow>
<mi>w</mi>
</mrow>
</math>
en el intervalo
<math display="inline">
<mrow>
<msub>
<mrow>
<mi>I</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
</math>
. La restricción original equivale a exigir que el valor de
<math display="inline">
<mrow>
<msub>
<mrow>
<mi>K</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
</math>
en cada uno de los máximos locales anteriores es factible.

calcula una aproximación a todos los valores máximos locales de cada restricción semi-infinita,fseminf

<math display="inline">
<mrow>
<msub>
<mrow>
<mi>K</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
</math>
. Para ello, primero calcula cada restricción semi-infinita sobre una malla defseminf
<math display="inline">
<mrow>
<mi>w</mi>
</mrow>
</math>
Valores. A continuación, se utiliza un esquema de diferenciación simple para calcular todos los valores máximos locales de
<math display="inline">
<mrow>
<msub>
<mrow>
<mi>K</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
</math>
de la restricción semi-infinita evaluada.

Como veremos más adelante, creará esta malla en su función de restricción. El espaciado que debe usar para cada

<math display="inline">
<mrow>
<mi>w</mi>
</mrow>
</math>
coordenada de la malla se suministra a la función de restricción.fseminf

En cada iteración del algoritmo, se realizan los siguientes pasos:

  1. Evaluar

    <math display="inline">
    <mrow>
    <msub>
    <mrow>
    <mi>K</mi>
    </mrow>
    <mrow>
    <mi>j</mi>
    </mrow>
    </msub>
    </mrow>
    </math>
    sobre una malla de
    <math display="inline">
    <mrow>
    <mi>w</mi>
    </mrow>
    </math>
    -valores utilizando el espaciado de malla actual para cada
    <math display="inline">
    <mrow>
    <mi>w</mi>
    </mrow>
    </math>
    coordenadas.

  2. Calcule una aproximación a todos los valores máximos locales de

    <math display="inline">
    <mrow>
    <msub>
    <mrow>
    <mi>K</mi>
    </mrow>
    <mrow>
    <mi>j</mi>
    </mrow>
    </msub>
    </mrow>
    </math>
    utilizando la evaluación de
    <math display="inline">
    <mrow>
    <msub>
    <mrow>
    <mi>K</mi>
    </mrow>
    <mrow>
    <mi>j</mi>
    </mrow>
    </msub>
    </mrow>
    </math>
    del paso 1.

  3. Reemplace cada

    <math display="inline">
    <mrow>
    <msub>
    <mrow>
    <mi>K</mi>
    </mrow>
    <mrow>
    <mi>j</mi>
    </mrow>
    </msub>
    </mrow>
    </math>
    en el problema semi-infinito general con el conjunto de valores máximos locales encontrados en los pasos 1-2. El problema ahora tiene un número finito de restricciones no lineales. utiliza el algoritmo SQP utilizado por para tomar un paso de iteración del problema modificado.fseminffmincon

  4. Compruebe si alguno de los criterios de detención del algoritmo SQP se cumple en el nuevo punto

    <math display="inline">
    <mrow>
    <mi>x</mi>
    </mrow>
    </math>
    . Si se cumple algún criterio, el algoritmo finaliza; Si no, continúa en el paso 5.fseminf Por ejemplo, si el valor de optimalidad del primer orden para el problema definido en el paso 3 es menor que la tolerancia especificada, se terminará.fseminf

  5. Actualice el espaciado de malla utilizado en la evaluación de las restricciones semi-infinitas en el paso 1.

Escribir la función de restricción no lineal

Antes de que podamos llamar para resolver el problema, necesitamos escribir una función para evaluar las restricciones no lineales en este problema.fseminf La restricción a implementar es que la concentración de dióxido de azufre a nivel del suelo no debe exceder

<math display="inline">
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>0</mn>
<mn>0</mn>
<mn>0</mn>
<mn>1</mn>
<mn>2</mn>
<mn>5</mn>
<mi>g</mi>
<msup>
<mrow>
<mi>m</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>3</mn>
</mrow>
</msup>
</mrow>
</math>
en cada punto de la región R.

Se trata de una restricción semi-infinita, y la implementación de la función de restricción se explica en esta sección. Para el problema de altura mínima de la pila hemos implementado la restricción en el archivo MATLAB.airPollutionCon

type airPollutionCon.m
function [c, ceq, K, s] = airPollutionCon(h, s, theta, U) %AIRPOLLUTIONCON Constraint function for air pollution demo %  %   [C, CEQ, K, S] = AIRPOLLUTIONCON(H, S, THETA, U) calculates the %   constraints for the air pollution Optimization Toolbox (TM) demo. This %   function first creates a grid of (X, Y) points using the supplied grid %   spacing, S. The following constraint is then calculated over each point %   of the grid: % %   Sulfur Dioxide concentration at the specified wind direction, THETA and %   wind speed U <= 1.25e-4 g/m^3 % %   See also AIRPOLLUTION  %   Copyright 2008 The MathWorks, Inc.  % Initial sampling interval if nargin < 2 || isnan(s(1,1))     s = [1000 4000];  end  % Define the grid that the "infinite" constraints will be evaluated over w1x = -20000:s(1,1):20000; w1y = -20000:s(1,2):20000; [t1,t2] = meshgrid(w1x,w1y);  % Maximum allowed sulphur dioxide maxsul = 1.25e-4;   % Calculate the constraint over the grid K = concSulfurDioxide(t1, t2, h, theta, U) - maxsul;  % Rescale constraint to make it 0(1) K = 1e4*K;  % No finite constraints c = []; ceq = []; 

Esta función ilustra la estructura general de una función de restricción para un problema de programación semi-infinito. En particular, una función de restricción puede dividirse en tres partes:fseminf

1. Defina el tamaño de malla inicial para la evaluación de restricciones

Recuerde que evalúa las restricciones "semi-infinitas" sobre una malla como parte del cálculo general de estas restricciones.fseminf Cuando se llama a la función de restricción, el espaciado de malla que debe usar se suministra a la función. llamará inicialmente a la función de restricción con el espaciado de malla, establecido en NaN.fseminfFseminfs Esto le permite inicializar el tamaño de malla para la evaluación de restricciones. Aquí, tenemos una restricción "infinita" en dos variables "infinitas". Esto significa que necesitamos inicializar el tamaño de la malla a una matriz de 1 por 2, en este caso,.s = [1000 4000]

2. Defina la malla que se utilizará para la evaluación de restricciones

Se debe crear una malla que se utilizará para la evaluación de restricciones. Las tres líneas de código que siguen al comentario "definir la cuadrícula que se evaluarán las restricciones" infinitas "sobre" in se puede modificar para la mayoría de los problemas de programación semi-infinito 2-d.airPollutionCon

3. Calcule las restricciones sobre la malla

Una vez que se ha definido la malla, las restricciones se pueden calcular sobre ella. Estas restricciones se devuelven a partir de la función de restricción anterior.fseminf

Tenga en cuenta que en este problema, también hemos reescalado las restricciones para que varíen en una escala más cercana a la de la función objetiva. Esto ayuda a evitar problemas de escalado asociados con objetivos y restricciones que varían en escalas dispares.fseminf

Resuelve el problema de optimización

Ahora podemos llamar para resolver el problema.fseminf Las pilas de chimeneas deben ser de al menos 10m de alto y usamos la altura inicial de la pila especificada anteriormente. Tenga en cuenta que el tercer argumento de entrada a debajo (1) indica que solo hay una restricción semi-infinita.fseminf

lb = 10*ones(size(h0)); [hsopt, sumh, exitflag] = fseminf(@(h)sum(h), h0, 1, ...     @(h,s) airPollutionCon(h,s,theta0,U0), [], [], [], [], lb);
Local minimum possible. Constraints satisfied.  fseminf stopped because the predicted change in the objective function is less than the value of the function tolerance and constraints  are satisfied to within the value of the constraint tolerance. 
fprintf('\nMinimum computed cumulative height of chimney stacks : %7.2f m\n', sumh);
Minimum computed cumulative height of chimney stacks : 3667.22 m 

La altura acumulada mínima calculada por es considerablemente mayor que la altura total inicial de las pilas de la chimenea.fseminf Veremos cómo cambia la altura acumulada mínima cuando la incertidumbre del parámetro se agrega al problema más adelante en el ejemplo. Por ahora, vamos a trazar las pilas de la chimenea a su altura óptima.

Examine el archivo MATLAB para ver cómo se generó el trazado.plotChimneyStacks

plotChimneyStacks(hsopt, 'Chimney Stack Optimal Height');

Compruebe los resultados de la optimización

Recuerde que determina que la restricción semi-infinita se satisface en todas partes asegurándose de que el maxima discretizado de la restricción está por debajo del límite especificado.fseminf Podemos verificar que la restricción semi-infinita se satisface en todas partes al trazar la concentración de dióxido de azufre a nivel del suelo para la altura óptima de la pila.

Tenga en cuenta que la concentración de dióxido de azufre toma su máximo valor posible en la esquina superior izquierda del plano (x, y), es decir, en x =-20000m, y = 20000m. Este punto está marcado por el punto azul en la figura de abajo y verificado calculando la concentración de dióxido de azufre en este punto.

Examine el archivo MATLAB para ver cómo se generaron los trazados.plotSulfurDioxide

titleStr = 'Optimal Sulfur Dioxide Concentration and its maximum (blue)'; xMaxSD = [-20000 20000]; plotSulfurDioxide(hsopt, theta0, U0, titleStr, xMaxSD);

SO2Max = concSulfurDioxide(-20000, 20000, hsopt, theta0, U0); fprintf('Sulfur Dioxide Concentration at x = -20000m, y = 20000m : %e g/m^3\n', SO2Max);
Sulfur Dioxide Concentration at x = -20000m, y = 20000m : 1.250000e-04 g/m^3 

Considerando la incertidumbre en los factores ambientales

La concentración de dióxido de azufre depende de varios factores ambientales que se mantuvieron a valores fijos en el problema anterior. Dos de los factores ambientales son la velocidad del viento y la dirección del viento. Ver la referencia citada en la introducción para una discusión más detallada de todos los parámetros del problema.

Podemos investigar el cambio en el comportamiento del sistema con respecto a la velocidad y dirección del viento. En esta sección del ejemplo, queremos asegurarnos de que los límites de dióxido de azufre se cumplan incluso si la dirección del viento cambia de 3,82 Rad a 4,18 Rad y la velocidad media del viento varía entre 5 y 6,2 m/s.

Necesitamos implementar una restricción semi-infinita para asegurar que la concentración de dióxido de azufre no exceda el límite en la región R. Esta restricción es necesaria para ser factible para todos los pares de velocidad y dirección del viento.

Tal restricción tendrá cuatro variables "infinitas" (velocidad y dirección del viento y las coordenadas x-y del suelo). Sin embargo, cualquier restricción semi-infinita suministrada a no puede tener más de dos variables "infinitas".fseminf

Para implementar esta restricción en una forma adecuada para, recordamos la concentración de SO2 en la altura óptima de la pila en el problema anterior.fseminf En particular, la concentración de SO2 toma su máximo valor posible a x =-20000m, y = 20000m. Para reducir el número de variables "infinitas", supondremos que la concentración de SO2 también tomará su valor máximo en este momento cuando exista incertidumbre. Entonces requerimos que la concentración de SO2 en este punto esté por debajo

<math display="inline">
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>0</mn>
<mn>0</mn>
<mn>0</mn>
<mn>1</mn>
<mn>2</mn>
<mn>5</mn>
<mi>g</mi>
<msup>
<mrow>
<mi>m</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>3</mn>
</mrow>
</msup>
</mrow>
</math>
para todos los pares de velocidad y dirección del viento.

Esto significa que las variables "infinitas" para este problema son la velocidad y la dirección del viento. Para ver cómo se ha implementado esta restricción, inspeccione el archivo MATLAB.uncertainAirPollutionCon

type uncertainAirPollutionCon.m
function [c, ceq, K, s] = uncertainAirPollutionCon(h, s) %UNCERTAINAIRPOLLUTIONCON Constraint function for air pollution demo %  %   [C, CEQ, K, S] = UNCERTAINAIRPOLLUTIONCON(H, S) calculates the %   constraints for the fseminf Optimization Toolbox (TM) demo. This %   function first creates a grid of wind speed/direction points using the %   supplied grid spacing, S. The following constraint is then calculated %   over each point of the grid: % %   Sulfur Dioxide concentration at x = -20000m, y = 20000m <= 1.25e-4 %   g/m^3 % %   See also AIRPOLLUTIONCON, AIRPOLLUTION  %   Copyright 2008 The MathWorks, Inc.  % Maximum allowed sulphur dioxide maxsul = 1.25e-4;   % Initial sampling interval if nargin < 2 || isnan(s(1,1))     s = [0.02 0.04];  end  % Define the grid that the "infinite" constraints will be evaluated over w1x = 3.82:s(1,1):4.18; % Wind direction w1y = 5.0:s(1,2):6.2;   % Wind speed [t1,t2] = meshgrid(w1x,w1y);  % We assume the maximum SO2 concentration is at [x, y] = [-20000, 20000] % for all wind speed/direction pairs. We evaluate the SO2 constraint over % the [theta, U] grid at this point. K = concSulfurDioxide(-20000, 20000, h, t1, t2) - maxsul;   % Rescale constraint to make it 0(1) K = 1e4*K;  % No finite constraints c = []; ceq = []; 

Esta función de restricción se puede dividir en las mismas tres secciones que antes:

1. Defina el tamaño de malla inicial para la evaluación de restricciones

El código que sigue al comentario "intervalo de muestreo inicial" inicializa el tamaño de la malla.

2. Defina la malla que se utilizará para la evaluación de restricciones

La siguiente sección de código crea una malla (ahora en la velocidad y la dirección del viento) utilizando una construcción similar a la utilizada en el problema inicial.

3. Calcule las restricciones sobre la malla

El resto del código calcula la concentración de SO2 en cada punto de la malla de velocidad/dirección del viento. Estas restricciones se devuelven a partir de la función de restricción anterior.fseminf

Ahora podemos llamar para resolver el problema de altura de la pila teniendo en cuenta la incertidumbre en los factores ambientales.fseminf

[hsopt2, sumh2, exitflag2] = fseminf(@(h)sum(h), h0, 1, ...     @uncertainAirPollutionCon, [], [], [], [], lb);
Local minimum possible. Constraints satisfied.  fseminf stopped because the predicted change in the objective function is less than the value of the function tolerance and constraints  are satisfied to within the value of the constraint tolerance. 
fprintf('\nMinimal computed cumulative height of chimney stacks with uncertainty: %7.2f m\n', sumh2);
Minimal computed cumulative height of chimney stacks with uncertainty: 3812.29 m 

Ahora podemos ver la diferencia entre la altura de pila acumulada mínima calculada para el problema con y sin incertidumbre de parámetro. Usted debe poder ver que la altura acumulada mínima aumenta cuando la incertidumbre se agrega al problema. Este aumento esperado de la altura permite que la concentración de SO2 permanezca por debajo del máximo legislado para todos los pares de velocidad/dirección del viento en el rango especificado.

Podemos comprobar que la concentración de dióxido de azufre no exceda el límite sobre la región de interés a través de la inspección de una trama de dióxido de azufre. Para un punto dado (x, y), trazamos la concentración máxima de SO2 para la velocidad y dirección del viento en los rangos indicados. Tenga en cuenta que hemos ampliado en la esquina superior izquierda del plano X-Y.

titleStr = 'Optimal Sulfur Dioxide Concentration under Uncertainty'; thetaRange = 3.82:0.02:4.18; URange = 5:0.2:6.2; XRange = [-20000,-15000]; YRange = [15000,20000]; plotSulfurDioxideUncertain(hsopt2, thetaRange, URange, XRange, YRange, titleStr);

Finalmente trazamos las pilas de chimeneas a su altura óptima cuando hay incertidumbre en la definición del problema.

plotChimneyStacks(hsopt2, 'Chimney Stack Optimal Height under Uncertainty');

Hay muchas opciones disponibles para el algoritmo de programación semi-infinito,.fseminf Consulte la guía del usuario de Optimization Toolbox™ para obtener más información, en el capítulo uso de Toolbox Solvers de optimización, en optimización no lineal restringida: formulación de problemas de fseminf y algoritmo.