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.
En este ejemplo se muestra cómo convertir un problema de forma matemática en sintaxis del solucionador mediante el enfoque basado en Solver.Optimization Toolbox™ Si bien el problema es un programa lineal, las técnicas se aplican a todos los solucionadores.
Las variables y expresiones en el problema representan un modelo de operación de una planta química, de un ejemplo en Edgar y Himmelblau.[1] Hay dos videos que describen el problema.
muestra el problema en forma pictórica.Modelado matemático con optimización, parte 1 Muestra cómo generar las expresiones matemáticas de la imagen.Descripción del modelo
describe cómo convertir estas expresiones matemáticas en sintaxis del solucionador.Modelado de optimización, parte 2: convertir a formulario de SolverOptimization Toolbox Este video muestra cómo resolver el problema, y cómo interpretar los resultados.
El resto de este ejemplo se refiere únicamente a la transformación del problema en la sintaxis del solucionador. El ejemplo sigue de cerca el vídeo.Modelado de optimización, parte 2: convertir a formulario de Solver La principal diferencia entre el vídeo y el ejemplo es que este ejemplo muestra cómo utilizar variables con nombre o variables de índice, que son similares a las claves hash. Esta diferencia está en.Combine variables en un vector
El video sugiere que una manera de convertir un problema en forma matemática es:Modelado matemático con optimización, parte 1
Obtenga una idea general del problema
Identifique el objetivo (maximizando o minimizando algo)
Identifique las variables (nombre)
Identifique las restricciones
Determine qué variables puede controlar
Especifique todas las cantidades en notación matemática
Compruebe el modelo de integridad y corrección
Para el significado de las variables en esta sección, vea el video.Modelado matemático con optimización, parte 1
El problema de optimización es minimizar la función objetiva, sujeto a todas las otras expresiones como restricciones.
La función objetiva es:
.0.002614 HPS + 0.0239 PP + 0.009825 EP
Las restricciones son:
≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≥ ≥ ≥ ≥ = Todas las variables son positivas.2500
P1
6250
I1
192,000
C
62,000
I1 - HE1
132,000
I1 = LE1 + HE1 + C
1359.8 I1 = 1267.8 HE1 + 1251.4 LE1 + 192 C + 3413 P1
3000
P2
9000
I2
244,000
LE2
142,000
I2 = LE2 + HE2
1359.8 I2 = 1267.8 HE2 + 1251.4 LE2 + 3413 P2
HPS = I1 + I2 + BF1
HPS = C + MPS + LPS
LPS = LE1 + LE2 + BF2
MPS = HE1 + HE2 + BF1 - BF2
P1 + P2 + PP
24,550
EP + PP
12,000
MPS
271,536
LPS
100,623
Para resolver el problema de optimización, tome las siguientes medidas.
Los pasos también se muestran en el video.Modelado de optimización, parte 2: convertir a formulario de Solver
Para encontrar el solucionador adecuado para este problema, consulte el.Tabla de decisión de optimización La tabla le pide que Categorice su problema por tipo de función objetiva y tipos de restricciones. Para este problema, la función objetiva es lineal y las restricciones son lineales. La tabla de decisiones recomienda utilizar el solucionador.linprog
Como se ve en o en la página de referencia de función, el solucionador resuelve problemas de la formaProblemas controlados por FunctionsOptimization Toolboxlinprog
linprog
(1) |
fTx significa un vector de fila de constantes multiplicando un vector de columna de variables.fx En otras palabras,
FTX = (1) (1) + (2) (2) +... + () (),fxfxfnxn
donde está la longitud de.nf
A x ≤ b representa desigualdades lineales. es un-por-matriz, donde es el número de desigualdades y es el número de variables (tamaño de). es un vector de longitud.Aknknxbk Para obtener más información, consulte.Restricciones de desigualdad lineales
Aeq x = beq representa ecualidades lineales. es un-por-matriz, donde es el número de ecualidades y es el número de variables (tamaño de). es un vector de longitud.Aeqmnmnxbeqm Para obtener más información, consulte.Restricciones de igualdad lineales
lb ≤ x ≤ ub significa que cada elemento en el vector debe ser mayor que el elemento correspondiente de, y debe ser menor que el elemento correspondiente de.xlbub Para obtener más información, consulte.Restricciones enlazadas
La sintaxis del solucionador, como se muestra en su página de referencia de función, eslinprog
[x fval] = linprog(f,A,b,Aeq,beq,lb,ub);
Las entradas del solucionador son las matrices y los vectores.linprog
Ecuación 1
Hay 16 variables en las ecuaciones de.Descripción del modelo Coloque estas variables en un vector. El nombre del vector de variables está en.xEcuación 1 Decida un pedido y construya los componentes de fuera de las variables.x
El código siguiente construye el vector utilizando una matriz de celdas de nombres para las variables.
variables = {'I1','I2','HE1','HE2','LE1','LE2','C','BF1',... 'BF2','HPS','MPS','LPS','P1','P2','PP','EP'}; N = length(variables); % create variables for indexing for v = 1:N eval([variables{v},' = ', num2str(v),';']); end
La ejecución de estos comandos crea las siguientes variables con nombre en el área de trabajo:
Estas variables nombradas representan números de índice para los componentes de.x No tiene que crear variables con nombre. El video muestra cómo resolver el problema simplemente usando los números de índice de los componentes de.Modelado de optimización, parte 2: convertir a formulario de Solverx
Hay cuatro variables con límites inferiores, y seis con límites superiores en las ecuaciones de.Descripción del modelo Los límites inferiores:
≥ ≥ a ≥ ≥.P1
2500
P2
3000
MPS
271,536
LPS
100,623
Además, todas las variables son positivas, lo que significa que tienen un límite inferior de cero.
Cree el vector de límite inferior como un vector de y, a continuación, agregue los otros cuatro límites inferiores.lb
0
lb = zeros(size(variables)); lb([P1,P2,MPS,LPS]) = ... [2500,3000,271536,100623];
Las variables con límites superiores son:
≤ ≤ ≤ ≤ ≤ ≤.P1
6250
P2
9000
I1
192,000
I2
244,000
C
62,000
LE2
142000
Crear el vector de límite superior como un vector de, a continuación, agregue los seis límites superiores.Inf
ub = Inf(size(variables)); ub([P1,P2,I1,I2,C,LE2]) = ... [6250,9000,192000,244000,62000,142000];
Hay tres desigualdades lineales en las ecuaciones de:Descripción del modelo
≤ ≥ ≥.I1 - HE1
132,000
EP + PP
12,000
P1 + P2 + PP
24,550
Con el fin de tener las ecuaciones en la forma A x≤b, ponga todas las variables en el lado izquierdo de la desigualdad. Todas estas ecuaciones ya tienen esa forma. Asegúrese de que cada desigualdad esté en forma "menor que" multiplicando por – 1 cuando proceda:
≤ ≤ ≤.I1 - HE1
132,000
-EP - PP
-12,000
-P1 - P2 - PP
-24,550
En su espacio de trabajo, cree la matriz como una matriz de 3 por 16 cero, que corresponde a 3 desigualdades lineales en 16 variables.MATLAB®A
Cree el vector con tres componentes.b
A = zeros(3,16); A(1,I1) = 1; A(1,HE1) = -1; b(1) = 132000; A(2,EP) = -1; A(2,PP) = -1; b(2) = -12000; A(3,[P1,P2,PP]) = [-1,-1,-1]; b(3) = -24550;
Hay ocho ecuaciones lineales en las ecuaciones de:Descripción del modelo
.I2 = LE2 + HE2
LPS = LE1 + LE2 + BF2
HPS = I1 + I2 + BF1
HPS = C + MPS + LPS
I1 = LE1 + HE1 + C
MPS = HE1 + HE2 + BF1 - BF2
1359.8 I1 = 1267.8 HE1 + 1251.4 LE1 + 192 C + 3413 P1
1359.8 I2 = 1267.8 HE2 + 1251.4 LE2 + 3413 P2
Con el fin de tener las ecuaciones en la forma Aeq x=beq, coloque todas las variables en un lado de la ecuación. Las ecuaciones se convierten en:
.LE2 + HE2 - I2 = 0
LE1 + LE2 + BF2 - LPS = 0
I1 + I2 + BF1 - HPS = 0
C + MPS + LPS - HPS = 0
LE1 + HE1 + C - I1 = 0
HE1 + HE2 + BF1 - BF2 - MPS = 0
1267.8 HE1 + 1251.4 LE1 + 192 C + 3413 P1 - 1359.8 I1 = 0
1267.8 HE2 + 1251.4 LE2 + 3413 P2 - 1359.8 I2 = 0
Ahora escribe la matriz y el vector correspondientes a estas ecuaciones.Aeq
beq
En su espacio de trabajo, cree la matriz como una matriz de 8 por 16 cero, que corresponde a 8 ecuaciones lineales en 16 variables.MATLABAeq
Crear el vector con ocho componentes, todo cero.beq
Aeq = zeros(8,16); beq = zeros(8,1); Aeq(1,[LE2,HE2,I2]) = [1,1,-1]; Aeq(2,[LE1,LE2,BF2,LPS]) = [1,1,1,-1]; Aeq(3,[I1,I2,BF1,HPS]) = [1,1,1,-1]; Aeq(4,[C,MPS,LPS,HPS]) = [1,1,1,-1]; Aeq(5,[LE1,HE1,C,I1]) = [1,1,1,-1]; Aeq(6,[HE1,HE2,BF1,BF2,MPS]) = [1,1,1,-1,-1]; Aeq(7,[HE1,LE1,C,P1,I1]) = [1267.8,1251.4,192,3413,-1359.8]; Aeq(8,[HE2,LE2,P2,I2]) = [1267.8,1251.4,3413,-1359.8];
La función objetiva es
FTX = .0.002614 HPS + 0.0239 PP + 0.009825 EP
Escriba esta expresión como un vector de multiplicadores del vector:f
x
f = zeros(size(variables)); f([HPS PP EP]) = [0.002614 0.0239 0.009825];
Ahora tiene entradas requeridas por el solucionador.linprog
Llame al solucionador e imprima las salidas con formato:
options = optimoptions('linprog','Algorithm','dual-simplex'); [x fval] = linprog(f,A,b,Aeq,beq,lb,ub,options); for d = 1:N fprintf('%12.2f \t%s\n',x(d),variables{d}) end fval
El resultado:
Optimal solution found. 136328.74 I1 244000.00 I2 128159.00 HE1 143377.00 HE2 0.00 LE1 100623.00 LE2 8169.74 C 0.00 BF1 0.00 BF2 380328.74 HPS 271536.00 MPS 100623.00 LPS 6250.00 P1 7060.71 P2 11239.29 PP 760.71 EP fval = 1.2703e+03
La salida da el valor más pequeño de la función objetiva en cualquier punto factible.fval
El vector de solución es el punto donde la función objetiva tiene el valor más pequeño.x
Observe que:
, y son, sus límites inferiores.BF1
BF2
LE1
0
es, su límite superior.I2
244,000
Los componentes distintos de cero del vector sef
—HPS
380,328.74
—PP
11,239.29
—EP
760.71
El video da interpretaciones de estas características en términos del problema original.Modelado de optimización, parte 2: convertir a formulario de Solver
[1] Edgar, Thomas F., and David M. Himmelblau. Optimization of Chemical Processes. McGraw-Hill, New York, 1988.