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.

Configurar un programa lineal, basado en Solver

Convierta un problema en forma de solucionador

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.

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

Descripción del modelo

El video sugiere que una manera de convertir un problema en forma matemática es:Modelado matemático con optimización, parte 1

  1. Obtenga una idea general del problema

  2. Identifique el objetivo (maximizando o minimizando algo)

  3. Identifique las variables (nombre)

  4. Identifique las restricciones

  5. Determine qué variables puede controlar

  6. Especifique todas las cantidades en notación matemática

  7. 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.2500P16250
I1192,000
C62,000
I1 - HE1132,000
I1 = LE1 + HE1 + C
1359.8 I1 = 1267.8 HE1 + 1251.4 LE1 + 192 C + 3413 P1
3000P29000
I2244,000
LE2142,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 + PP24,550
EP + PP12,000
MPS271,536
LPS100,623

Método de solución

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

Elija un 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 Toolboxlinproglinprog

minxfTx such that {Axb,Aeqx=beq,lbxub.(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 xb 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

  • lbxub 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.linprogEcuación 1

Combine variables en un vector

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

Escribir restricciones enlazadas

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 ≥ ≥.P12500
P23000
MPS271,536
LPS100,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.lb0

lb = zeros(size(variables)); lb([P1,P2,MPS,LPS]) = ...     [2500,3000,271536,100623];

Las variables con límites superiores son:

≤ ≤ ≤ ≤ ≤ ≤.P16250
P29000
I1192,000
I2244,000
C62,000
LE2142000

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];

Escribir restricciones de desigualdad lineales

Hay tres desigualdades lineales en las ecuaciones de:Descripción del modelo

≤ ≥ ≥.I1 - HE1132,000
EP + PP12,000
P1 + P2 + PP24,550

Con el fin de tener las ecuaciones en la forma A xb, 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 - HE1132,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;

Escribir restricciones de igualdad lineales

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.Aeqbeq 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];

Escriba el objetivo

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:fx

f = zeros(size(variables)); f([HPS PP EP]) = [0.002614 0.0239 0.009825];

Resuelve el problema con linprog

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

Examine la solución

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.BF1BF2LE10

  • es, su límite superior.I2244,000

  • Los componentes distintos de cero del vector sef

    • HPS380,328.74

    • PP11,239.29

    • EP760.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

Bibliografía

[1] Edgar, Thomas F., and David M. Himmelblau. Optimization of Chemical Processes. McGraw-Hill, New York, 1988.

Temas relacionados