OPTIMIZADOR DE CORTES LINEALES

Información sobre el optimizador

El optimizador de cortes lineales tiene como objetivo acercarse a la solución de menor saldo remanente posible. Esto lo logra al combinar y organizar el orden los cortes solicitados hasta cumplir exactamente con la totalidad de lo requerido por el usuario. Este optimizador se divide en 3 partes. La primera consiste en introducir la configuración que establece las condiciones de borde sobre las cuales se basará toda la operación. En la segunda parte se deben introducir las piezas ("cortes") solicitadas en cantidad y longitud. Finalmente, en la tercera parte se muestran los resultados de la operación de optimización junto con información general del proceso.

1. Configuración

En la zona de configuración se deben introducir los valores generales referidos al stock a cortar y sobre las perdidas asociadas a los cortes. Por el contrario, si se establecen en 0 los valores de: mermas, ancho de hoja de sierra, variabilidad de barras y despunte por lado, se realizan los cálculos en un marco ideal (un tanto ficticio). A continuación, las principales configuraciones, de forma de tener idea del impacto debajo se explicará muy por encima el funcionamiento del sistema.

  • Largo de barra: Es el largo total de las barras a cortar en mm. Max: 20000mm

  • Ancho de hoja de sierra: Es el ancho en mm que se despedicia al cortar una pieza por acción del elemento cortante. Max:50mm

  • Despunte (x lado): Aplicable en caso de tener algún tipo de barra con desperfecto en las puntas, de esta forma se puede establecer un despunte en mm, el valor que se ponga se entiende que se recorta de cada lado, en caso de que sea en uno solo simplemente poner la mitad de lo que se despunta. En el despunte no se tiene en cuenta el efecto de la sierra ni las mermas por corte, por lo tanto de requerirlo adicionarlo al valor establecido. Max: 500mm

  • Variabilidad de largo de barras: Se deja este campo en caso de que se quiera restar un valor fijo en mm a cada barra por ej. para compensar efectos de variaciones longitudinales, restando el valor más largo y conservador. Max: 500mm

  • Mermas por corte: Este campo se deja en caso de tener mermas varias en cada corte por factores no especificados por ej. impericia del cortador, errores de cuadratura, variabilidad del proceso, etc. Max: 20mm

  • Iteraciones: Cantidad de veces que se correrá la simulación para obtener los valores de barras óptimas. Valores bajos pueden llegar a resultados muy lejos del óptimo, pero aceleran el tiempo de computo. Al aumentar la cantidad de diferentes medidas a cortar se requiere mayor cantidad de iteraciones. Max:8000

2. Carga de cortes

En esta sección se deben cargar los cortes con la medida buscada y la cantidad deseada, el sistema solo se encargará de adicionar las pérdidas para poder alcanzar el resultado de forma satisfactoria. Siempre se debe introducir el valor buscado(longitud nominal). Max: 20 medidas diferentes.//Max: 100 cortes por medida//Max: 300 cortes total Por ejemplo, si para realizar el marco de una puerta se requieren 2 piezas de 2000mm y 2 piezas 600mm, considerando que la sierra remueve 2mm en cada corte y que el operador tiene una merma por impericia de 1mm al realizar cada corte se establecen los siguientes cortes:

  • Longitud de Corte= Longitud Nominal + Ancho de hoja de Sierra + Mermas por corte
  • 2003mm=2000mm+2mm+1mm
  • 603mm=600mm+2mm+1mm
Cantidad Longitud Nominal Perdidas Longitud de Corte
2 600 3 603
2 2000 3 2003

Se define pérdidas a la suma entre las mermas de corte y el ancho de la hoja de sierra.

3. Longitud de las barras

La longitud de la barra utilizada en los cálculos se ve afectada por la variabilidad de las barras y el despunte declarada en la sección de configuración. Por ejemplo, si para construir una puerta (la del ejemplo del punto anterior) se tiene un stock de barras de 6000m de longitud que por fines estéticos se despuntan 10mm por lado para descartar zonas golpeadas, y luego de esto se tiene una variabilidad de 1mm en la longitud de todas ellas (tolerancia) debido a errores típicos de medición, se establecen las siguientes dimensiones:

  • Barra disponible para cortar= Long. Barra Original - 2XDespunte - Variabilidad
  • 5979mm=6000mm-(2X10mm)-1mm

Finalizando el ejemplo dentro de esos 5979mm se deben acomodar la totalidad de los cortes solicitados incluidas las perdidas por corte. En caso de ser 1 puerta caben perfectamente en cualquier orden obteniéndose un remanente llamado saldo.

  • Saldo= Barra disponible para cortar - (Longitud real medida 1 X Cantidad de cortes medida 1) - (Longitud real medida 2 X Cantidad de cortes medida 2) - ... (Longitud real medida N X Cantidad de cortes medida N)
  • 767mm=5979mmn - (2X603mm) - (2X2003mm)
Barra Ejemplo 1

Hasta aquí es muy simple e intuitivo, pero si en vez de 1 puerta se deben construir 3 ya no es tan trivial establecer el mejor orden para obtener un saldo pequeño.

Barra 1 Ejemplo 2 Barra 2 Ejemplo 2 Barra 3 Ejemplo 2

Y si además de tener que construir 3 puertas se deben construir 2 ventanas de 400mmX200mm el optimizador comienza a ser una ayuda.

Barra 1 Ejemplo 3 Barra 2 Ejemplo 3 Barra 3 Ejemplo 3 Barra 4 Ejemplo 3

4. Funcionamiento

El algoritmo de optimización se divide en 3 etapas, la primera consiste en encontrar barras y combinaciones de cortes posibles, la segunda se orienta a intentar establecer cuales de las barras anteriores son las que satisfacen los cortes solicitados priorizando aquellas que dejen el menor saldo posible y la última etapa consiste en realizar un refinamiento selectivo de los resultados obtenidos.

En la primera etapa se realizan las iteraciones configuradas para obtener mediante un esquema de simulación de montecarlo un elenco de cortes posibles que sea factibles de realizar considerando las longitudes y barras disponibles. Este proceso aleatorio rápidamente encuentra un gran set de barras posibles, siendo necesarias más iteraciones al aumentar el número de medidas diferntes. Por otro lado, no es un clásico ejemplo de montecarlo poniendo cortes random sino que además se simula la cantidad de cortes que tendrá cada barra para poder tener barras incompletas, que serán útiles al llegar cerca del final de la optimización. Este doble proceso hace que el número de iteraciones deba crecer aún más para tener todas las combinaciones posibles, algo claramente inalcanzable superando número pequeño de medidas diferentes.

La segunda etapa realiza un proceso de selección basado en un algoritmo que penaliza las barras de mayor saldo y propone una solución muy buena para problemas de baja complejidad (poca cantidad de medidas diferentes)

Finalmente los resultados pasan por un algoritmo de refinamiento que recalcula el resultado anterior y lo optimiza ya como un conjunto de trabajo finito basado en algunas premisas definidas de forma estática en el código.

Todo esto lleva esencialmente a tener resultados muy buenos para una gran cantidad de problemas cotidianos, pero es posible que en ciertas combinaciones de medidas (sobre muchas diferentes) y eventos aleatorios se llegue una conclusión no tan cercana al punto óptimo.

Hasta aquí no mencioné los algoritmos de graficado y presentación de resultados, pero en sí no hacen a la raíz del core del sistema, a pesar de que fueron muy interesantes de desarrollar.

5. Garantía de funcionamiento

De momento considero que es una solución bastante aceptable en el rango de medidas que lo fuí probando, pero queda en cada uno evaluar si las soluciones son suficientemente aceptables o no. Despúes de todo las computadoras hacen el trabajo y las personas verifican el mismo, para esto último es muy útil el sistema graficador de barras.

Bajo otro escenario de infinitos recursos, matemáticamente creo que sería adecuado plantearlo desde programación lineal entera, aunque no lo hice de esa forma porque no estaba seguro como podía escalar a nivel recursos la resolución del mismo sobre todo al incrementar la cantidad de medidas diferentes. Por otro lado, este desarrollo es directo, sencillo y efectivo y con pocas vueltas lo pude poner en marcha. Dicho esto, sería un interesante desafío, algún día, obtener una alternativa con otro método para poder compararlo en un rango cotidiano de trabajo y sobre todo evaluar velocidades de resolución. Todas las restricciones impuestas sobre el sistema buscan dar un marco seguro de operación pero el sistema se ha probado con valores 10 veces superiores en todos los aspectos con resultados muy buenos.

De momento no almaceno ningún tipo de estadística sobre el tipo de corte o uso del sistema, aunque no descarto hacerlo en algún momento para poder orientar mejor el algoritmo y sus restricciones

Para finalizar, debo reconocer que este proyecto me ayudó a recordar algunos conceptos de investigación operativa (investigación de operaciones) y retomar algunas rutinas de programación. Bajo todo lo expuesto anteriormente, en definitiva no hay garantías de nada, pero eso solamente lo hace un poco más divertido. Así es la vida, tome riesgos, diviértase.

Dachshund Firma