Resolución Exacta y Heurística del Problema de Cortes de ...

64
Trabajo de Fin de Grado Equation Chapter 1 Section 1 Trabajo Fin de Grado Ingeniería de Organización Industrial Resolución Exacta y Heurística del Problema de Cortes de Barras Autor: Carlos Morales Fernández Tutor: José Manuel García Sánchez Dep. Organización Industrial y Gestión de Empresas I Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2017

Transcript of Resolución Exacta y Heurística del Problema de Cortes de ...

Page 1: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado

Equation Chapter 1 Section 1

Trabajo Fin de Grado

Ingeniería de Organización Industrial

Resolución Exacta y Heurística del

Problema de Cortes de Barras

Autor: Carlos Morales Fernández

Tutor: José Manuel García Sánchez

Dep. Organización Industrial y Gestión de Empresas I

Escuela Técnica Superior de Ingeniería

Universidad de Sevilla

Sevilla, 2017

Page 2: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

II

Page 3: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

III

Trabajo Fin de Grado

Ingeniería de Organización Industrial

Resolución Exacta y Heurística del Problema de

Cortes de Barras

Autor:

Carlos Morales Fernández

Tutor:

José Manuel García Sánchez

Profesor titular

Dep. Organización Industrial y Gestión de Empresas I

Escuela Técnica Superior de Ingeniería

Universidad de Sevilla

Sevilla, 2017

Page 4: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

IV

Page 5: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

V

Trabajo Fin de Grado: Resolución Exacta y Heurística del Problema de Cortes de Barras

Autor: Carlos Morales Fernández

Tutor: José Manuel García Sánchez

El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:

Presidente:

Vocales:

Secretario:

Acuerdan otorgarle la calificación de:

Sevilla, 2017

El Secretario del Tribunal

Page 6: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

VI

Page 7: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

VII

Agradecimientos

El presente trabajo va dedicado a mi familia, en especial a mis padres que siempre me han apoyado en todo

momento, a mis amigos que me han acompañado codo con codo durante el transcurso del grado y a los

diversos profesores que han sabido transmitirme sus conocimientos, así como también la pasión por el campo

de la Organización Industrial.

Carlos Morales Fernández

Sevilla, 2017

Page 8: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

VIII

Page 9: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

IX

Resumen

El Problema de Cortes de Barras trata sobre la asignación de cortes a barras con el fin de satisfacer

determinadas demandas, actualmente y también en épocas pasadas, muy presente en la industria. Dicho TFG

presenta la resolución óptima del problema con el objetivo de evaluar dos metodologías empleadas para la

resolución del mismo y poder así determinar cuál es la mejor forma de abordarlo.

Desde un punto de vista matemático con el que poder obtener un valor óptimo a pesar del tiempo empleado

para su resolución, siendo éste programado en el software LINGO.

La segunda parte consta de la elaboración de una heurística basada en vecindad con la que poder resolver el

Problema de Cortes de Barras de una forma más eficiente que la resolución matemática.

Page 10: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

X

Abstract

The Solution to Bar Cutting Problem consists in make cuts in bars to supply the request of customers with

the best eficient cutting solution in our stock. Along this text, two methodologies to deal with the problem

are presented.

First of all, the problem is analyzed from a mathematical point of view, obtaining an optimal value

without caring on the time employed for its resolution, using LINGO software.

Secondly, a metaheuristic based on the neighborhood is carried out to solve the Bar Cutting Problem in a

more efficient way.

Finally, both methodologies are evaluated in order to determine which is the best to solve the problem.

Page 11: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

XI

Índice

INTRODUCCIÓN Y OBJETIVOS DEL PROYECTO 1

EL PROBLEMA DE CORTES DE BARRAS 4

MODELO MATEMÁTICO EMPLEADO 7 3.1. Elementos 8 3.2. Variables 8

3.3. Restricciones 9

3.4. Función Objetivo 12 3.5. Modelo Matemático 12

3.6. Ejemplo 13

RESOLUCIÓN DEL MODELO MATEMÁTICO 15 4.1. Introducción 16

4.2. Librería LINGO 16

4.3. Implementación del Modelo en LINGO 20

HEURÍSTICA 23 5.1. Introducción 24 5.2. Heurística Local Search 24

5.3. Aplicación del Local Search al Problema de Cortes de Barras 25

EXPERIMENTACIÓN 29 6.1. Introducción 30

6.2. Generación de Problemas 30

6.3. Resultados Obtenidos 33 6.4. Conclusiones 34

CONCLUSIONES GENERALES 37

BIBLIOGRAFÍA 39

ANEXOS 42 9.1. ANEXO A: Programación de la Generación de Problemas 43

9.2. ANEXO B: Programación de la Heurística 47

Page 12: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

XII

Page 13: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

1

INTRODUCCIÓN Y OBJETIVOS DEL PROYECTO

Page 14: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

2

La industria, los servicios y el comercio del Metal en España superan las 150.000 empresas y emplean a

más de 1.500.00 personas.

La industria del metal constituye una de las industrias básicas más importantes en los países

industrializados y su grado de madurez es un exponente claro del desarrollo industrial del país. La

industrial del metal en España supone cerca del 40% de la producción industrial española, de cada 100

empleados en la industria española, 37 son del Metal. Anualmente la industria exporta en torno al 50%

del total de las exportaciones españolas. De éstas, el 75% tienen como destino la UE. En España las

empresas del Metal representan el 5% del total y de ellas 78.000 son establecimientos industriales. En el

Metal las PYMES son mayoría: un 86% son empresas de menos de 10 asalariados y un 98% con menos

de 100.

Es por ello que el sector de la metalurgia es uno sector bastante explotado y dónde el problema de Cortes

de Barras está muy presente en el día a día.

Al margen de la industria del metal, la cual nos podría resultar más familiar en relación con el problema

abordado en este Trabajo de Fin de Grado, muchos otros negocios se ven también enfrentados a este

problema. Entre otros, podríamos encontrar:

Industria maderera: desde antaño la industria de la madera ha sido de las primeras en enfrentarse

a esta problemática, puesto que era uno de los primeros recursos que se encontraban perennes y

de fácil adquisición en la naturaleza.

Industria textil: con el fin de la confección de las distintas prendas que hoy en día se visten, las

industrias textiles se ven obligadas a la fabricación y venta de innumerables tipos de telas al por

mayor.

Industria alimentaria: muchas de las empresas relacionadas con la alimentación, con el objetivo

de generar economías de escala, producen en masa gran cantidad de productos alimenticios de

forma lineal. Entre otros podemos encontrar empresas fabricantes de tabletas de chocolate o de

sándwiches.

Industria del plástico: nos encontramos el problema de Cortes de Barras en empresas destinadas a

fabricar productos como tuberías de PVC de diversos tamaños o sticks de fregonas o recogedores,

entre muchos otros existentes.

Page 15: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

3

Imprentas: aunque pueda parecer ridículo, hoy en día el consumo de papel es algo que cada vez

más tenemos presente en la sociedad. Es por ello que el control de los diversos cortes de rollos de

papel debe de realizarse con minucioso estudio.

Por ello el Problema de Cortes de Barras va ser objeto de estudio en el presente Trabajo de Fin de Grado.

Dicho problema será resuelto de forma exacta y con varias instancias mediante el software LINGO,

analizando los tiempos de resolución y los valores de Función Objetivo hallados.

Por otro lado, se resolverán las mismas instancias con una heurística basada en vecindad denominada

Local Search, con la finalidad de comparar los resultados entre ambas metodologías de resolución.

El proyecto consta de 9 capítulos, incluido éste, en el que se estructura el contenido del siguiente modo:

Capítulo 2: descripción del problema a tratar en el presente trabajo.

Capítulo 3: explicación del modelado del problema Cortes de Barras de forma matemática.

Capítulo 4: aborda la implementación del modelo matemático explicado en el capítulo 3 en el software

de resolución lineal LINGO.

Capítulo 5: capítulo en el que se explica la heurística Local Search que se ha utilizado como método

alternativo para la resolución del problema.

Capítulo 6: se explica detalladamente la batería de problemas que vamos a utilizar para el estudio

computacional, los resultados obtenidos fruto de la experimentación con dicha batería y las conclusiones

obtenidas del estudio.

Capítulo 7: se redactan las conclusiones personales obtenidas del proyecto.

Capítulos 8 y 9: contienen información relevante usada para la ejecución del trabajo.

Page 16: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

4

EL PROBLEMA DE CORTES DE BARRAS

Page 17: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

5

Un problema de optimización se presenta en entornos industriales o de servicios en los que hay que gestionar

una serie de recursos para realizar una determinada actividad, utilizando por lo general un criterio de tipo

económico. Los criterios van referidos a la minimización de los costes de la actividad, o a la maximización de

beneficios. En el contexto científico, la optimización es el proceso de tratar de encontrar la mejor solución

posible para un determinado problema.

En este apartado abordaremos la definición del propio problema denominado como Cortes de Barras con el fin

de optimizarlo.

El problema consiste en realizar cortes unidimensionales a un conjunto finito de barras longitudinales ya

existentes en el almacén, las cuales tendrán como características una determinada longitud que no tendrá por

qué ser similar entre ellas. Dichas barras podrán provenir tanto de haberlas fabricado, como del resultado del

sobrante de algún corte realizado con anterioridad, es por ello que las barras situadas en el almacén tendrán

tamaños distintos. Tanto el número de barras de almacén como las longitudes de las mismas serán

considerados como datos.

Los cortes realizados a las barras de almacén se realizarán con el objetivo de satisfacer la demanda de unos

supuestos clientes. Estas demandas o lotes se caracterizan por tener una cantidad finita y entera de barras

demandadas y un determinado tamaño de longitud de barra por lote. Este mencionado tamaño lo supondremos

de 6, 8, 10 y 12 unidades de longitud, debido a que en el Mercado industrial no se demandan gran cantidad de

longitudes diferentes, a excepción de las demandas personalizadas.

El objetivo de dicha problemática, el cual queremos optimizar, será el de asignar cortes a barras de almacén

para satisfacer las diversas demandas de los clientes pero siempre intentando minimizar que el sobrante de

realizar esta actividad de cortado no sea inferior a 2 unidades de longitud (longitud estipulada a modo de

ejemplo para el estudio del problema) con el fin de simular que las barras con longitudes inferiores a 2 no se

demandan en el mercado y serían un completo desperdicio para la empresa.

A modo de ejemplo, a continuación se muestra un dibujo de cómo sería el problema que acabamos de

comentar, con el fin de verlo de forma gráfica y simple.

Page 18: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

6

Page 19: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

7

MODELO MATEMÁTICO EMPLEADO

Page 20: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

8

3.1. Elementos

El modelo matemático que vamos a explicar en el presente apartado consta de unos elementos fijos, los cuales

se encuentran en esta subsección y se verán reflejados en el modelo matemático final. Estos elementos serán

los datos referentes a nuestro modelado matemático del problema Cortes de Barras.

En la siguiente tabla podemos encontrar la explicación de cada uno de ellos:

Elemento Descripción

𝑗 Conjunto de barras que se encuentran en el almacén, con un rango de 1,2, … , 𝑀

𝑖 Conjunto de lotes demandados, con un rango de 1,2, … , 𝑁

𝐿𝑗 Dato que establece el valor de la longitud en u.d.l. (unidades de longitud) de cada

barra “𝑗” que se encuentra en el almacén.

𝑙𝑑𝑖 Dato que establece el valor de la longitud en u.d.l. (unidades de longitud) de las

barras de cada lote “𝑖” demandado. Tomará valores 6, 8, 10 y 12.

𝐷𝑖 Dato que hace referencia a la cantidad de barras demandadas por lote “𝑖”.

𝜀 Constante de valor ínfimo.

3.2. Variables

A continuación, se muestran las diversas variables que tomarán diferentes valores en nuestra resolución exacta

del problema. De ellas dependerá de forma directa el tiempo de resolución del modelo, pero este es un aspecto

que se comentará más adelante.

En la siguiente tabla se pueden observar las variables incluidas en el problema, así como también la

descripción de las mismas:

Page 21: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

9

Variable Descripción

𝑥𝑗𝑖 Variable entera que representa el número de cortes realizados a la barra “𝑗” para

satisfacer la demanda del lote “𝑖”.

𝑆𝑗 Variable continua que representa la cantidad sobrante de la barra de almacén “𝑗”

tras ser cortada.

𝑦1𝑗 Variable continua que tomará el valor del sobrante de las barras de almacén “𝑗” en

el caso de que éste sea menor que 2 u.d.l.

𝑦2𝑗 Variable continua que tomará el valor del sobrante de las barras de almacén “𝑗” en

el caso de que éste sea mayor o igual que 2 u.d.l.

𝛼1𝑗 Variable binaria que tomará valor 1 si el sobrante de las barras de almacén “𝑗” es

menor que 2 u.d.l. y 0 en caso contrario.

𝛼2𝑗 Variable binaria que tomará valor 1 si el sobrante de las barras de almacén “𝑗” es

mayor o igual que 2 u.d.l. y 0 en caso contrario.

3.3. Restricciones

La primera restricción que nos encontramos es la siguiente ∑ 𝑙𝑑𝑖 ∙ 𝑥𝑗𝑖 + 𝑆𝑗 = 𝐿𝑗𝑁𝑖=1 . En ella lo que

se refleja es el hecho de que la longitud de la barra que se encuentra en el almacén 𝐿𝑗 deberá ser

estrictamente la suma del sobrante de la misma tras ser cortada 𝑆𝑗 y la cantidad de barra que ha sido

destinada a satisfacer las diferentes demandas existentes ∑ 𝑙𝑑𝑖 ∙ 𝑥𝑗𝑖𝑁𝑖=1 . Dicha restricción deberá ser

cumplida por todas las barras que se encuentren en el almacén, ∀ 𝑗 = 1, 2, … , 𝑀.

La segunda restricción que aparece en nuestro modelo es ∑ 𝑥𝑗𝑖 =𝑀𝑗=1 𝐷𝑖, la cual representa de forma

estricta que la demanda de cada lote debe ser satisfacida, por lo que esta restricción llevará a su vez

∀ 𝑖 = 1,2, … , 𝑁. Cabría la posibilidad de poner como signo ≥ pero puesto que es un problema

demasiado caprichoso hemos decidido dejar el =.

Page 22: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

10

Respecto a esta restricción de satisfacción de demanda, una posible variante de nuestro problema sería

el incluir el ≥ puesto que podría relajar la demanda y dar tiempos de resolución más pequeños. Pese a

que podrían salirnos soluciones donde la demanda a entregar al cliente fuera superior a la que

realmente el cliente requiere, las barras sobrantes pueden ser perfectamente utilizadas para otro periodo

de tiempo donde realicemos el cortado de barras, puesto que al ser demandados únicamente tamaños de

6, 8, 10 y 12 u.d.l. no sería un obstáculo para la empresa.

El siguiente grupo de restricciones identifica a la variable 𝑦1𝑗 como el sobrante menor que 2 u.d.l.

(constante impuesta para el problema) obtenido de cortar la barra de almacén con el fin de satisfacer la

demanda, esta variable denotará la Función Objetivo que se comentará más adelante, puesto que no

querremos tener barras sobrantes de este tamaño. Del mismo modo se impone que la variable 𝑦2𝑗 es

igual al sobrante mayor o igual a 2 u.d.l. Esta será la forma de calcular el sobrante de las barras de

almacén. Para una mayor comprensión de este grupo de restricciones se muestra un simple dibujo de

los posibles sobrantes que podemos obtener:

2 u.d.l

Sobrante (Sj):

y1 (Penalizado)

y2 (Permitido)

Page 23: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

11

Este tipo de restricciones serán modeladas matemáticamente con la siguiente metodología:

Y obtendremos lo siguiente:

𝑆𝑗 = 𝑦1𝑗 + 𝑦2𝑗

𝛼1𝑗 + 𝛼2𝑗 ≤ 1

0 ≤ 𝑦1𝑗 ≤ (2 − 𝜀) ∙ 𝛼1𝑗

2 ∙ 𝛼2𝑗 ≤ 𝑦2𝑗 ≤ 𝐿𝑗 ∙ 𝛼2𝑗

Todas estas restricciones serán evaluadas para cada una de las barras que se encuentren en el almacén

∀ 𝑗 = 1,2, … , 𝑀.

x

0U1U n xU CS

1 1 2 1

2U 1iU iU

1i

1 2

1 2

1 1 1

1 2 2 2 2

2 3 3

, , :

0

1

0

( )

( )

n

i

i

i

i n

x x x

x

x

x x x x x

x U

U x U

U x

i-1 i 0

Valor de x en cada intervalo

1 si se encuentra en el intervalo (U ,U ], con U=

0 si esta fuera del intervalo mencionado

3 3U

1x 2x ix

Page 24: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

12

3.4. Función Objetivo

Por último pero no menos importante, la función objetivo para este problema es la de Minimizar

∑ 𝑦1𝑗𝑀𝑗=1 debido a que lo que se busca es tener el menor número de metros de barras de almacén

sobrantes con longitudes inferiores a 2 u.d.l. ya que como se comentó en el capítulo 2 donde se

describía el problema, suponemos que las barras de tamaños inferiores a 2 u.d.l. no eran demandadas

en el mercado industrial actual.

3.5. Modelo Matemático

𝑀𝐼𝑁: ∑ 𝑦1𝑗

𝑀

𝑗=1

𝑠𝑎:

∑ 𝑙𝑑𝑖 ∙ 𝑥𝑗𝑖 + 𝑆𝑗 = 𝐿𝑗

𝑁

𝑖=1

∀ 𝑗 = 1, 2, … , 𝑀

∑ 𝑥𝑗𝑖 =

𝑀

𝑗=1

𝐷𝑖 ∀ 𝑖 = 1,2, … , 𝑁

𝑆𝑗 = 𝑦1𝑗 + 𝑦2𝑗 ∀ 𝑗 = 1,2, … , 𝑀

𝛼1𝑗 + 𝛼2𝑗 ≤ 1 ∀ 𝑗 = 1,2, … , 𝑀

0 ≤ 𝑦1𝑗 ≤ (2 − 𝜀) ∙ 𝛼1𝑗 ∀ 𝑗 = 1,2, … , 𝑀

2 ∙ 𝛼2𝑗 ≤ 𝑦2𝑗 ≤ 𝐿𝑗 ∙ 𝛼2𝑗 ∀ 𝑗 = 1,2, … , 𝑀

𝐶𝑜𝑛𝑡𝑖𝑛𝑢𝑎𝑠 𝑆𝑗 , 𝑦1𝑗 , 𝑦2𝑗 ≥ 0

𝐸𝑛𝑡𝑒𝑟𝑎𝑠 𝑥𝑗𝑖 ≥ 0

𝐵𝑖𝑛𝑎𝑟𝑖𝑎𝑠 𝛼1𝑗 , 𝛼2𝑗 = {0 , 1}

Page 25: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

13

3.6. Ejemplo

Para mostrar el comportamiento del modelo realizaremos un pequeño problema a modo de ejemplo.

Supongamos que tenemos un almacén en el que se encuentra un stock de dos barras j= y j=2, con longitudes

(𝐿𝑗 ) iguales a 25 y 11 respectivamente. Dichas barras habrán sido compradas al por mayor, fabricadas por la

propia empresa cortadora de barras o resultados del sobrante de haber realizado una operación de cortado

previa a la actual.

Estas barras situadas en el almacén deberán ser utilizadas para satisfacer la demanda de 3 clientes, i=1, i=2 e

i=3. Los cuales tendrán una demanda (𝐷𝑖) de 2, 1 y 1 y su determinada longitud de barra (𝑙𝑑𝑖) para cada una

de las demandas igual a 6, 9 y 12 .u.d.l. respectivamente. Siendo estas longitudes las demandadas por el

mercado.

A modo de resumen se muestran los diversos datos comentados en las siguientes tablas:

ALMACÉN

Número (j): Longitud Inicial (L)

1 25

2 11

DEMANDA

Número (i): Cantidad del Lote (D) Longitud Solicitada del Lote (ld)

1 2 6

2 1 9

3 1 12

Visualmente podremos comprobar que una posible solución óptima al problema presentado sería la de cortar 2

barras de 6 u.d.l. de la barra de almacén j=1 que disponía de una longitud inicial de 25 u.d.l., para satisfacer la

demanda de 2 unidades del cliente i=1 que demanda barras de 6 u.d.l., esta msima barra de almacén también

será cortada para el aprovisionamiento del cliente 3 cuyas características son una demanda de 1 unidad con

longitud de 12 u.d.l.. Para satisfacer al cliente 2 se ha cortado una barra de 9 u.d.l. de la barra de almacén j=2

cuya dimensión inicial era de 11 u.d.l.

Page 26: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

14

A continuación se muestra una tabla con los valores de las 𝑥𝑗𝑖 comentados:

X(j,i) j

1 2

i

1 2 0

2 0 1

3 1 0

Respecto al sobrante (𝑆𝑗), obtendremos que el valor para la barra de almacén j=1 será de 1 u.d.l. y para la barra

de almacén j=2, será de 2 u.d.l.. Esto hace que el valor de las “y” sea 𝑦11 = 1 y 𝑦21 = 0 para la barra de

almacén j=1, y 𝑦12 = 0 𝑦22 = 2. Para una mayor claridad de los resultados del sobrante se muestra el

siguiente gráfico:

Por lo tanto, una vez realizados los cortes y satisfecha la demanda veremos que la Función Objetivo obtenida

para los datos introducidos será de FO = 1. Debido a que sólo tenemos una barra en el almacén con longitud

inferior a 2 u.d.l.

Page 27: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

15

RESOLUCIÓN DEL MODELO MATEMÁTICO

Page 28: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

16

4.1. Introducción

La programación lineal es el campo de la optimización matemática dedicado a maximizar o minimizar

(optimizar) una función lineal, denominada función objetivo, de tal forma que las variables de dicha función

estén sujetas a una serie de restricciones expresadas mediante un sistema de ecuaciones

o inecuaciones también lineales. El método tradicionalmente usado para resolver problemas de programación

lineal es el Método Simplex.

Por ello para resolver de forma exacta nuestro modelo matemático de programación lineal utilizaremos un

software dedicado a este propósito. El software que utilizaremos es denominado LINGO, y será explicado en

dicho capítulo.

4.2. Librería LINGO

LINGO: (LINear Generalize Optimizer) es una herramienta simple para formular problemas lineales y no

lineales, resolverlos y analizar su solución. El resultado que LINGO nos proporciona es la optimización

que nos ayuda a encontrar el mejor resultado: la ganancia más alta, o el costo más bajo. A menudo estos

problemas involucran el uso más eficiente de los recursos. Los problemas de optimización son

clasificados a menudo como lineales o no lineales, dependiendo si las relaciones en el problema son

lineales con respecto a las variables. Uno de los rasgos más poderosos de LINGO es su aplicación en el

lenguaje de modelo matemático. El cual permite expresar un problema de una manera muy similar a la

anotación matemática normal pudiendo también, expresar una serie entera de restricciones en una

declaración compacta. Esto lleva a modelos que son mucho más fáciles de mantener. Otro aspecto es la

sección de los datos, que le permite aislar los datos de la formulación del modelo. De hecho LINGO

Page 29: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

17

puede leer datos incluso de una hoja de cálculo separada, base de datos, o archivo de texto. Con datos

independientes del modelo, es mucho más fácil de hacer cambios, y hay menos oportunidad de error

cuando se realiza el modelo.

Sintaxis de LINGO

La sintaxis que se utiliza en este programa es muy sencilla. Para el nombre de las variables se establece

que deben tener 32 caracteres como máximo, Deben comenzar con una letra seguido de letras, dígitos o _.

El compilador de LINGO no distingue entre mayúsculas y minúsculas. Con respecto a las sentencias:

Todas las sentencias deben terminar en un punto y coma. Para darle un nombre a la función objetivo o a

las restricciones, estos se deben colocar entre corchetes. Para declarar la función objetivo debemos

colocar las palabras reservadas MAX o MIN, resaltadas en azul, seguidas del signo =. Los comentarios

deben comenzar con un signo !, los cuales son resaltados en verde

El formato que sigue un modelo en LINGO es el siguiente:

Título: descripción del modelo.

Función objetivo: Maximizar o minimizar con los valores de los costes de todas las variables.

Restricciones del problema.

Restricciones asociadas al tipo de variable.

A continuación se detallan las características más importantesa cerca de la sintaxis de los modelos de

LINGO:

Page 30: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

18

Título

Es optativo y debe tener como máximo 128 caracteres.

FORMATO: {TITLE NOMBRE DEL MODELO ;}

Función Objetivo

Para escribir la función objetivo se colocan las palabras reservadas MAX o MIN, qué se resaltarán en

azul, seguidas de signo =.

FORMATO: {[NOMBRE]} (MAX/MIN) = FUNCIÓN OBJETIVO;

Restricciones del problema

LINGO tiene la habilidad de nombrar las restricciones en su modelo. Ésta es una buena práctica, por dos

razones; primero, los nombres de restricciones se usan en el reporte de las soluciones, cosa que los hacen

más fácil de interpretar. Segundo, muchos de los mensajes de error de LINGO se refieren a una

restricción dada por nombre. Dar nombre a las restricciones es bastante simple, se inserta el nombre entre

corchetes delante de una línea de código, dicho nombre cumplirá los requisitos normales para un

nombreLINGO. Mostramos a continuación un ejemplo de cómo quedannuestros problemas modelados el

LINGO.

Page 31: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

19

Page 32: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

20

La siguiente imagen muestra un ejemplo del formato que tendría los modelos LINGO de nuestros

problemas.

4.3. Implementación del Modelo en LINGO

A continuación se muestra la programación junto a su explicación en comentarios en el software de

optimización “LINGO” del modelo matemático anteriormente descrito.

Esta programación ha sido estructurada de forma que al principio se encuentra la declaración de los elementos

y variables que componen el problema, así como también el rango de valores de las mismas (dicho rango

variará en función del tamaño del problema que estemos evaluando, esta variación será comentada en el

capítulo 6).

Posteriormente podemos encontrar la introducción de los datos del problema (variarán también en función del

problema y de la semilla de aleatoriedad utilizada, será comentado en el capítulo 6).

Seguido de la introducción de datos se encuentran las diversas restricciones que incumben al problema, cabe

destacar que las restricciones 0 ≤ 𝑦1𝑗 ≤ (2 − 𝜀) ∙ 𝛼1𝑗 y 2 ∙ 𝛼2𝑗 ≤ 𝑦2𝑗 ≤ 𝐿𝑗 ∙ 𝛼2𝑗

Page 33: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

21

han sido modeladas en 4 restricciones, puesto que LINGO no permite el modelado simultáneo de restricciones.

Y por último se encuentran la Función Objetivo del problema y los tipos de variables del mismo.

Page 34: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

22

Page 35: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

23

HEURÍ STÍCA

Page 36: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

24

5.1. Introducción

Desde los años sesenta han ido apareciendo diferentes métodos de resolución de problemas conocidos por el

nombre de técnicas metaheurísticas. Estas técnicas son de especial interés en el caso de variables enteras

aunque también se aplican a problemas con variables reales.

Un heurístico es un “procedimiento simple, a menudo basado en el sentido común, que se supone que ofrecerá

una buena solución (aunque no necesariamente la óptima) a problemas difíciles, de un modo fácil y rápido”.

(Zanakins y Evans, 1981)

Los heurísticos se utilizan, por ejemplo, cuando no existe un método exacto de resolución, cuando existe un

método exacto que consume mucho tiempo para ofrecer la solución óptima, cuando existen limitaciones de

tiempo o como paso intermedio para obtener una solución inicial para la aplicación de otra técnica.

Las técnicas metaheurísticas son procedimientos de búsqueda que tampoco garantizan la obtención del óptimo

del problema considerado y que también se basan en la aplicación de reglas relativamente sencillas. A

diferencia de los heurísticos, las técnicas metaheurísticas tratan de huir de óptimos locales orientando la

búsqueda en cada momento dependiendo de la evolución del proceso de búsqueda.

La aplicación de las técnicas metaheurísticas es especialmente interesante en caso de problemas de

optimización combinatoria: problemas en las que las variables de decisión son enteras (o discretas, al menos)

en las que, generalmente, el espacio de soluciones está formado por ordenaciones de valores de dichas

variables. Sin embargo, las técnicas metaheurísticas se pueden aplicar también a problemas de otro tipo, como

con variables continuas, por ejemplo.

5.2. Heurística Local Search

La heurística basada en vecindad denominada como Local Search, es un método heurístico para

resolver problemas de optimización computacionalmente duros. La búsqueda local se puede utilizar en

problemas que se pueden formular como encontrar una solución que maximice un criterio entre un

número de soluciones candidatas . Los algoritmos de búsqueda local pasan de solución a solución en el

espacio de soluciones candidatas (el espacio de búsqueda) aplicando cambios locales, hasta que se

encuentra una solución considerada óptima o se ha transcurrido un tiempo límite.

Page 37: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

25

Los algoritmos de búsqueda local se aplican ampliamente a numerosos problemas computacionales.

A la hora de moverse a las vecinas existen dos métodos:

First Improvement: escoge la solución vecina major anexa a la solución que estemos evaluando

Best Improvement: explora todas las soluciones vecinas próximas y escoge la major de ellas.

5.3. Aplicación del Local Search al Problema de Cortes de Barras

Para la realización de nuestra heurística escogeremos la metodología First Improvement. A continuación, se

explica el Local Search aplicado a nuestro problema de Cortes de Barras.

El Local Search empleado se basa en una solución inicial generada de forma que a la primera barra del

almacén (j=1) se le asigna el satisfacer la primera demanda (i=1), así se irá completando la demanda pasando

por cada una de las barras de almacén. Debiendo cumplir siempre que la demanda sea satisfecha, es por ello

que si no ha sido así se volverá a comenzar la asignación, pero esta vez empezando por la segunda barra del

almacén (j=2). Si no cumple con la restricción se volverá a repetir el proceso, pero con la tercera barra del

almacén (j=3) y así sucesivamente hasta que la restricción de cumplir la demanda se respete.

Una vez obtenida dicha solución inicial pasaremos al concepto de vecindad, éste consta en cambiar la

asignación de una barra del almacén que tenga un sobrante menor que 2 con un lote de forma que la barra por

la que debe ser sustituida debe tener un sobrante actual suficiente para acometer la demanda y que el sobrante

una vez realizado el corte no perjudique la FO, es decir, no sea inferior a 2. Con respecto a las restricciones del

problema, puesto que la solución inicial las tiene en cuenta, ésta también. Dicha heurística empleada se

muestra de forma esquemática con el siguiente pseudocódigo:

Page 38: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

26

Entrada: 𝐿𝑗 , 𝐷𝑖 , 𝑙𝑑𝑖

Salida: 𝑋𝑗𝑖 , 𝑆𝑗

Bucle: Desde i=1 hasta i=N

Bucle: Desde j=1 hasta j=M

Si: 𝑋𝑗𝑖 > 0 & 𝐿𝑗 < 2

Bucle: Desde k=1 hasta k=M

Si: 𝐿𝑘 ≥ 𝑙𝑑𝑖 & 𝐿𝑘 − 𝑙𝑑𝑖 ≥ 2 & 𝑘 ≠ 𝑗

𝑋𝑗𝑖 = 𝑋𝑗𝑖 − 1

𝑋𝑘𝑖 = 𝑋𝑘𝑖 + 1

𝑆𝑗 = 𝑆𝑗 + 𝑙𝑑𝑖

𝑆𝑘 = 𝑆𝑘 + 𝑙𝑑𝑖

k=M (salgo del bucle)

*k: variable que toma valores del mismo rango que j

La programación de dicha heurística basada en vecindad ha sido desarrollada en lenguaje C y la podemos

encontrar en el Anexo B.

Para que quede más claro mostraremos un ejemplo sencillo:

Disponemos en el almacén de 4 barras (j=1…4) con longitudes 13, 8, 7, y 10 u.d.l. respectivamente. Y de 3

clientes o lotes (i=1…2) con demandas igual a 3 y 2 barras y longitudes de cada demanda de 6 y 8 u.d.l.

respectivamente.

Si seguimos la metodología anteriormente explicada para generar la solución inicial de la heurística, ocurriría

lo siguiente. La barra de almacén con longitud igual a 15 u.d.l. será cortada para satisfacer el primer lote o

cliente, por lo que se cortará la barra con una distancia de 6 u.d.l. y el sobrante (9 u.d.l.) será destinado a

satisfacer la siguiente necesidad del mismo lote o cliente de 6 u.d.l., por lo que se cortará nuevamente. Una vez

hechos estos dos cortes, el sobrante de la barra de almacén j=1 es de 1 u.d.l. por lo que no es suficiente para

satisfacer la última necesidad del primer lote o cliente. Deberemos pasar a la siguiente barra de almacén, la

j=2. Este procedimiento se continuará hasta satisfacer todas las demandas del problema.

En el caso de no cubrir todas las demandas, se repetiría este mismo proceso. Pero esta vez en lugar de asignar

como primera opción la barra de almacén j=1, lo haríamos con la barra j=2 y dejaríamos la barra j=1 para la

última asignación.

Page 39: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

27

Una vez creada la solución inicial, la vecindad empleada será la de sustituir barras asignadas a demandas cuyo

sobrante sea inferior a 2 u.d.l.. En nuestro caso sería el de reemplazar el corte hecho a la barra de almacén j=1

para satisfacer la segunda necesidad del cliente por el de otro cliente cuyo sobrante no sea inferior a 2 u.d.l.,

debido a que el sobrante de la barra j=1 que obteníamos en la solución inicial era de 1 u.d.l. (perjudica a

nuestra FO). Este proceso de vecindad se iría repitiendo por todos los sobrantes inferiores a 2 u.d.l. hasta que

no se puedan hacer más intercambios.

Page 40: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

28

Page 41: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

29

EXPERÍMENTACÍÓ N

Page 42: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

30

6.1. Introducción

En este capítulo vamos a explicar el programa usao para obtener resultados que nos sirvan para sacar

conclusiones en relación a nuestras metodologías. En resumen, el proceso seguido para hallar datos

experimentales, una vez que se han diseñado el método exacto y la heurística, consta de los siguientes puntos:

1) Generación de una serie de problemas prototipo lo suficientemente amplia y variada para poder sacar

conclusiones, en formato txt.

2) Generación de los modelos matemáticos que definen los distintos problemas, en formato lg4. Hallar el

óptimo de estos modelos (veremos las dificultades con las que nos encontramos durante el proceso y

la solución adoptada) mediante Lingo.

3) Hallar el resultado que aportan nuestra heurística a nuestro problema.

4) Comparación de método exacto y heurística.

6.2. Generación de Problemas

Con el fin de poder generar los datos de los cuales podamos estudiar y resolver con distintos procedimientos se

ha creado un programa en lenguaje C (Anexo A) con el que se generarán los vectores longitud de barras de

almacén (𝐿𝑗), longitud de las barras de cada lote (𝑙𝑑𝑖) y cantidad de barras demandadas (𝐷𝑖).

Una de las características de las que dispone el programa es la de poder cambiar los diversos tamaños de los

que dispone cada vector, M y N. Para poder así generar varias instancias y hacer varias resoluciones con el fin

de poder comparar unas con otras.

Page 43: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

31

Antes de entrar en el programa debemos mencionar que para la creación de dichos vectores de datos fue

necesario introducir un parámetro al que hemos llamado “R” que hace referencia a la diferencia entre la suma

de longitudes demandadas y las que hay en el almacén expresada en forma de porcentaje. La expresión es la

siguiente:

𝑅 = 100 − (∑ 𝑙𝑑𝑖 ∙ 𝐷𝑖

𝑁𝑖=1

∑ 𝐿𝑗𝑀𝑗=1

∙ 100)

Este parámetro ha sido introducido con el fin de controlar la dificultad de resolución del problema, puesto que

a menor porcentaje de “R” más complicada será la resolución del problema debido a que el sobrante de las

barras del almacén será cada vez menor.

Dicho esto, en el Anexo A podremos observar el programa, teniendo en cuenta que los únicos datos a

modificar son los directorios creados (#define) M, N, H, R, y E, que hacen referencia al tamaño del conjunto 𝑗,

el tamaño del conjunto 𝑖, la semilla de aleatoriedad (cambiada para cada generación), porcentaje de relación y

el error permitido en el porcentaje de relación respectivamente. Éste último ha sido creado puesto que debido a

la magnitud de datos a veces es imposible conseguir un porcentaje de relación exacto.

El programa comienza con la generación de estos vectores mediante unos bluces, asignando a cada

componente de estos un valor aleatorio, los cuales serán entre 10 y 30 para el vector longitud de barras de

almacén (𝐿𝑗), entre 5 y 20 para el vector cantidad de barras demandadas (𝐷𝑖) que será modificado por el

programa hasta conseguir la R deseada (50%, 30% o 15%) y 6, 8, 10 y 12 para el vector longitud de las barras

de cada lote (𝑙𝑑𝑖).

Una vez asignados estos valores se modificará el contenido del vector cantidad de barras demandadas (𝐷𝑖)

hasta un valor deseado, para poder así controlar cual es la cifra de relación u.d.l. de almacén – u.d.l.

demandadas (R) que queremos generar.

Page 44: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

32

En definitiva, las diferentes instancias a resolver son las que se muestran en la siguiente tabla:

j i R

10 3 50%

10 3 30%

10 3 15%

10 8 50%

10 8 30%

10 8 15%

30 10 50%

30 10 30%

30 10 15%

30 21 50%

30 21 30%

30 21 15%

50 15 50%

50 15 30%

50 15 15%

50 35 50%

50 35 30%

50 35 15%

100 35 50%

100 35 30%

100 35 15%

100 80 50%

100 80 30%

100 80 15%

Page 45: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

33

6.3. Resultados Obtenidos

j i R Resol. Exacta Resol. Heurística

∆ FO ∆ Tiempo Valor FO Tiempo (min) Valor FO Tiempo (min)

10

3

50% 0 0.00 0 0 0 0.00

30% 0 0.00 0 0 0 0.00

15% 0 0.00 0 0 0 0.00

8

50% 0 0.00 0 0 0 0.00

30% 0 0.02 0 0 0 0.02

15% 0 0.00 2 0 -2 0.00

30

10

50% 0 0.10 0 0 0 0.10

30% 0 0.48 0 0 0 0.48

15% 0 0.53 4 0 -4 0.53

21

50% 0 0.25 0 0 0 0.25

30% 0 0.67 0 0 0 0.67

15% 0 8.00 1 0 -1 8.00

50

15

50% 0 0.53 0 0 0 0.53

30% 0 50.53 1 0 -1 50.53

15% 0 36.40 5 0 -5 36.40

35

50% 0 7.57 0 0 0 7.57

30% 0 8.98 0 0 0 8.98

15% 1 240.00 11 0 -10 240.00

100

35

50% 0 192.00 0 0 0 192.00

30% 1 240.00 0 0 1 240.00

15% 5 240.00 13 0 -8 240.00

80

50% 0 18.00 0 0 0 18.00

30% 2 240.00 0 0 2 240.00

15% 10 240.00 20 0 -10 240.00

Page 46: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

34

Los datos anteriormente mostrados reflejan tanto el valor de la función objetivo como el tiempo empleado en

la resolución del problema, para las dos metodologías empleadas, exacta y heurística. Puesto que para tamaños

de problema grandes la resolución exacta demoraba mucho tiempo se decidió pararla a los 240 min de

funcionamiento.

6.4. Conclusiones

Representando los datos obtenidos para distintas R en el problema en gráficas se ha llegado a las siguientes

conclusiones:

R = 50%

0

1

3 8 10 21 15 35 35 80

10 30 50 100

Valor de la Función Objetivo R=50%

Resol. Exacta

Resol. Heurística

0.00

40.00

80.00

120.00

160.00

200.00

240.00

3 8 10 21 15 35 35 80

10 30 50 100

Tiempo (min) de resolución R=50%

Resol. Exacta

Resol. Heurística

Page 47: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

35

Según se aprecia en la gráfica, se obtienen los mismos valores de FO usando ambos métodos. Pero la

resolución exacta invierte más tiempo a grandes tamaños de número de barras y demandas.

R = 30%

En este caso podemos observer cómo con una R intermedia el hecho de usar una metodología de resolución

heurística como lo es el Local Search sigue siendo una buena opción, puesto que no solo llega al óptimo en la

gran mayoría de los casos, sino que invierte infinitamente menos tiempo a la hora de la resolución.

0

1

2

3 8 10 21 15 35 35 80

10 30 50 100

Valor de la Función Objetivo R=30%

Resol. Exacta

Resol. Heurística

0.00

40.00

80.00

120.00

160.00

200.00

240.00

3 8 10 21 15 35 35 80

10 30 50 100

Tiempo (min) de resolución R=30%

Resol. Exacta

Resol. Heurística

Page 48: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

36

R = 15%

Para la resolución más compleja para el modelo, dónde nos encontramos con una R bastante baja, observamos

que se obtienen menores valores de FO con la resolución exacta aunque no distan mucho de la resolución

heurística. El inconveniente es que al aumentar el tamaño de las barras de almacén y de las demadas el tiempo

de resolución aumenta considerablemente, hecho que no se dá en la resolución heurística.

02468

10121416182022

3 8 10 21 15 35 35 80

10 30 50 100

Valor de la Función Objetivo R=15%

Resol. Exacta

Resol. Heurística

0.00

40.00

80.00

120.00

160.00

200.00

240.00

3 8 10 21 15 35 35 80

10 30 50 100

Tiempo (min) de resolución R=15%

Resol. Exacta

Resol. Heurística

Page 49: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

37

CÓNCLUSÍÓNES GENERALES

Page 50: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

38

Para concluir, mostraremos aquí las principales conclusiones obtenidas del análisis de resultados.

El Trabajo de Fin de Grado de resolución exacta y heurística del problema de cortes de barras ha querido

afrontar la dualidad de acometer dicho problema con estas dos metodologías, con el objetivo de determiner

cual de las dos es más apropiada.

Una vez resueltos todos los escenarios de las baterías de datos creadas en lenguaje C, los cuales poseen

diferentes características como son número de barras en almacén, demandas, longitudes, … etc. Se ha llegado

a la conclusion de que en la interfaz LINGO se hace complejo el cálculo del óptimo para grandes tamaños de

datos, debido a que el tiempo empleado por éste puede demorar un periodo muy amplio de tiempo. Por lo

contrario para la resolución heurística del problema, pese a no llegar al óptimo, es capaz de lograr una solución

casi tan buena como la aportada por la resolución exacta en infinitamente menos tiempo.

Respecto a baterías de datos más pequeñas y simples del problema, la metodología heurística consumiendo

poco tiempo suele llegar al óptimo en la mayoría de los casos al igual que la metodología exacta, aunque esta

última invirtiendo más tiempo en la resolución, pero dentro de la normalidad.

La realización de este proyecto personalmente me ha servido para aumentar mis conocimientos en la

asignatura de Métodos Cuantitativos de Gestión de 3er curso del Grado en Ingeniería de Organización

Industrial, también me ha ayudado para mejorar a la hora de programar en Visual Basic y a saber implementar

modelos matemáticos basados en problemas reales con el programa LINGO.

Page 51: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

39

BÍBLÍÓGRAFÍ A

Page 52: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

40

LINGO user´s guide

Editorial: LINDO SYSTEM INC.

Tesis Doctoral: Métodos y Algoritmos para resolver problemas de Corte unidimensional en entornos

realistas. Aplicación a una empresa del Sector Siderúrgico.

Autor: Carlos P Gracia Calandín

Universidad Politécnica de Valencia, 2013

C/C++ Curso de Programación 2015

Autor: Miguel Angel Acera García

Editorial: Anaya Multimedia, 2014

Heurísticas: Ciencias Experimentales y Tecnología

Autores: Abraham Duarte Muñoz, Juan José Pantrigo Fernández, Micael Gallego Carrillo

Editorial: Dykinson, 2008

Page 53: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

41

Page 54: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

42

ANEXÓS

Page 55: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

43

9.1. ANEXO A: Programación de la Generación de Problemas

#include <stdio.h>

#include <stdlib.h> #define M 100 //tamaño maximo del vector longitud de barras de almacen (j)

#define N 35 //tamaño maximo del vector longitud demandada por lote (i) y cantidad de barras demandadas por

lote (i)

#define H 107 //semilla de aleatoriedad. Cambiada para cada generación de datos #define R 30 //porcentaje deseado de relacion suma longitud barras almacen - suma longitud barras demandadas

#define E 1 //error permitido en el porcentaje de relacion R

float relacion(float v[], float g[], int d[]); //funcion usada para calcular el valor de R

int main()

{

int j,i,a;

float c=0; //valor del porcentaje de relacion conseguido

float L[M]; //declaracion del vector longitud de barras de almacen

float ld[N]; //declaracion del vector longitud de barras demandadas por lote int D[N]; //declaracion del vector cantidad de barras demandadas por lote

/////////////////////////////// GENERACION VECTOR LONGITUD DE BARRAS DE ALMACEN ///////////////////////////////////

srand(H);

for(j=0;j<M;j++)

{ L[j]=rand()%20+10; //otorga un valor aleatorio entre 10 y 30 a cada componente del VECTOR

LONGITUD BARRAS DE ALMACEN

}

/// GENERACION VECTORES CANTIDAD DE DEMANDA DE CADA LOTE Y LONGITUD DE BARRAS DEMANDADAS ///

for(i=0;i<N;i++)

{ a=rand()%100+1; //otorga a la variable "a" un valor entre 1 y 100

if(a<=25)

{

ld[i]=6; //otorga el valor 6 a una componente (i) del vector longitudes de demanda en el caso de que a<=25

}

if(a>25 && a<=50)

{ ld[i]=8; //otorga el valor 9 a una componente (i) del vector longitudes de demanda en el

Page 56: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

44

caso de que 25<a<=50

}

if(a>50 && a<=75)

{

ld[i]=10; //otorga el valor 12 a una componente (i) del vector longitudes de demanda en el caso de que 50<a<=75

}

if(a>75 && a<=100)

{

ld[i]=12; //otorga el valor 15 a una componente (i) del vector longitudes de demanda en el

caso de que 75<a<=100

}

}

for(i=0;i<N;i++)

{ D[i]=rand()%15+5; //otorga un valor aleatorio entero, entre 5 y 20 a cada componente del

VECTOR CANTIDAD DE BARRAS DEMANDADAS POR LOTE

}

/////////////////////////////////////////// COMPARACION DE SUMA DE LONGITUDES //////////////////////////////////////////////// // modifico los valores del vector cantidad de barras demandadas, hasta conseguir la R deseada //

for(i=0;i<N;i++)

{

if(R>c+E) //en el caso de que el valor de R conseguido sea menor al deseado restaremos 1 a una

componente del vector cantidad de barras demandadas

{

D[i]=D[i]-1;

if(D[i]<1) //garantizamos que ninguna demanda sea menor que 1

{

D[i]=1;

}

c=relacion(L, ld, D); //actualizo el valor de la relacion

}

if(R<c-E) //en el caso de que el valor de R conseguido sea mayor al deseado sumaremos 1 a una

componente del vector cantidad de barras de almacen

{

D[i]=D[i]+1;

if(D[i]<1) //garantizamos que ninguna demanda sea menor que 1

{

D[i]=1;

}

Page 57: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

45

c=relacion(L, ld, D); //actualizo el valor de la relacion

}

if(R>c+E && i==N-1) //seguire iterando hasta conseguir el valor de R deseado +-1

{ i=-1;

}

if(R<c+E && i==N-1) //seguire iterando hasta conseguir el valor de R deseado +-1

{

i=-1;

}

if(R>c-E && R<c+E)

{

i=N;

}

}

c=relacion(L, ld, D);//vuelvo a calcular el valor de R para ver cual es el definitivo

///////////////////////////////////////////////////////////// SACO POR PANTALLA /////////////////////////////////////////////////////////

printf("MODEL: \n\n\n\nSets:\n\nBalmacen/1..%d",M);

printf("/: L, S, y1, y2, alpha1, alpha2; \n\nBdemanda/1..%d", N);

printf("/: ld, D; \n\nBalmacen_Bdemanda(Balmacen, Bdemanda): x;\n\nEndSets\n\n\n\n");

printf("Data:\n\n");

//DATOS GENERADOS

printf("L= "); //saco por pantalla el valor del vector longitud de barras de almacen

for(j=0;j<M;j++)

{

printf(" %f", L[j]);

}

printf(";");

printf("\n \n");

printf("ld= "); //saco por pantalla el valor del vector longitudes de barras de lotes

for(i=0;i<N;i++)

{

printf(" %f", ld[i]);

} printf(";");

printf("\n \n");

Page 58: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

46

printf("D= "); //saco por pantalla el valor del vector cantidad de barras por lote

for(i=0;i<N;i++)

{ printf(" %d", D[i]);

}

printf(";");

printf("\n\nEndData\n\n\n\n");

//RESTRICCIONES

printf("@for(Balmacen(j): @sum(Bdemanda(i):(ld(i)*x(j,i)))+S(j) = L(j));\n\n");

printf("@for(Bdemanda(i): @sum(Balmacen(j): x(j,i)) = D(i));\n\n");

printf("@for(Balmacen(j): S(j) = (y1(j)) + y2(j));\n");

printf("@for(Balmacen(j): alpha1(j) + alpha2(j) <=1);\n\n");

printf("@for(Balmacen(j): 0 <= y1(j));\n");

printf("@for(Balmacen(j): y1(j) <= ((2-0.01)*alpha1(j)));\n");

printf("@for(Balmacen(j): (2*alpha2(j)) <= y2(j));\n");

printf("@for(Balmacen(j): y2(j) <= (L(j)*alpha2(j)));\n\n\n\n");

//FUNCION OBJETIVO

printf("Min = @sum(Balmacen(j): y1(j));\n\n\n\n");

//DECLARACION DE VARIABLES

printf("@for(Balmacen(j): @BIN(alpha1(j)));\n");

printf("@for(Balmacen(j): @BIN(alpha2(j)));\n\n");

printf("@for(Balmacen(j): @for(Bdemanda(i): @GIN(x(j,i))));\n\n");

//VALOR DE R

printf("!La relacion almacen-demanda es del: %f",c);

printf(" porciento;");

printf("\n\n\n\nEND");

return 0;

}

float relacion(float v[], float g[], int d[]) //funcion usada para calcular el valor de R

{

int j, i; float a=0, b, c;

for(j=0;j<M;j++)

{ a=a+v[j]; //bucle que suma todas las componentes del vector longitud de barras de almacen

}

b=0;

Page 59: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

47

for(i=0;i<N;i++)

{

b=b+(d[i]*g[i]); //bucle que multiplica la cantidad demandada por la longitud solicitada de cada lote y las suma

}

c=100-((b/a)*100); //calculo el valor de R actual

return c;

}

9.2. ANEXO B: Programación de la Heurística

#include <stdio.h> #include <stdlib.h>

#define M 100 //tamaño maximo del vector longitud de cada barra de almacen (j)

#define N 80 //tamaño maximo del vector longitud demandada por lote (i) y cantidad de barras demandadas por

lote (i) #define H 48 //semilla de aletoriedad. Cambiada para cada generación de datos

#define R 50 //porcentaje deseado de relacion suma longitud barras almacen - suma longitud barras demandadas

#define E 1 //error permitido en el porcentaje de relacion R

void GeneracionDatos (float L[], float ld[], int D[], float c); //funcion usada para generar los datos

float relacion(float v[], float g[], int d[]); //funcion usada para calcular el valor de R cada vez que el vector

demanda es modificado float FuncionObjetivo(float P[]); //calcula el valor de la funcion onjetivo de nuestro problema

int main()

{

int i, j, k;

float L[M];

float ld[N];

int D[N];

int X[M][N]; //Variable entera que representa el número de cortes realizados a la barra (j) para

satisfacer la demanda del lote (i)

float FO=0;

int p=0;

float c; //valor del porcentaje de relacion conseguido

GeneracionDatos(L, ld, D, c); //Genero los datos usados en dicha Heuristica

for(i=0; i<N; i++) //Damos valor 0 a todas las componentes de la matriz, puesto que como minimo el

valor de dicha variable debe ser 0

{

for(j=0; j<M; j++)

{

Page 60: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

48

X[j][i]=0;

}

}

///////////////////////////////////// GENERACION DE UNA SOLUCION INICIAL ///////////////////////////////////////////////

//Regla de despacho FIFO, primero en ser candidato es el primero en ser asignado

for(i=0; i<N; i++)

{

for(j=p; j<M; j++)

{ if(L[j]>=ld[i] && D[i]>0) //Miramos si la barra que tenemos en el almacen tiene una

longitud igual o superior a la demandada por dicho lote

{ //y si para ese lote tenemos cubierta la demanda. En ese caso, daremos

paso a las siguientes operaciones: X[j][i]=X[j][i]+1; //aumentaremos en una unidad nuestra variable del problema,

es decir, haremos un corte a la barra j para satisfacer la demanda i

L[j]=L[j]-ld[i]; //el valor de la longitud de nuestra barra de almacen se actualizará, de forma que quedará el restante de haber realizado el corte

D[i]=D[i]-1; //la demanda para dicho lote se vera satisfecha en una unidad, por

lo que le restaremos 1

}

if(D[i]==0)

{ j=M; //en el caso de que la demanda del lote i ya haya sido satisfecha, pararemos

el bucle y pasaremos al siguiente lote i

}

if(L[j]>=ld[i])

{ j=j-1; //si el sobrante de la barra de almacen evaluada sigue teniendo una

longitud con la que poder satisfacer la demanda del lote la volveremos a cortar

}

}

if(p>0) //en el caso de la reasignacion, al comenzar a asignar a una barra que no es la primera

debemos contemPlar la opcion de asignacion a las barras anteriores a la que se ha comenzado a asignar

{

for(j=0; j<p; j++)

{ if(L[j]>=ld[i] && D[i]>0)

{ X[j][i]=X[j][i]+1;

L[j]=L[j]-ld[i];

D[i]=D[i]-1;

}

}

}

Page 61: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

49

if(D[i]>0) //garantizo la satisfaccion de la demanda, de forma que si no ha sido ya satisfecha

reasignariamos los cortes por la siguiente barra de almacen y no por la j=0

{ i=i-1;

p=p+1;

} }

FO=FuncionObjetivo(L);

printf("\nFO solucion inicial= %f", FO);

/////////////////////////////////////////////////////// LOCAL SEARCH //////////////////////////////////////////////////////////

for(i=0; i<N; i++) // haremos el seguimiento de los valores segun los lotes (i)

{

for(j=0; j<M; j++)

{ if(X[j][i]>0 && L[j]<2) //para cada barra de almacen que haya sido cortada con el fin de

satisfacer la demanda del lote i y cuyo sobrante sea <2 haremos:

{

for(k=0; k<M; k++)

{

if(L[k]>=ld[i] && L[k]-ld[i]>=2 && k!=j) //buscar una barra de almacen

con sobrante suficiente para reemplazar la demanda cubierta por la otra barra y que el resultado de cortarla no perjudique la FO (el sobrante final no sea <2)

{

X[j][i]=X[j][i]-1; //suprimiriamos el cortar la barra inicial, que nos supone una penalizacion para la FO

X[k][i]=X[k][i]+1; //cortariamos la nueva barra, la cual no

perjudica nuestra FO

L[j]=L[j]+ld[i]; //actualizo el valor del sobrante de la barra inicial (incrementa)

L[k]=L[k]-ld[i]; //actualizo el valor del sobrante de la nueva

barra (disminuyo) k=M; //una vez encontrada una nueva barra que me mejore la FO

paso a otra barra que me esté perjudicando la FO

}

}

}

}

}

FO=FuncionObjetivo(L);

printf("\nFO LS= %f", FO);

Page 62: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

50

return 0;

}

void GeneracionDatos(float L[], float ld[], int D[], float c)

{ int j,i,a;

///////////////////////////////// GENERACION VECTOR LONGITUD DE BARRAS DE ALMACEN ////////////////////////////////

srand(H);

for(j=0;j<M;j++)

{ L[j]=rand()%20+10;

}

/////////// GENERACION VECTORES CANTIDAD DE DEMANDA DE CADA LOTE Y LONGITUD DE BARRAS DEMANDADAS ////////// for(i=0;i<N;i++)

{

a=rand()%100+1; if(a<=25)

{

ld[i]=6;

}

if(a>25 && a<=50)

{ ld[i]=8;

}

if(a>50 && a<=75)

{

ld[i]=10;

}

if(a>75 && a<=100)

{ ld[i]=12;

}

}

Page 63: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

51

for(i=0;i<N;i++)

{

D[i]=rand()%15+5;

}

///////////////////////////////////// COMPARACION DE SUMA DE LONGITUDES //////////////////////////////////////////////

// modifico los valores del vector cantidad de barras demandadas, hasta conseguir la R deseada //

for(i=0;i<N;i++)

{ if(R>c+E)

{

D[i]=D[i]-1;

if(D[i]<1)

{ D[i]=1;

}

c=relacion(L, ld, D);

}

if(R<c-E)

{

D[i]=D[i]+1;

if(D[i]<1)

{

D[i]=1;

}

c=relacion(L, ld, D);

}

if(R>c+E && i==N-1)

{ i=-1;

}

if(R<c+E && i==N-1)

{

i=-1;

}

if(R>c-E && R<c+E)

{

Page 64: Resolución Exacta y Heurística del Problema de Cortes de ...

Trabajo de Fin de Grado:

RESOLUCIÓN EXACTA Y HEURÍSTICA DEL PROBLEMA DE CORTES DE BARRAS

52

i=N;

}

}

}

float relacion(float v[], float g[], int d[])

{

int j, i;

float a, b, c;

a=0;

for(j=0;j<M;j++)

{

a=a+v[j];

}

b=0;

for(i=0;i<N;i++)

{

b=b+(d[i]*g[i]);

}

c=100-((b/a)*100);

return c;

}

float FuncionObjetivo(float P[])

{

float FO=0; //declaracion de la variable Funcion Objetivo del problema, la cual siempre será >=0

int j;

for(j=0; j<M; j++)

{

if(P[j]<2)

{

FO=FO+P[j];

}

}

return FO;

}