capitulo 3 método de generación de...

13
Capitulo 3 Método de Generación de Columnas El método de generación de columnas, es muy útil en problemas con un gran número de variables pero con un relativamente pequeño número de restricciones (Hunsaker, 2004). En 1958 Ford y Fulkenson sugirieron por primera vez lidiar implícitamente solo con algunas variables para problemas de flujo en redes, en 1960, Dantzig y Wolfe desarrollaron una estrategia para extender las columnas de un problema lineal lo necesario para obtener una solución. Esta técnica fue implementada por primera vez por Gilmore y Gomory en 1961 para resolver el problema “cutting stock(Desrosiers & Lübbecke, 2005). La técnica del método de generación de columnas consiste en resolver problemas de programación lineal donde las columnas (variables del problema) no son conocidas o es impráctico generarlas explícitamente, generalmente en problemas que tienen un número exponencial de variables. Para resolver estos problemas se empieza con un problema maestro, el cual es una relajación lineal del problema original y debe de tener una estructura relativamente simple (se genera solo un número pequeño de columnas, necesario para obtener una solución factible para el problema relajado). Después hay un sub-problema (al que se le denomina sub-problema de pricing) que permite identificar columnas (variables) adicionales que no han sido incluidas en el problema maestro y que mejoren el valor de la función objetivo. Hoy en día, el método de generación de columnas es ampliamente usado en una gran cantidad de problemas, como por ejemplo: problemas de rutas de vehículos, algunos problemas del agente viajero, programación de horarios para equipos de trabajo, etc. (Desrosiers & Lübbecke, 2005). En el siguiente capítulo se hablará del uso del método de generación de columnas para resolver el problema de corte (“cutting stock”). 3.1 Problema de corte (Cutting Stock) Como vimos anteriormente, el problema cutting stockconsiste en encontrar el mínimo número de rollos (o unidades de materia prima) que se necesitan para obtener un conjunto de artículos de diferentes tamaños. Cada uno de estos artículos tiene una demanda específica la cual corresponde al número mínimo de veces que se va a cortar de las unidades de materia prima (de Carvalho, Alves, & Clautiaux, 2008). Existen diferentes tipos de problemas de corte (cutting stock), como el unidimensional y el bidimensional. El bidimensional consiste en decidir de qué manera se va a cortar la materia prima cuando se tienen dos dimensiones a considerar en los productos (ancho y largo). Un ejemplo de este tipo de problemas se presenta en la industria textil, al cortar la tela para fabricar diferentes tipos de prendas. Este trabajo se va a enfocar en los problemas de corte unidimensionales, los cuales, al igual que en el mencionado anteriormente, consiste en decidir de qué manera

Upload: others

Post on 14-Sep-2019

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Capitulo 3 Método de Generación de Columnascatarina.udlap.mx/u_dl_a/tales/documentos/lmnf/diaz_s_s/capitulo3.pdf · con un problema maestro, el cual es una relajación lineal del

Capitulo 3 Método de Generación de Columnas

El método de generación de columnas, es muy útil en problemas con un gran número de

variables pero con un relativamente pequeño número de restricciones (Hunsaker, 2004).

En 1958 Ford y Fulkenson sugirieron por primera vez lidiar implícitamente solo con

algunas variables para problemas de flujo en redes, en 1960, Dantzig y Wolfe

desarrollaron una estrategia para extender las columnas de un problema lineal lo

necesario para obtener una solución. Esta técnica fue implementada por primera vez por

Gilmore y Gomory en 1961 para resolver el problema “cutting stock” (Desrosiers &

Lübbecke, 2005).

La técnica del método de generación de columnas consiste en resolver

problemas de programación lineal donde las columnas (variables del problema) no son

conocidas o es impráctico generarlas explícitamente, generalmente en problemas que

tienen un número exponencial de variables. Para resolver estos problemas se empieza

con un problema maestro, el cual es una relajación lineal del problema original y debe

de tener una estructura relativamente simple (se genera solo un número pequeño de

columnas, necesario para obtener una solución factible para el problema relajado).

Después hay un sub-problema (al que se le denomina sub-problema de pricing) que

permite identificar columnas (variables) adicionales que no han sido incluidas en el

problema maestro y que mejoren el valor de la función objetivo.

Hoy en día, el método de generación de columnas es ampliamente usado en una

gran cantidad de problemas, como por ejemplo: problemas de rutas de vehículos,

algunos problemas del agente viajero, programación de horarios para equipos de

trabajo, etc. (Desrosiers & Lübbecke, 2005).

En el siguiente capítulo se hablará del uso del método de generación de

columnas para resolver el problema de corte (“cutting stock”).

3.1 Problema de corte (“Cutting Stock”)

Como vimos anteriormente, el problema “cutting stock” consiste en encontrar el

mínimo número de rollos (o unidades de materia prima) que se necesitan para obtener

un conjunto de artículos de diferentes tamaños. Cada uno de estos artículos tiene una

demanda específica la cual corresponde al número mínimo de veces que se va a cortar

de las unidades de materia prima (de Carvalho, Alves, & Clautiaux, 2008).

Existen diferentes tipos de problemas de corte (“cutting stock”), como el

unidimensional y el bidimensional. El bidimensional consiste en decidir de qué manera

se va a cortar la materia prima cuando se tienen dos dimensiones a considerar en los

productos (ancho y largo). Un ejemplo de este tipo de problemas se presenta en la

industria textil, al cortar la tela para fabricar diferentes tipos de prendas.

Este trabajo se va a enfocar en los problemas de corte unidimensionales, los

cuales, al igual que en el mencionado anteriormente, consiste en decidir de qué manera

Page 2: Capitulo 3 Método de Generación de Columnascatarina.udlap.mx/u_dl_a/tales/documentos/lmnf/diaz_s_s/capitulo3.pdf · con un problema maestro, el cual es una relajación lineal del

se va a cortar la materia prima, pero en los productos a fabricar solo se considera una

dimensión (ancho). Un ejemplo de este tipo de problemas se presenta en la industria del

papel, entre otras, donde de un rollo de ancho 𝑊, se extraen diferentes productos de

papel con ancho 𝑡.

Como vimos en la ¡Error! No se encuentra el origen de la referencia. para una

instancia pequeña del problema se generan una gran cantidad de patrones de corte, los

cuales crecen exponencialmente a medida que crece el número de anchos. Para resolver

este problema se utiliza el método de generación de columnas.

3.2 Algoritmo del Método de Generación de columnas

Para ilustrar el método se utilizará el problema expuesto en la sección 1, tomado del

libro de Chvátal, 1946. Donde los rollos de materia prima tienen un ancho de 𝑊 =

100 𝑚𝑚, y el resumen de pedidos es el siguiente:

𝑏𝑖 𝑡𝑖

1 97 45

2 610 36

3 395 31

4 211 14

Como vimos en la sección 1 lo que se busca es

Minimizar 𝑧 = 𝑥𝑗

𝑗∈𝐽

Sujeto a: 𝑎𝑖𝑗 𝑥𝑗

𝑗∈𝐽

= 𝑏𝑖 ⋎ 𝑖 ∈ 𝐼

𝑥𝑗 ≥ 0 ⋎ 𝑗 ∈ 𝐽

En lugar de resolver el problema entero ser resuelve la relajación lineal para

obtener una cota inferior para la solución óptima del problema. Por lo tanto se relajan

las restricciones de integridad. En este ejemplo el método de generación de columnas

puede ser inicializado por el siguiente problema maestro:

2 0 0 00 2 0 00 0 3 00 0 0 7

97610395211

𝑦 𝐛 =

48.5305

131.6630.14

En general, siempre se puede inicializar con 𝑚 patrones de corte en donde el

𝑖 − ésimo patrón solo genere productos de ancho 𝑡𝑖 .

Una vez definido, el problema maestro, se empieza la primera iteración.

Paso 1.

Page 3: Capitulo 3 Método de Generación de Columnascatarina.udlap.mx/u_dl_a/tales/documentos/lmnf/diaz_s_s/capitulo3.pdf · con un problema maestro, el cual es una relajación lineal del

Se resuelve el sistema 𝐰 = 𝐜𝐁𝐁−𝟏, para obtener las variables duales del

problema (Chvátal, 1946). En el problema de corte “cutting stock” 𝐜𝐁 es igual a un

vector cuyas componentes son todas 1.

𝐰 = 1 1 1 1

1/2 0 0 00 1/2 0 00 0 1/3 00 0 0 1/7

= 1/2 1/2 1/3 1/7

Paso 2.

Ahora se buscan números enteros no negativos, 𝑎1, 𝑎2, 𝑎3, 𝑎4, que serán la

columna que entra a nuestra matriz básica, de tal manera que:

𝑤𝑖𝑎𝑖 > 1

4

𝑖=1

𝑡𝑖𝑎𝑖 ≤ 𝑊

4

𝑖=1

𝑎𝑖 ∈ ℤ ∀𝑖 = 1, … ,4

Para identificar si existe un patrón de corte que pueda mejorar el valor de la

función objetivo del problema maestro se resuelve el siguiente problema de la mochila

donde lo que se busca es:

Maximizar 𝑧 = 𝑤𝑖𝑎𝑖

4

𝑖=1

Sujeto a: 𝑡𝑖𝑎𝑖

4

𝑖=1

≤ 𝑊

𝑎𝑖 ∈ ℤ ∀𝑖 = 1, … ,4

Si el valor de la función objetivo es mayor a 1, se continúa con el paso 3, si no se

da por terminado el algoritmo. Al resolver el problema:

Maximizar 𝑧 =1

2𝑎1 +

1

2𝑎2 +

1

3𝑎3 +

1

7𝑎4

Sujeto a: 45𝑎1 + 36𝑎2 + 31𝑎3 + 14𝑎4 ≤ 100

𝑎1 , 𝑎2 , 𝑎3 , 𝑎4 ∈ ℤ

Se obtiene la solución

𝐚𝟓 =

0202

𝑦 𝑧 = 1.2857

Page 4: Capitulo 3 Método de Generación de Columnascatarina.udlap.mx/u_dl_a/tales/documentos/lmnf/diaz_s_s/capitulo3.pdf · con un problema maestro, el cual es una relajación lineal del

Paso 3.

Se resuelve el sistema𝐲𝟓 = 𝐁−𝟏𝐚𝟓, por lo tanto.

𝐲𝟓 =

1/2 0 0 00 1/2 0 00 0 1/3 00 0 0 1/7

0202

=

010

2/7

Paso 4.

Obtenemos 𝑏 𝑟

𝑦𝑟𝑘, para determinar que columna va a salir de la base para ser

intercambiada por nuestra columna 𝐚𝟓 (Chvátal, 1946) donde el índice 𝑟 se determina

utilizando el criterio de la razón mínima que se muestra a continuación,

𝑏 𝑟

𝑦𝑟𝑘= mínimo

1≤𝑖≤𝑚

𝑏 𝑖

𝑦𝑖𝑘: 𝑦𝑖𝑘 > 0 = 𝑥𝑘

Por lo tanto:

𝑏 2

𝑦2𝑘=

305

1= 305

𝑏 4

𝑦4𝑘=

30.14

27

= 105.5

Paso 5.

Se modifica la base 𝐁 en donde 𝐚𝟓 reemplaza a 𝐚𝟒:

𝑩 =

2 0 0 00 2 0 20 0 3 00 0 0 2

𝑦 𝑏 =

48.5

305 −𝑏 4

𝑦4𝑘

131.66𝑏 4

𝑦4𝑘

=

48.5199.5

131.66105.5

Comenzamos la segunda iteración:

Paso 1.

𝐰 = 1 1 1 1

1/2 0 0 00 1/2 0 −1/20 0 1/3 00 0 0 1/2

= 1/2 1/2 1/3 0

Paso 2.

Page 5: Capitulo 3 Método de Generación de Columnascatarina.udlap.mx/u_dl_a/tales/documentos/lmnf/diaz_s_s/capitulo3.pdf · con un problema maestro, el cual es una relajación lineal del

Maximizar 𝑧 =1

2𝑎1 +

1

2𝑎2 +

1

3𝑎3 + 0𝑎4

Sujeto a: 45𝑎1 + 36𝑎2 + 31𝑎3 + 14𝑎4 ≤ 100

𝑎1 , 𝑎2 , 𝑎3 , 𝑎4 ∈ ℤ

𝐚𝟔 =

0120

𝑦 𝑧 = 1.166

Paso 3.

𝐲𝟔 =

1/2 0 0 00 1/2 0 −1/20 0 1/3 00 0 0 1/2

0120

=

01/22/3

0

Paso 4.

𝑏 2

𝑦2𝑘=

199.5

12

= 399

𝑏 3

𝑦3𝑘=

131.66

23

= 197.5

Paso 5.

Se modifica la base 𝐁 en donde 𝐚𝟔 reemplaza a 𝐚𝟑 (Chvátal, 1946):

𝑩 =

2 0 0 00 2 1 20 0 2 00 0 0 2

𝑦 𝐛 =

48.5

199.5 −1

2

𝑏 3

𝑦3𝑘

𝑏 3

𝑦3𝑘

105.5

=

48.5100.75197.5105.5

Empezamos la tercera iteración.

Paso 1.

𝐰 = 1 1 1 1

1/2 0 0 00 1/2 −1/4 −1/20 0 1/2 00 0 0 1/2

= 1/2 1/2 1/4 0

Paso 2.

Page 6: Capitulo 3 Método de Generación de Columnascatarina.udlap.mx/u_dl_a/tales/documentos/lmnf/diaz_s_s/capitulo3.pdf · con un problema maestro, el cual es una relajación lineal del

Maximizar 𝑧 =1

2𝑎1 +

1

2𝑎2 +

1

4𝑎3 + 0𝑎4

Sujeto a: 45𝑎1 + 36𝑎2 + 31𝑎3 + 14𝑎4 ≤ 100

𝑎1 , 𝑎2 , 𝑎3 , 𝑎4 ∈ ℤ

𝐚𝟕 =

2000

𝑦 𝑧 = 1

Debido a que z no es mayor a 1, se detiene el proceso y agregamos la restricción

de que las variables de decisión, 𝑥𝑗 para 𝑗 = 1, ⋯ ,6 debe tomar valores entero, por lo

tanto, se resuelve el siguiente problema de programación entera:

Minimizar 𝑧 = 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 + 𝑥5 + 𝑥6

Sujeto a: 2𝑥1 + 0𝑥2 + 0𝑥3 + 0𝑥4 + 0𝑥5 + 0𝑥6 ≥ 97

0𝑥1 + 2𝑥2 + 0𝑥3 + 0𝑥4 + 1𝑥5 + 2𝑥6 ≥ 610

0𝑥1 + 0𝑥2 + 3𝑥3 + 0𝑥4 + 2𝑥5 + 𝑥6 ≥ 395

0𝑥1 + 0𝑥2 + 0𝑥3 + 7𝑥4 + 0𝑥5 + 2𝑥6 ≥ 211

𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 , 𝑥5 , 𝑥6 ≥ 0

𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 , 𝑥5 , 𝑥6 ∈ ℤ

con solución óptima,

𝐱 =

49100

00

198106

𝑦 𝑧 = 453

3.2.1 Heurísticas para mejorar el método de generación de columnas.

Como podemos ver en el algoritmo de generación de columnas explicado en la sección

3.2, se puede mejorar observando lo siguiente:

Se inicializa con una matriz con 𝑚 patrones de corte en donde el 𝑖 − ésimo

patrón solo genera productos de ancho 𝑡𝑖 . Esto nos genera una matriz básica que

contiene patrones de corte que incluyen un solo ancho y que por lo tanto se

puede generar mucho desperdicio. Es conveniente inicializar con una matriz, que

incluya patrones de corte que generen menor desperdicio.

En cada una de las iteraciones se resuelve un problema de la mochila para

identificar patrones de corte adicionales, el problema de la mochila es “NP-hard”

y obtener la solución óptima puede requerir de mayor esfuerzo computacional a

medida que va creciendo el número de anchos. El objetivo es resolver este

problema usando una heurística, que permita encontrar patrones de corte

factibles con mayor eficiencia. Cuando la heurística no encuentre patrones de

corte que mejoren el valor de la relajación lineal, entonces se deberá resolver el

problema de manera exacta.

Page 7: Capitulo 3 Método de Generación de Columnascatarina.udlap.mx/u_dl_a/tales/documentos/lmnf/diaz_s_s/capitulo3.pdf · con un problema maestro, el cual es una relajación lineal del

A continuación se explicarán cada uno de los procedimientos heurísticos

utilizado para mejorar la eficiencia del procedimiento del método de generación de

columnas.

3.2.1.1 Encontrando una buena solución inicial.

Sea 𝑊, el ancho de los rollos de materia prima y 𝑏𝑖 la demanda de anchos 𝑡𝑖 para

𝑖 = 1, … , 𝑚. Lo primero que se debe de hacer es reordenar los productos a fabricar de

acuerdo a sus anchos, donde:

𝑡1 ≥ 𝑡2 ≥ ⋯ ≥ 𝑡𝑚 .

De esta manera al definir las componentes de 𝐁, aseguramos considerar primero

patrones de corte que incluyan a los productos con un mayor ancho dejando el sobrante

para los productos con menor ancho.

El siguiente procedimiento, construirá la matriz inicial 𝐁 y la solución inicial 𝐱,

en 𝑚 iteraciones. Sea 𝑗 el número de iteración, al principio de la iteración 𝑗, vamos a

tener un conjunto 𝑄 el cual contiene exactamente 𝑚 − 𝑗 + 1 de los índices del conjunto

{1, … , 𝑚}; en donde para cada 𝑖 ∈ 𝑄, se tiene un número no negativo 𝑏𝑖′ , el cual es el

residuo de la demanda para el producto con ancho 𝑡𝑖 (inicialmente, 𝑏𝑖′ = 𝑏𝑖 para todo

𝑖 ∈ 𝐼 y 𝑟 = 𝑊). En la iteración 𝑗 se construye recursivamente la columna 𝐚𝐣 =

𝑎1𝑗 , … , 𝑎𝑚𝑗 𝑇 de 𝐁 de la siguiente manera (Chvátal, 1946):

𝑎𝑖𝑗 =

0 𝑠𝑖 𝑖 ∉ 𝑄

𝑟 − 𝑡𝑘𝑎𝑖𝑘

𝑖−1

𝑘=1

𝑡𝑖 𝑠𝑖 𝑖 ∈ 𝑄

El procedimiento para realizarlo es el siguiente. La componente 𝑎𝑖𝑗

correspondiente a la 𝑗 − ésima columna de 𝐁, va a ser igual al menor cociente 𝑎𝑖𝑗 =

𝑏𝑖′

𝑡𝑖 para 𝑖 ∈ 𝑄 y 𝑎𝑖 > 0. De este modo, 𝑥𝑗 𝑎𝑗 ≤ 𝑏𝑖

′ para toda 𝑖 ∈ 𝑄 y 𝑥𝑗𝑎𝑘 = 𝑏𝑘′ , para

al menos una 𝑘 ∈ 𝑄. Una vez realizado esto, se borra el índice 𝑘 de 𝑄, se intercambia

cada 𝑏𝑖′ restante por 𝑏𝑖

′ − 𝑥𝑗𝑎𝑖 y se continua con la iteración (𝑗 + 1) (Chvátal, 1946).

Para ilustrar esto, se buscará una solución inicial para el problema resuelto en el

capítulo anterior.

Iteración 1.

Se encuentra:

𝑎11 = 100

45 = 2,

𝑎21 = 10

36 = 0,

Page 8: Capitulo 3 Método de Generación de Columnascatarina.udlap.mx/u_dl_a/tales/documentos/lmnf/diaz_s_s/capitulo3.pdf · con un problema maestro, el cual es una relajación lineal del

𝑎31 = 10

31 = 0,

𝑎41 = 10

14 = 0,

Ahora 𝑥1 =97

2= 48.5. Debido a que ya agregamos el producto con número de

índice igual a 1, se borra el índice de 𝑄 para no volverlo a considerar en las siguientes

iteraciones, y obtenemos que 𝑏2′ = 610, 𝑏3

′ = 395 𝑦 𝑏4′ = 211.

Iteración 2.

Debido a que ya agregamos una columna de la base que contiene al producto

con número de índice igual a 1, el valor de 𝑎12 es igual a cero, por lo tanto:

𝑎12 = 0,

𝑎22 = 100

36 = 2,

𝑎32 = 28

31 = 0,

𝑎42 = 28

14 = 2,

Ahora 𝑥2 = 𝑚𝑖𝑛 610

2,

211

2 = 105.5. Debido a que

𝑏4′

𝑎4 <

𝑏2′

𝑎2 , el producto

con índice 4 se borra de 𝑄 para no considerarlo en futuras iteraciones y se modifican

los valor de 𝑏𝑖′ para 𝑖 ∈ 𝑄, y obtenemos que 𝑏2

′ = 399 𝑦 𝑏3′ = 395.

Iteración 3.

Ahora en la base ya agregamos columnas que contiene a los productos cuyos

números de índice son 1 y 4 por lo que 𝑎13 = 0 𝑦 𝑎14 = 0.

𝑎13 = 0,

𝑎23 = 100

36 = 2,

𝑎33 = 28

31 = 0,

𝑎43 = 0,

Ahora 𝑥2 =399

2= 199.5. Se elimina el índice 2 del conjunto 𝑄, y obtenemos

que 𝑏3′ = 395.

Iteración 4.

Page 9: Capitulo 3 Método de Generación de Columnascatarina.udlap.mx/u_dl_a/tales/documentos/lmnf/diaz_s_s/capitulo3.pdf · con un problema maestro, el cual es una relajación lineal del

Ahora la base ya contiene una columna que incluye los productos con índices

1,2 y 4, y por tanto solo hace falta agregar a la base una columna que contenga el

producto con índice 3:

𝑎14 = 0,

𝑎24 = 0,

𝑎34 = 100

31 = 3,

𝑎44 = 0,

Ahora 𝑥4 =395

3= 131.67.

De esta manera hemos producido una solución inicial

𝐁 =

2 0 0 00 2 2 00 0 0 30 2 0 0

𝑦 𝐛 =

48.50105.50199.50131.67

Nótese (página 24) que esta matriz básica está solamente a una iteración de la

solución óptima.

3.2.1.2 Heurística para resolver el problema de la mochila (Martello & Toth, 1990).

El problema de la mochila que se nos presenta en cada una de las iteraciones es el

siguiente. Sea 𝐼 = 1, … , 𝑚 , y 𝑤𝑖 la ganancia de producto 𝑖 ∈ 𝐼, 𝑡𝑖 el ancho del

producto 𝑖 ∈ 𝐼, 𝑏𝑖 la cota superior del producto 𝑖 ∈ 𝐼 y 𝑊 el ancho del rollo de materia

prima, lo que se busca es seleccionar un número 𝑥𝑖 para 𝑖 ∈ 𝐼 de productos de tal

manera que:

Maximizar 𝑧 = 𝑤𝑖𝑎𝑖

𝑛

𝑖=1

Sujeto a: 𝑡𝑖𝑎𝑖

𝑛

𝑖=1

≤ 𝑊

0 ≤ 𝑎𝑖 ≤ 𝑏𝑖 , ∈ ℤ, 𝑖 ∈ 𝐼

Para ilustrar la heurística a utilizar se resolverá el problema de la mochila, de la

iteración uno de la sección 3.2. El primer paso es ordenar los anchos de tal manera que:

𝑤𝑖1

𝑡𝑖1

≥𝑤𝑖2

𝑡𝑖2

≥ ⋯ ≥𝑤𝑖𝑛

𝑡𝑖𝑛

Se utiliza dicho ordenamiento ya que los cocientes 𝑤 𝑖

𝑡𝑖 miden la contribución por

unidad de capacidad usada en la función objetivo. Por ejemplo si cada unidad de la

variable 𝑎𝑟 contribuye en 10 unidades al valor de la función objetivo y requiere de 2

Page 10: Capitulo 3 Método de Generación de Columnascatarina.udlap.mx/u_dl_a/tales/documentos/lmnf/diaz_s_s/capitulo3.pdf · con un problema maestro, el cual es una relajación lineal del

unidades de la capacidad de la mochila, y si cada unidad de la variable 𝑎𝑠, contribuye en

20 unidades al valor de la función objetivo pero ocupa 10 unidades de la capacidad de la

mochila, la contribución por unidad de capacidad del artículo 𝑟 es de 5 mientras que la

contribución por unidades de 𝑟 es de 2, y por lo tanto es más atractivo aumentar todo lo

que se pueda el valor de 𝑎𝑟 , ya que proporciona 5 unidades de beneficio por cada

unidad de capacidad utilizada. Debido a que la heurística va agregando los valores de

las variables de acuerdo al orden establecido anteriormente es preferible que el primer

valor que se agregue sea el que aporte un mayor beneficio a la función objetivo. Por lo

tanto, para el mismo ejemplo utilizado anteriormente el ordenamiento es como sigue:

12

36≥

12

45≥

13

31≥

17

14

Una vez reordenando los términos se inicializa con el siguiente algoritmo, el

cual fue obtenido de (Martello & Toth, 1990):

Procedimiento: Heurística para encontrar soluciones factibles al problema de la

mochila.

Entrada: 𝑛, 𝑊, 𝑤𝑗 , 𝑡𝑗 , 𝑏𝑗

Salida: 𝑧, 𝑎𝑗

Empezar:

𝑊 ≔ 𝑊;

𝑧: = 0;

𝑗 ≔ 1;

𝑏𝑗 =𝑊

𝑡𝑖

Para todo 𝑗: = 1 hasta 𝑛

Empieza

𝑎𝑗 ≔ min 𝑊

𝑡𝑗, 𝑏𝑗 ;

𝑊 : = 𝑊 − 𝑡𝑗 𝑎𝑗 ;

𝑧: = 𝑧 + 𝑤𝑗𝑎𝑗 ;

Si 𝑏𝑗𝑤𝑗 > 𝑏𝑗 𝑤𝑗 entonces𝑗 : = 𝑗

Fin;

Si 𝑏𝑗 𝑤𝑗 > 𝑧 entonces

Empieza

𝑧: = 𝑏𝑗 𝑤𝑗 ;

Para 𝑗: = 1 hasta 𝑛 has 𝑎𝑗 ≔ 0;

𝑎𝑗 ≔ 𝑏𝑗 ;

Fin;

Fin;

A continuación se mostrara un ejemplo de la heurística resolviendo, la primera

iteración de la sección 3.2:

𝑊 = 𝑊 = 100

Page 11: Capitulo 3 Método de Generación de Columnascatarina.udlap.mx/u_dl_a/tales/documentos/lmnf/diaz_s_s/capitulo3.pdf · con un problema maestro, el cual es una relajación lineal del

𝑧 = 0

𝑗 = 1

𝑏𝑗 = 𝑊/𝑡𝑗

Se empieza la primera iteración, con 𝑗 = 1:

Paso 1.

Hacer 𝑎𝑖𝑗= 𝑚𝑖𝑛 𝑊 𝑡𝑖𝑗 , 𝑏𝑗

El índice 𝑖1 = 2

𝑎2 = min 100

36 , 2

𝑎2 = 2

Paso 2.

Modificar el valor de 𝑊 = 𝑊 − 𝑡𝑗𝑎𝑗

𝑊 = 100 − 36 ∗ 2

𝑊 = 28

Paso 3.

Modificar el valor de 𝑧 = 𝑧 + 𝑤𝑗𝑎𝑗

𝑧 = 0 + .5 ∗ 2

𝑧 = 1

Paso 4

Si 𝑏𝑖𝑗𝑤𝑖𝑗

> 𝑏𝑗 𝑤𝑗 entonces 𝑗 = 𝑗. Debido a que 𝑗 y 𝑗 son igual a 1 se queda igual.

Se comienza la segunda iteración, con 𝑗 = 2.

Paso 1.

El índice 𝑖2 = 1

𝑎1 = min 28

45 , 2

𝑎1 = 0

Paso 2.

Page 12: Capitulo 3 Método de Generación de Columnascatarina.udlap.mx/u_dl_a/tales/documentos/lmnf/diaz_s_s/capitulo3.pdf · con un problema maestro, el cual es una relajación lineal del

𝑊 = 28 − 45 ∗ 0

𝑊 = 28

Paso 3.

𝑧 = 1 + .5 ∗ 0

𝑧 = 1

Paso 4

Si 𝑏𝑖2𝑤𝑖2

> 𝑏1𝑤1 ⇒ 𝑗 = 2

. 5 ∗ 2 ≯ .5 ∗ 2 ∴ 𝑗 = 1

Se comienza la tercera iteración, con 𝑗 = 3.

Paso 1.

El índice 𝑖3 = 3

𝑎3 = min 28

31 , 3

𝑎3 = 0

Paso 2.

𝑊 = 28 − 31 ∗ 0

𝑊 = 28

Paso 3.

𝑧 = 1 + .33 ∗ 0

𝑧 = 1

Paso 4

Si 𝑏𝑖3𝑤𝑖3

> 𝑏1𝑤1 ⇒ 𝑗 = 3

. 33 ∗ 3 ≯ .5 ∗ 2 ∴ 𝑗 = 1

Se comienza la cuarta iteración, con 𝑗 = 4.

Paso 1.

El índice 𝑖4 = 4

𝑎4 = min 28

14 , 7

Page 13: Capitulo 3 Método de Generación de Columnascatarina.udlap.mx/u_dl_a/tales/documentos/lmnf/diaz_s_s/capitulo3.pdf · con un problema maestro, el cual es una relajación lineal del

𝑎4 = 2

Paso 2.

𝑊 = 28 − 14 ∗ 2

𝑊 = 0

Paso 3.

𝑧 = 1 + .14 ∗ 2

𝑧 = 1.28

Paso 4

Si 𝑏𝑖4𝑤𝑖4

> 𝑏1𝑤1 ⇒ 𝑗 = 4

. 14 ∗ 7 ≯ .5 ∗ 2 ∴ 𝑗 = 1

Paso 5.

Si 𝑏𝑗 𝑤𝑗 > 𝑧 entonces; 𝑧 = 𝑏𝑗 𝑤𝑗 , desde 𝑗 = 1 hasta 𝑛 𝑎𝑗 = 0, 𝑎𝑗 = 𝑏𝑗

𝑏1𝑤1 ≯ 𝑧

Como podemos ver en este caso la heurística nos dios el resultado optimo

obtenido en la primera iteración del la sección 3.2. Donde:

𝒂 =

0202

𝑦 𝑧 = 1.28