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 problemas

Este ejemplo muestra cómo resolver un programa lineal de enteros mixtos. El ejemplo no es complejo, pero muestra pasos típicos en la formulación de un problema para el enfoque basado en problemas. Para ver un vídeo que muestra este ejemplo, consulte.Resuelva un problema de programación lineal de enteros mixtos mediante el modelado de optimización

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

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

Formular un problema

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

Las variables a través son las cantidades en toneladas de aleaciones, y que usted compra. es la cantidad en toneladas de chatarra de acero que usted compra.alloys(1)alloys(3)123scrap

Cree el problema de optimización y las variables.

steelprob = optimproblem; ingots = optimvar('ingots',4,'Type','integer','LowerBound',0,'UpperBound',1); alloys = optimvar('alloys',3,'LowerBound',0); scrap = optimvar('scrap','LowerBound',0);

Cree expresiones para los costes asociados a las variables.

weightIngots = [5,3,4,6]; costIngots = weightIngots.*[350,330,310,280]; costAlloys = [500,450,400]; costScrap = 100; cost = costIngots*ingots + costAlloys*alloys + costScrap*scrap;

Incluya el costo como la función objetiva en el problema.

steelprob.Objective = cost;

Hay tres restricciones de igualdad. La primera restricción es que el peso total es de 25 toneladas. Calcule el peso del acero.

totalWeight = weightIngots*ingots + sum(alloys) + scrap;

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

carbonIngots = [5,4,5,3]/100; carbonAlloys = [8,7,6]/100; carbonScrap = 3/100; totalCarbon = (weightIngots.*carbonIngots)*ingots + carbonAlloys*alloys + carbonScrap*scrap;

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

molybIngots = [3,3,4,4]/100; molybAlloys = [6,7,8]/100; molybScrap = 9/100; totalMolyb = (weightIngots.*molybIngots)*ingots + molybAlloys*alloys + molybScrap*scrap;

Incluya las restricciones en el problema.

steelprob.Constraints.conswt = totalWeight == 25; steelprob.Constraints.conscarb = totalCarbon == 1.25; steelprob.Constraints.consmolyb = totalMolyb == 1.25;

Resuelve el problema

Ahora que tiene todas las entradas, llame al solucionador.

[sol,fval] = solve(steelprob);
LP:                Optimal objective value is 8125.600000.                                            Cut Generation:    Applied 3 mir cuts.                                                                                  Lower bound is 8495.000000.                                                                          Relative gap is 0.00%.                                                             Optimal solution found.  Intlinprog stopped at the root node because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 0 (the default value). The intcon variables are integer within tolerance, options.IntegerTolerance = 1e-05 (the default value).

Vea la solución.

sol.ingots sol.alloys sol.scrap fval
ans =       1      1      0      1   ans =      7.2500          0     0.2500   ans =      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

Temas relacionados