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.

Fundamentos de programación lineal de enteros mixtos: basado en Solver

Este ejemplo muestra cómo resolver un programa lineal de enteros mixtos. El ejemplo no es complejo, pero muestra los pasos típicos en la formulación de un problema en la sintaxis para.intlinprog

Para conocer el enfoque basado en problemas de este problema, consulte.Fundamentos de programación lineal de enteros mixtos: basado en problemas

Descripción del problema

Usted quiere mezclar aceros con diversas composiciones químicas para obtener 25 toneladas de acero con una composición química específica. El resultado debe tener 5% de carbono y 5% de molibdeno en peso, lo que significa 25 toneladas * 5% = 1,25 toneladas de carbono y 1,25 toneladas de molibdeno. El objetivo es minimizar el coste de la mezcla del acero.

Este problema se toma de Carl-Henrik Westerberg, Bengt Bjorklund, y Eskil Hultman, "."Una aplicación de programación de enteros mixtos en una fábrica de acero sueca Interfaces Febrero 1977 Vol. 7, no. 2 pp. 39 – 43, cuyo resumen se encuentra en http://interfaces.journal.informs.org/content/7/2/39.abstract.

Se pueden comprar cuatro lingotes de acero. Sólo uno de cada lingote está disponible.

LingotePeso en toneladas% Carbono% De molibdenoCost/ton
1553$350
2343$330
3454$310
4634$280

Tres grados de acero de aleación están disponibles para la compra, y un grado de chatarra de acero. Los aceros de aleación y chatarra se pueden comprar en cantidades fraccionadas.

Aleación% Carbono% De molibdenoCost/ton
186$500
277$450
368$400
Chatarra39$100

Para formular el problema, primero decida las variables de control. Tomar variable para significar que usted compra lingote, y que significa que usted no compra el lingote.x(1) = 11x(1) = 0 Del mismo modo, las variables a través son variables binarias que indican que usted compra lingotes a través.x(2)x(4)24

Las variables a través son las cantidades en toneladas de aleaciones,, y usted compra, y es la cantidad de chatarra de acero que usted compra.x(5)x(7)123x(8)

FormulaciónMATLAB

Formule el problema especificando las entradas para.intlinprog La sintaxis relevante es la siguiente.intlinprog

[x,fval] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)

Cree las entradas para desde First () hasta Last ().intlinprogfub

es el vector de los coeficientes de coste.f Los coeficientes que representan los costos de los lingotes son los pesos de lingote de los tiempos de su costo por tonelada.

f = [350*5,330*3,310*4,280*6,500,450,400,100];

Las variables de enteros son las primeras cuatro.

intcon = 1:4;

Sugerencia

Para especificar variables binarias, establezca las variables en números enteros y déles un límite inferior y un límite superior de.intcon01

No hay restricciones de desigualdad lineales, por lo que son matrices vacías ().Ab[]

Hay tres restricciones de igualdad. La primera es que el peso total es de 25 toneladas.

.5*x(1) + 3*x(2) + 4*x(3) + 6*x(4) + x(5) + x(6) + x(7) + x(8) = 25

La segunda limitación es que el peso del carbono es del 5% de 25 toneladas, o 1,25 toneladas.

5*0.05*x(1) + 3*0.04*x(2) + 4*0.05*x(3) + 6*0.03*x(4)
+ 0.08*x(5) + 0.07*x(6) + 0.06*x(7) + 0.03*x(8) = 1.25
.

La tercera restricción es que el peso de molibdeno es 1,25 toneladas.

5*0.03*x(1) + 3*0.03*x(2) + 4*0.04*x(3) + 6*0.04*x(4)
+ 0.06*x(5) + 0.07*x(6) + 0.08*x(7) + 0.09*x(8) = 1.25
.

En forma de matriz, dondeAeq*x = beq

Aeq = [5,3,4,6,1,1,1,1;     5*0.05,3*0.04,4*0.05,6*0.03,0.08,0.07,0.06,0.03;     5*0.03,3*0.03,4*0.04,6*0.04,0.06,0.07,0.08,0.09]; beq = [25;1.25;1.25];

Cada variable está delimitada por debajo de cero. Las variables de enteros están delimitadas por una.

lb = zeros(8,1); ub = ones(8,1); ub(5:end) = Inf; % No upper bound on noninteger variables

Resolver el problema

Ahora que tiene todas las entradas, llame al solucionador.

[x,fval] = intlinprog(f,intcon,[],[],Aeq,beq,lb,ub);

Vea la solución.

x,fval
x =      1.0000     1.0000          0     1.0000     7.2500          0     0.2500     3.5000   fval =     8.4950e+03

La compra óptima cuesta $8.495. Comprar lingotes,, y, pero no, y comprar 7,25 toneladas de aleación, 0,25 tonelada de aleación, y 3,5 toneladas de chatarra de acero.124313

Establecer para ver el efecto de resolver el problema sin restricciones de enteros.intcon = [] La solución es diferente, y no es sensata, porque no se puede comprar una fracción de lingote.