Vous êtes sur la page 1sur 21

Escuela de Ingeniera Industrial

Tarea n 2 Investigacin de Operaciones II por

Daniela Retamales Gmez Omar Toro Seplveda

Septiembre, 2011

ndice
Glosario ..............................................................................................................................3 Lista de abreviaturas y siglas ..............................................................................................4 Lista de figuras ...................................................................................................................5 Introduccin ......................................................................................................................6

2 Descripcin general del problema MCLSP...................................................................7 2.1 Descripcin particular del problema MCLSP ................................................................7 2.2 Formulacin matemtica ...............................................................................................7 2.2.1 Parmetros y variables ...............................................................................................7 2.2.2 Modelo matemtica y restricciones.............................................................................8 2.2.3 Representacin grfica ...............................................................................................9 2.3 Resultados obtenidos..................................................... Error! Bookmark not defined. 2.3.1 Resultados obtenidos de cada instancia ...................... Error! Bookmark not defined. 3 Conclusin .................................................................... Error! Bookmark not defined.2 Bibliografa ...................................................................................................................... 13 Anexo 1 Datos de la instancia 1 ....................................... Error! Bookmark not defined. Anexo 2 Datos de la instancia 2 ..................................................................................... 16 Anexo 3 Cdigo .............................................................................................................. 17 Anexo 4 Tabla de resultados instancia 1 ........................................................................ 18 Anexo 5 Tabla de resultados instancia 2 ........................................................................ 19

Glosario
Software: Conjunto de programas, instrucciones y reglas informticas para ejecutar ciertas tareas en una computadora. Setup: preparacin de la maquinaria para iniciar la produccin. JAVA: lenguaje de programacin orientado a obejetos. C-plex: Programa de optimizacin IBM: (International Business Machines), empresa multinacional de programas y equipos informticos.

Lista de abreviaturas y siglas


MCLSP: Problema del tamao de lote capacitado escenario Multiproducto (Multi-item Capacitated Lot-Sizing Scheduling Problem) F.O.: Funcin Objetivo s.a.: sujeto a und: unidad de producto $: unidades monetarias

Lista de figuras
Figura 1.1 Representacin grfica de MCLSP.

1 Introduccin
En este informe se presenta el Problema del Tamao de Lote Capacitado con Multiproducto (MCLSP), su definicin, su estructura a travs de un diagrama, y una resolucin real a un problema ficticio dado. El MCLSP consiste en planificar produccin e inventario, y es un tema muy estudiado en cursos de investigacin de operaciones, debido a la utilidad que presenta para las empresas o industrias la aplicacin de la solucin de estos problemas. En esta oportunidad, el grupo de trabajo resuelve este complejo problema a travs del uso del lenguaje de programacin JAVA y la herramienta para resolucin de problemas de programacin lineal CPLEX. CPLEX de IBM, resuelve tanto programacin entera, como grandes problemas de programacin lineal, ya sea usando variantes primarias o duales del mtodo simplex, problemas de programacin cuadrtica (rea convexa o no), adems de otros problemas relacionados con la optimizacin y programacin. En esta ocasin, y durante la extensin del informe se muestra tanto el problema presentado como la resolucin a travs de las herramientas sealadas para su realizacin. Bsicamente se trabaja con un modelo ficticio en el cual se aplican todos los conocimientos adquiridos en el curso de investigacin operacional II.

2 Descripcin general del MCLSP


Este problema consiste en decidir un plan de produccin para un sistema de N tem (productos) durante T perodos de tiempo, es decir, se debe decidir qu cantidad producir y almacenar de cada producto en cada uno de los perodos. Esta decisin se basa en la minimizacin de costos, tanto de produccin (costo por unidad producida ms un costo fijo), como costos de inventario, satisfaciendo cada una de las demandas respectivas a cada perodo. El MCLSP, trabaja bajo el supuesto de un nico recurso productivo, es decir, posee una sola mquina que debe compartirse en la produccin de los diferentes tems (N). Este recurso productivo a la vez tiene una capacidad limitada de produccin en cada perodo, la cual debe ser respetada por el modelo matemtico.

2.1 Descripcin particular del MCLSP


Se presentara un problema inventado, por la falta de datos reales, para la realizacin de clculos. Como sabe el problema de MCLSP, posee varios parmetros, los cuales tiene valores asignados, tales como los costos, demandas entre otros. El caso ser de la empresa de productos de calzado, quien lanzara los tres nuevos modelos de zapatillas de la temporada de verano. Junto a esto el gerente de la compaa quiere decidir cul ser el calendario de produccin segn las estimaciones de demanda para los prximos 12 meses.

2.2 Formulacin matemtica


Se dise un modelo basado en los ejemplos vistos en clases de Investigacin Operacional II, para enfrentar el problema designado, por lo que se presenta a continuacin el respectivo planteamiento matemtico del problema junto con sus definiciones de parmetros, variables y formulacin general.

2.2.1 Parmetros y Variables


A continuacin se definirn los parmetros y variables de decisin del problema matemtico MCLSP. Parmetros del problema y CSit = y CPit = y CIit = y = Costo de fijo de produccin (setup) para el tem i en el periodo t. ($) Costo unitario de produccin para el tem i en el periodo t. ($/und) Costo unitario de inventario para el tem i en el periodo t. ($/und) Demanda de productos del periodo t, para el tem i. (und)

y ai = y Kt =

Uso de capacidad unitaria del tem i. (tiempo/und) Capacidad total disponible en el perodo t. (tiempo)

Variables de decisin del problema y Xit = Cantidad producida del tem i en el periodo t. (und) y Iit = Nivel de inventario almacenado del tem i al final del periodo t. (und) y Yit = Variable de binaria que indica (1) si se produce el tem i en el periodo t o (0) si no se produce el tem i en el periodo t. (adimensional)

2.2.2 Modelo matemtico y restricciones


En este tem se desarrolla el modelo matemtico del problema planteado, donde se presenta la funcin objetivo junto con las restricciones correspondientes a dicho problema. Modelo matemtico La funcin objetivo busca minimizar los costos relacionados con la produccin de cada producto e inventario en todos los periodos.







S.a. El problema debe cumplir con la satisfaccin de la demanda para cada periodo en que se desarrolle el ejercicio. Es importante sealar que para el problema MCLSP estudiado, siempre habr demanda de produccin y no oferta. Esta restriccin procura que se respete la condicin de borde, es decir que mantenga una relacin entre lo producido, lo inventariado y la demanda de un periodo hacia el siguiente, para cada producto.  

La siguiente restriccin alude a la capacidad de un determinado periodo, y que la produccin en tal periodo no debe ser superior a su capacidad total.



Si se decide producir un producto i en un cierto periodo, la variable de decisin debe permitir activar la produccin para dicho producto en tal periodo, la cual no debe sobrepasar la capacidad del recurso productivo. Esta restriccin se muestra a continuacin.  

Finalmente, se incluyen las restricciones de integralidad correspondientes a este problema.       

2.1.3 Representacin grfica


Como se muestra a continuacin, esquemticamente el problema se representa como un nodo ficticio (el nodo fantasma), rectngulo celeste que representa el nico recurso productivo, donde se contiene la totalidad de la produccin. Este nodo fantasma enva Xit productos a cada perodo, representado por el rectngulo crema, quien va a poseer cantidades de cada producto las cuales pueden ser trasferidas a los perodos siguientes.

Figura 1.1 Representacin grafica de MCLSP. Lo grande del esquema, se debe a la gran cantidad de flujos, y cada uno con sus N variedades de productos. Se ha querido demostrar de forma visual el problema y exponer de algn modo, que no solo el recurso productivo satisface cada perodo, si no que tambin es posible que un perodo pueda recibir productos del periodo anterior.

2.3 Resultados obtenidos.


Para la resolucin de este problema se utiliz el lenguaje de programacin Java, especficamente con el programa Eclipse, el cual permite desarrollar el cdigo correspondiente. A travs de Java se importa el paquete correspondiente a C-plex (que pertenece al programa Ilog) permitiendo ocupar todos sus mtodos para la resolucin del problema. Java nos permite resolver un problema de optimizacin, determinando un gran nmero de variables. En la resolucin, Java obtiene los parmetros, que bajo una formulacin correcta son procesados con herramientas importadas de C-plex. ste nos permite encontrar una solucin al modelo segn los parmetros ingresados. Finalmente, los

datos que corresponden a variables respuestas calculados por el C-plex son entregadas en un archivo tipo Excel. Con el cdigo correspondiente, mostrado en el anexo 3, y los parmetros, Java en conjunto con las herramientas de C-plex es capaz de entregar una solucin al problema planteado. A continuacin se comentaran los resultados de cada instancia, y en la parte de los anexos se encontraran los datos de los parmetros de cada problema.

2.3.1 Resultados obtenidos en cada instancia


Debido a la cantidad de variables los resultados de ambas instancias se mostraran en los anexos; el Anexo 4 para la instancia 1 y en el Anexo 5 para la instancia 2.

3 Conclusin
En el mbito de la ingeniera industrial, la resolucin de problemas de optimizacin es una de las reas en que como profesionales los integrantes del grupo podran trabajar, por lo que este trabajo les entreg herramientas para su futuro desempeo profesional. Generalmente los conocimientos adquiridos en el aula no poseen una aplicacin prctica directa en el corto plazo, por lo que este proyecto fue muy atractivo, ya que permiti utilizar los conocimientos aprendidos en herramientas computacionales reales, sacndolo de la abstraccin del papel a una aplicacin computacional que permiti comparar resultados de dos instancias, de manera ms tangible. El proyecto fue exitoso, tanto en su planteamiento, como en su resolucin, ya que dado un problema ficticio de MCLSP, se pudo resolver de buena manera con IBM CPLEX. Se dieron las instancias de manera correcta, y las variables mostraron resultados coherentes. Finalmente cabe destacar la unin entre los conocimientos aprendidos durante los primeros semestres de la carrera y el actual perodo, ya que el presente trabajo utiliz elementos de los cursos de Tecnologas de la Informacin y Estructuras de Datos y por supuesto del curso de Investigacin Operacional II.

4 Bibliografa
http://www.scielo.br/scielo.php?pid=S0101-74382005000300010&script=sci_arttext http://www.meiss.com/download/SC-02-Federgruen-Meissner.pdf

Anexos

Anexo 1 Datos de la instancia 1


D it 1 2 3 4 5 6 7 8 9 10 11 12 1 8239 4024 8969 7201 9608 8615 8472 2114 9083 2819 1042 4728 2 8871 4525 8149 6089 9029 1917 5488 8960 5636 7205 4181 3230 3 6933 2046 5050 1282 1109 7162 6051 1093 8334 5818 8771 4221 CS it 1 2 3 4 5 6 7 8 9 10 11 12 1 5806 9119 7280 827 539 1768 4553 592 6890 9107 7141 9021 2 7200 7069 1405 898 6532 7017 6647 6856 5093 4542 4790 1183 3 6041 9495 3234 28 4903 5410 6391 2444 5717 2841 4361 1687

CP it 1 2 3 4 5 6 7 8 9 10 11 12

1 2441 2194 214 2480 3539 3462 3251 113 1057 338 1760 507

2 25 654 2349 73 3884 1371 2122 716 3770 2872 2421 197

3 3749 64 2748 2796 202 3998 945 1234 1024 3915 2230 254

CI it 1 2 3 4 5 6 7 8 9 10 11 12

1 21 414 289 436 441 272 496 96 133 333 385 409

2 473 97 206 126 147 400 43 350 400 81 172 104

3 307 212 86 384 440 240 67 21 438 404 339 21

ai 1 2 3

i 3 2 4

Kt 1 2 3 4 5 6

t 6768 21550 23924 8106 34489 47315

Kt 7 8 9 10 11 12

t 8481 16469 427 21369 11661 2304

Anexo 2 Datos de la instancia 2


D it 1 2 3 4 5 6 7 8 9 10 11 12 1 7931 5868 5630 9587 5477 7838 7632 9050 3454 3886 5626 4213 2 9390 7140 5665 5260 3458 3530 1994 6747 2622 3072 9941 6394 3 6337 1776 9639 6129 6374 6343 9428 5256 3973 2166 588 4036 CS it 1 2 3 4 5 6 7 8 9 10 11 12 1 1966 4557 2942 754 8260 5652 4035 5280 3595 1265 7982 2754 2 4559 8311 9487 8197 95 3566 9781 9337 6488 8542 3352 1684 3 9633 5224 9528 3647 590 9378 5474 5013 2668 6378 6254 5879

CP it 1 2 3 4 5 6 7 8 9 10 11 12

1 627 66 3396 1110 3583 3356 3245 2785 1321 1715 3238 2188

2 1822 814 3030 3003 2029 774 710 1131 2903 26 3474 823

3 758 2992 736 782 2499 1696 700 1746 3565 2564 1268 2153

CI it 1 2 3 4 5 6 7 8 9 10 11 12

1 54 168 149 237 494 346 362 47 320 418 249 157

2 198 450 327 445 287 192 77 262 86 403 84 152

3 405 432 394 289 53 87 440 47 403 493 240 380

ai 1 2 3

i 5 4 3

Kt 1 2 3 4 5 6

t 47421 10212 34722 37387 13594 10531

Kt 7 8 9 10 11 12

t 2921 24137 2535 9398 28691 25592

Anexo 3 Cdigo
import import import import import import import import import import import import import ilog.concert.IloIntVar; ilog.concert.IloLinearNumExpr; ilog.concert.IloNumVar; ilog.concert.IloNumVarType; ilog.cplex.IloCplex; java.io.File; java.io.IOException; jxl.Sheet; jxl.Workbook; jxl.write.Label; jxl.write.Number; jxl.write.WritableSheet; jxl.write.WritableWorkbook;

public class CLSPMULP { public static void main(String[] args)throws IOException{ // inicializacion de parametros. int productos=0; int periodos=0; int demanda[][]=null; int CInventario[][]=null; int CProduccion[][]=null; int CSetup[][]=null; int VolProd[]=null; int CapPer[]=null; // Lectura e inicializacion de parametros desde una hoja excel try{ // Cargamos archivo excel Workbook excel=Workbook.getWorkbook(new File("C:/Users/alex/Desktop/CLSPTAREA2.xlsx")); Sheet sheet=excel.getSheet(0);//leemos la primera hoja productos=Integer.parseInt(sheet.getCell(2, 31).getContents()); periodos=Integer.parseInt(sheet.getCell(2, 32).getContents()); CSetup=new int[productos][periodos]; for(int i=0;i<productos;i++){ for(int j=0;j<periodos;j++){ CSetup[i][j]=Integer.parseInt(sheet.getCell(j+2,i+4).getContents()); } }//cierre de for(), termino de llenado de setup. CProduccion=new int[productos][periodos]; for(int i=0;i<productos;i++){ for(int j=0;j<periodos;j++){ CProduccion[i][j]=Integer.parseInt(sheet.getCell(j+2,i+12).getContents()); } }// llenado de Costos de produccion CInventario=new int[productos][periodos]; for(int i=0;i<productos;i++){ for(int j=0;j<periodos;j++){ CInventario[i][j]=Integer.parseInt(sheet.getCell(j+2,i+19).getContents()); } }// llenado de costos de inventario

demanda=new int[productos][periodos]; for(int i=0;i<productos;i++){ for(int j=0;j<periodos;j++){ demanda[i][j]=Integer.parseInt(sheet.getCell(j+2,i+27).getContents()); } }// llenado de datos de demanda VolProd=new int[productos]; for(int i=0;i<productos;i++){ VolProd[i]=Integer.parseInt(sheet.getCell(2,i+35).getContents()); } CapPer=new int[periodos]; for(int i=0;i<periodos;i++){ CapPer[i]=Integer.parseInt(sheet.getCell(2,i+41).getContents()); } excel.close(); }catch(Exception ex){ ex.printStackTrace(); System.out.println(ex.getMessage()); System.out.println("Fall la lectura de parmetros"); } try{ //Declara e inicializa el objeto modelo cplex que va a contener las variables, restricciones, funciones objetivo, etc IloCplex cplex= new IloCplex(); IloNumVar[][] cantidad=new IloNumVar[productos][periodos]; IloIntVar[][] DescProd=new IloIntVar[productos][periodos]; IloNumVar[][] inventario=new IloNumVar[productos][periodos]; int pp=0; String[] nombres=new String[periodos];//Arreglo auxiliar de nombres de variables for(int i=0;i<productos;i++){ for(int j=0; j<periodos;j++) nombres[j]="Producto_"+(i+1)+"_Periodo_"+(j+1); pp=nombres.length; cantidad[i]=cplex.numVarArray(pp, 0.0, Double.MAX_VALUE, nombres); } //Devuelve un arreglo de variables numericas String[]decision=new String[periodos];//Arreglo auxiliar de nombres de variables for(int i=0;i<productos;i++){ for(int j=0; j<periodos;j++) decision[j]="Se_Produce_"+(i+1)+"_En_el_Periodo_"+(j+1); pp=decision.length; DescProd[i]=(IloIntVar[]) cplex.numVarArray(pp, 0.0, 1, decision); } //Devuelve un arreglo de variables numericas String[] almacenaje=new String[periodos];//Arreglo auxiliar de nombres de variables for(int i=0;i<productos;i++){ for(int j=0; j<periodos;j++) almacenaje[j]="Almacenado_del_Producto_"+(i+1)+"_En_el_Periodo_"+(j+1); pp=almacenaje.length; inventario[i]=cplex.numVarArray(pp, 0.0, Double.MAX_VALUE, almacenaje); }

//Devuelve un arreglo de variables numericas //Creacion del modelo IloLinearNumExpr objetivo=cplex.linearNumExpr();//Creo expresion para la FO for(int i=0;i<productos;i++){// Primera sumatoria, de productos for(int j=0;j<periodos;j++){ objetivo.addTerm(cantidad[i][j], CProduccion[i][j]); objetivo.addTerm(DescProd[i][j], CSetup[i][j]); objetivo.addTerm(inventario[i][j], CInventario[i][j]); } } //Ingreso de funcion objetivo con direccion de optimizacion cplex.addMinimize(objetivo); //Restricciones de balance IloLinearNumExpr expresion=cplex.linearNumExpr(); for(int j=1;j<periodos;j++){//periodo expresion=cplex.linearNumExpr(); for(int i=0;i<productos;i++){ expresion.addTerm(cantidad[i][j-1], 1); expresion.addTerm(inventario[i][j-1], 1); expresion.addTerm(inventario[i][j], -1); cplex.addEq(expresion, demanda[i][j],"balance_en_ "+(j+1));//addLe(mayor o igual) addGe(menor o igual) } } IloLinearNumExpr expresionDos=cplex.linearNumExpr(); for(int j=0;j<periodos;j++){//periodo expresionDos=cplex.linearNumExpr(); for(int i=0;i<productos;i++) expresionDos.addTerm(cantidad[i][j], VolProd[i]); cplex.addGe(expresionDos, CapPer[j] ,"produccion_en_"+(j+1));//addLe(mayor o igual) addGe(menor o igual) } IloLinearNumExpr expresionTres=cplex.linearNumExpr(); IloLinearNumExpr expresionTresN=cplex.linearNumExpr(); for(int j=0;j<periodos;j++){//periodo expresionTres=cplex.linearNumExpr(); for(int i=0;i<productos;i++){ expresionTres.addTerm(cantidad[i][j], 1); expresionTresN.addTerm(DescProd[i][j], 1000000); } cplex.addGe(expresionTres, expresionTresN,"balance_en_ "+(j+1));//addLe(mayor o igual) addGe(menor o igual) } //Se resuelve el modelo cplex.setParam(IloCplex.DoubleParam.TiLim, 60);// tiempo limite de la ejecucion (sg) cplex.exportModel("C:/Users/alex/Desktop/CLSPMulti.lp");//Exporta un archivo lp if(cplex.solve()){ System.out.println("Funcin Objetivo "+cplex.getObjValue()); WritableWorkbook workbook=Workbook.createWorkbook(new File("C:/Users/alex/Desktop/CLSPMulti.xlsx"));//Crea archivo excel

WritableSheet sheet=workbook.createSheet("Funcion Objetivos y Variables", 0);//Crea hoja en archivo excel sheet.addCell(new Label(0,0,"Funcion Objetivo"));//Agrega celda label sheet.addCell(new Number(1,0,cplex.getObjValue()));//Agrega celda numero for(int i=0;i<productos;i++){ for(int jj=0;jj<periodos;jj++){ sheet.addCell(new Label((1),(i+2),"Produccion_Producto "+(i)));//Agrega celda label sheet.addCell(new Label((jj+2),(1)," Periodo "+(jj))); sheet.addCell(new Number((jj+2),(i+2),cplex.getValue(cantidad[i][jj]))); } } for(int i=0;i<productos;i++){ for(int j=0;j<periodos;j++){ sheet.addCell(new Label((1),(i+8),"Produccion_Set-up "+(i)));//Agrega celda label sheet.addCell(new Label((j+2),(8)," Periodo "+(j))); sheet.addCell(new Number((j+2),(i+9),cplex.getValue(DescProd[i][j]))); } } for(int i=0;i<productos;i++){ for(int j=0;j<periodos;j++){ sheet.addCell(new Label((1),(i+15),"Inventario_Producto "+(i)));//Agrega celda label sheet.addCell(new Label((j+2),(15)," Periodo "+(j))); sheet.addCell(new Number((j+2),(i+16),cplex.getValue(inventario[i][j]))); } } workbook.write();//Escribe el archivo excel workbook.close();//Cierra el archivo excel }else{ System.out.println("NO es factible est mal diseado"); } }catch(Exception exs){ exs.printStackTrace(); System.out.println(exs.getMessage()); System.out.println("Fall el modelo o la escritura de resultados"); } }

Anexo 4 Tabla de resultados instancia 1

Anexo 5 Tabla de resultados instancia 2

Vous aimerez peut-être aussi