Optimización de ruteo de vehículos empleando búsqueda tabú
Texto completo
(2) TABLA DE CONTENIDO. 1. INTRODUCCIÓN.......................................................................................................5 2. M ARCO TEÓRICO ...................................................................................................6 2.1 . O PTIMIZACIÓN LOGÍSTICA ...............................................................................................6 2.2 . R UTEO DE V EHÍCULOS ....................................................................................................7 2 .2.1 . T SP (Traveling Sales man P roblem)....................................................................7 2 .2.2 . CV RP (C apac itated Vehicle Routing P roblem)....................................................8 2 .2.3 . T CVRP (T ime C ons trained V ehicle Routing P roblem)........................................8 2 .2.4 . CV RPTW (Capac itated V ehicle Routing Problem with Time Windows ).............8 2 .2.5 . PV RP (P eriodic V ehic le Routing Problem)...........................................................9 2.3 . B ÚSQUEDA TABÚ ............................................................................................................9. 3. DESC RIPCIÓN DEL ALGORITMO .....................................................................13 4. DATOS......................................................................................................................70 5. RESULTADOS ........................................................................................................71 5.1 . C OMPARACIÓN ENTRE R ESULTADOS Y M EJOR S OLUCIÓN .................................................. 71 5.2 . FACTORES RELEVANTES EN L A B ÚSQUED A T ABÚ .............................................................. 72 5.3 . O PTIMIZACIÓN DE U BICACIÓN DE B ODE GAS P ARA EL C ASO DE CV RP ................................ 90. 6. CONCLUSIONES Y TRABAJOS FUTUROS ....................................................91 7. ANEXOS ...................................................................................................................92 8. BIBLIOGRAFÍA .................................................................................................... 101. 2.
(3) LISTADO DE TABLAS. Tabla 1. Tabla 2. Tabla 3. Tabla 4. Tabla 5. Tabla 6. Tabla 7. Tabla 8. Tabla 9. Tabla 10. Tabla 11. Tabla 12. Tabla 13. Tabla 14. Tabla 15. Tabla 16. Tabla 17. Tabla 18.. Instancias TSP Simétrico Instancias TSP Asimétrico Instancias C VRP Res ultados TSP Simétrico Res ultados TSP Asimétrico Res ultados C VR P Factores Inc luidos en el Dis eño de Ex perimentos CVRP Factores e Interacciones Incluidas en el ANOVA CVR P Factores e Interacciones Incluidas en la Regresión Lineal CRVP Res umen Modelo Lineal CVR P Coef icientes Modelo CVRP Variables Excluidas del Modelo C VR P Res umen Modelo Lineal TSP Coef icientes Modelo TSP Variables Excluidas del Modelo TSP Comparación de Estrategias de Vecindad Comparación entre 2OPT y 2OPT - Inserción Res ultados Loc alización de Bodegas para C VRP. 3.
(4) LISTADO DE FIGURAS. Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura. 1. Menu del Programa 2. Ventanas de Diálogo para la Captura de Parámetros 3. Mensajes de error de la Capt ura de Parámetros 4. Visualización de los parámetros y campos de captura de inf ormación 5. Visualización de los campos de capt ura de inf orm ación 6. Mensaje de error en la captura de inf ormación 7. Visualización res ultados téc nica de solución inicial 8. Visualización res ultados Bús queda Tabú 9. Com portamiento de la F O respecto al tamaño de la lista Tabú 10. Comport amient o de la F O respecto al tamaño de la Población 11. Comport amient o de la F O respecto al Número de Iteraciones 12. Comport amient o de la F O respecto al Tamaño de la Lista Tabú 13. Comport amient o de la F O respecto al Tamaño de la Población 14. Comport amient o de la F O respecto al Número de Iteraciones 15. Hist ograma, diagrama de dispersión y de probabilidad norm al del ANOVA CVRP 16. Hist ograma y diagrama de probabilidad normal del modelo C VR P 17. Histogram a, diagrama de dispersión y de probabilidad normal del AN OVA TSP 18. Hist ograma y diagrama de probabilidad normal del modelo TSP. 4.
(5) 1. INTRODUCCIÓN. Con el pr esente tr abajo s e busc a deter minar qué tan buenos son los r esultados obtenidos par a el pr oblema de ruteo de vehíc ulos, es pecífic amente de TSP (Trav eling Salesman Problem) y CV RP (Capacitated Vehic le Routing Pr oblem), cuando se emplea la meta-heur ístic a Bús queda Tabú. Para este fin se desarrolló un algor it mo que repres enta esta meta- heur ís tica y que busca dar soluc ión a estos dos pr oblemas; como datos s e emplearon algunas de las instancias que s e enc uentran en la liter atura. Otro de los pr incipales objetivos que s e pers eguía con esta inv estigac ión era realizar un análisis que per mitiera identificar aquellos factores que afec tan de manera signific ativ a los r esultados de la meta- heur ística. Se analiz aron factor es como el tamaño de la lista tabú, tamaño de la población, númer o de iterac iones y estr ategia de vec indad. Par a realizar este análisis s e utiliz aron herr amientas como el diseño de exper imentos , regr esión y el simple análisis de los resultados. Esta inv es tigación también tenía como finalidad gener ar un algoritmo que permitiera además de optimizar las rutas a seguir par a satisfac er la demanda de los c lientes, optimizar a la ubic ación de la bodega. Este análisis s e hizo únic amente con una instancia que se enc ontró en la liter atura, ya que no fue posible encontr ar más. Este pr oyecto res alta la posibilidad de r ealizar este tipo de algor itmos tan útiles en las empr es as actuales con herramientas de fácil acc eso como es Vis ual Basic de Macros de Excel, herr amienta que puede no ser muy efic iente, pero que puede suplir las neces idades de dichas empr esas c on unos excelentes resultados. El documento se enc uentra dividido en cuatr o sesiones pr incipalmente que son: inicialmente se presenta un brev e marc o teór ico par a ubicar al lec tor en el tema a tratar en este pr oyecto; luego se realiza una pequeña descr ipc ión de algunos de los aspectos importantes del algor itmo desarrollado; a continuac ión se pres entan los datos y resultados obtenidos , además de un análisis de los resultados; por último s e pr es entan las conclus io nes de este proy ecto y se proponen algunas investigaciones futuras .. 5.
(6) 2. MARCO T EÓRICO. 2.1. Optimización Logística Uno de los temas de mayor inter és par a las inves tigaciones actuales, es la optimización de proc esos logísticos mediante el uso de difer entes técnicas como Optimización Es toc ástica, Optimizac ión Dif usa, Modelos de Optimizac ión tanto lineales c omo no lineales, Simulación y diferentes Meta- heurís ticas c omo Búsqueda Tabú, Algor itmos Genétic os, Colonias de Hor migas, Recoc ido Simulado, entr e otras , Combinaciones entre estas téc nicas, etc.. Ejemplos de este tipo de investigaciones se enc uentran referenc iados en la bibliogr af ía. Ex iste una vas ta liter atur a r especto a trabajos e inv estigac iones realizadas en las áreas de ruteo de vehíc ulos, al igual que de Búsqueda Tabú, que s on los temas de inter és para el des arr ollo de este pr oyecto. Para la solución de problemas como el planteado en es te proy ecto, se han empleado una gran variedad de técnic as de optimiz ación c ombinator ia. Vale la pena r ecor dar que la optimización combinatoria se enc ar ga de estudiar el modelado y la solución algor ítmica de proble mas en los cuales se pretende optimizar una func ión de var ias variables definidas s obre un c onjunto discr eto. Esta clase de problemas c ombinator ios es muy común en diferentes ár eas como la industria, logís tica, c ienc ias , ingenier ías y en la adminis trac ión de organizaciones. Algunos ejemplos de estas aplicaciones son, entre otros , el ruteo de v ehíc ulos en redes de distr ibuc ión, planific ación de la pr oducc ión, asignac ión de tareas, distr ib ución de r ecursos, entre otr os. Muchas son las téc nicas que han s ido empleadas par a la s olución de este tipo de problemas, entr e ellas la meta- heur ística Bús queda Tabú. Ejemplos de este tipo de inves tigaciones son: el trabajo des arrollado por Sandan Kulturel- Konak, Alice E. Smith y David W. Coit, descr ito en el documento Effic iently s olving the redundancy alloc atio n problem using tabu search [4], en el c ual se busca maximiz ar la confiabilidad y minimiz ar los cos tos (teniendo a alguna de las dos en la función objetiva y la otr a en las res tricc iones) e incluyendo además unas restr icciones de peso consider adas en el sis tema. Otr o ejemplo es el trabajo desarrollado por Yos hia ki Shimizu y Takes hi W ada en optimiz ación logística para loc aliz ación y ruteo con res tricciones de capacidad, empleando una metodología híbrida de Búsqueda Tabú [1]. En esta inves tigación de Shimiz u y. 6.
(7) Wada s e emplea el método Dijkstr a que usa las r elaciones de Lagrange, con el fin de enc ontrar soluciones inic iales que consider en las restricciones de capac ia da, par a luego aplicar Bús queda Tabú a un niv el más alto y encontrar entre ellas la solución global. En el pres ente estudio, se emplearan dos difer entes heur ístic as para el cálc ulo de una soluc ión inic ial y se pr esentarán los resultados obtenidos con cada una de ellas. Es v asta la liter atura ex istente, que trata el problema de ruteo de v ehículo, y divers as las téc nic as empleadas par a s u s oluc ión. La Bús queda Tabú como se pudo observ ar en el caso anter ior es ampliamente empleada par a encontrar las rutas óptimas a seguir en un deter minado sistema. Otr os ejemplos de es te tipo de artíc ulos se r eferencian en la biblio grafía [5], [6], [7], [8], [9] y [10]. En var ios de ellos la bús queda tabú es empleada como una técnic a c omplementar ia, y en otr os como téc nic a pr inc ipal de optimiz ac ión. Entre estos artículos r efer nciados encontr amos algunos multiobjetivos o multicriter ios como el [8] y el [10]. Algunos que además de las r estricciones de c apacidad involucran r estr icciones de tiempo como [6] y [7]. Además de la técnica Bús queda Tabú, otras herr amientas s on empleados como modelos de optimiz ac ión, en el cas o de los artíc ulos [2] y [7], Algoritmos Memétic os [5], Tes t Case Gener ation [6], Simulaciones y s istemas difusos [8], Algoritmos Genéticos [9] y [10], Aprox imaciones Meta- Raps (es decir, adicionando aleatoriedad a la téc nica empleada) [34], otros algoritmos [16] y [17], entr e otr os.. 2.2. Ruteo De Vehículos El problema de Ruteo de Vehículos es uno de los pr oblemas NP- hard de optimización c ombinator ia más c onocidos. Basados en la descr ipción dada por [15], el pr oblema de Ruteo de Vehíc ulos cons iste en un c onjunto de c lientes con demanda conocida que deben ser abastec idos por un único depósito. Par a ell o se cuenta con una serie de vehículos c on la mis ma c apac idad, los cuales deben partir y regr esar al depósito. Cada c liente debe ser v isitado una únic a vez por un vehículo. La soluc ión de este problema lo que busc a es minimiz ar la dis tancia rec orrida por estos vehíc ulos per o satisfac iendo la demanda de todos los c lientes, no violando la capacidad de los vehíc ulos, ni el tiempo disponible de c ada vehículo, ni los tie mpos de entr ega de los c li entes. Dependiendo de las r estr icciones a tener en cuenta el pr oblema de Ruteo de Vehículos puede clas ificarse en:. 2.2.1. TSP (Traveling Salesman Problem) Cuando se trata de soluc ionar este pr oblema teniendo en cuenta únic amente la restr icción de que s e deben v isitar todos los c lientes una única vez, el pr oblema 7.
(8) de Ruteo de Vehíc ulos se conoce como TSP ( Tr av eling Sales man Proble m) o Pr oblema del Agente Viajero. Par a este pr oblema s e c uenta con un único vehículo sin límite de capac idad; y no se tiene un depósito sino n c lientes, en este c aso s in una demanda específica, que deben ser visitados , minimizando la distancia recorr ida. Los datos de entr ada son las distancias entr e los clientes o ubic ación de los mismos.. 2.2.2. CVRP (Capacitated Vehicle Routing Problem) Cuando se tienen en c uenta las restricciones de que se deben vis it ar todos los clientes una única vez y s uplir su demanda total y además no violar la capac id ad de los vehíc ulos, el pr oblema de Ruteo de V ehículos s e conoce como CVRP ( Capacitated V ehic le Routing Problem) o Problema de Ruteo de Vehículos con Capac idad. Par a la soluc ión de este pr oblema se cuenta con n vehículos ( a v eces este n está dado por la definic ión del pr oblema) con capac id ad específica (la mis ma para todos los vehículos) , que deben par tir y regr esar a un depós ito en c ada secuenc ia de visita de clientes . La func ión objetiva sigue siendo minimiz ar la dis tanc ia total r ecorrida por todos los vehículos. Los datos de entr ada s on las distancias entr e los clientes o ubic ación de los mis mos (incluido el o los depósitos) , las demandas de c ada cliente, y la capac idad de los vehíc ulos .. 2.2.3. TCVRP (Time Constrained Vehicle Routing Problem) Cuando se tienen en c uenta las restricciones de que se deben vis it ar todos los clientes una única vez y s uplir su demanda total y además no violar la capac id ad de los v ehículos ni el tiempo que tienen estos v ehículos disponibles para r ealizar s u rec orr ido, el pr oblema de Ruteo de Vehículos se conoc e c omo TCV RP ( Time Constr ain ed V ehicle Routing Problem) o Pr oblema de Ruteo de Vehículos con res tricc iones de tiempo y capacidad. Par a la solución de este problema se c uenta con n vehíc ulos (a veces este n es tá dado por la definic ión del pr oblema) c on capacidad espec íf ic a ( la mis ma par a todos los v ehículos) y tiempo de atención por sec uencia (la misma para todos los vehíc ulos), que deben partir y r egr es ar a un depós ito en cada sec uenc ia de vis ita de c lientes. La func ión objetiva sigue siendo minimizar la distancia total r ecorrida por todos los v ehículos. Los datos de entrada son las distancias entre los clientes o ubic ación de los mis mos (incluido el o los depósitos) , las demandas de c ada cliente, la c apac id ad de los v ehíc ulos y el tiempo de atención de los vehíc ulos.. 2.2.4. CVRPTW (Capacitated Vehicle Routing Problem with Time W indow s) Cuando se tienen en c uenta las restricciones de que se deben vis it ar todos los clientes una única vez y s uplir su demanda total y además no violar la capac id ad de los v ehículos ni el tiempo que tienen estos v ehíc ulos disponibles para realiz ar su recorrido, ni los hor arios de recepción de merc ancía de los clientes, el problema de Ruteo de Vehíc ulos s e conoce como CV RPTW 8.
(9) ( Capacitated Vehicle Routing Proble m w ith Time Window s) o Pr oblema de Ruteo de Vehíc ulos c on c apac idad y v entanas de tiempo. Para la solución de este pr oblema se cuenta c on n vehíc ulos ( a veces este n está dado por la definición del problema) con capacidad espec íf ica (la misma par a todos los vehículos) y tiempo de atenc ión por s ecuencia ( la mis ma para todos los vehículos), que deben partir y r egres ar a un depósito en cada sec uencia de visita de clientes, y además cada cliente especifica un hor ario de rec epción de mercanc ía que debe s er cumplido. La función objetiva sigue siendo minimizar la dis tancia total recorrida por todos los vehículos. Los datos de entr ada son las distancias entr e los c li entes o ubicación de los mismos ( inc luido el o los depósitos), las demandas de c ada cliente, la c apacidad de los vehíc ulos, el tiempo de atenc ión de los vehículos y los hor arios de atenc ión de los clientes .. 2.2.5. PVRP (Periodic Vehicle Routing Problem) Para este caso se tienen en cuenta las res tricciones de que un cliente debe ser visitado al menos un día dur ante un per íodo de días; los v ehículos tienen una capac id ad específica, los c lientes una demanda que debe ser satisfecha y posiblemente unas ventanas de tie mpo que también deben ser cumplidas .. En el pres ente tr abajo s e des arr ollará un algor it mo par a dar s olución a los problemas TSP y CVRP.. 2.3. Búsqueda Tabú Son muc has las técnicas ex istentes para la optimiz ación de pr oblemas. Es tas técnic as emplean métodos de bús queda que pueden ser globales o loc ales. Los globales, c omo s u nombr e lo indica tr atan de encontrar el óptimo global de un pr oblema, mientr as que los loc ales se c oncentran en la v ecindad de la soluc ión generada inic ialmente, por lo que nec esitan de otras técnicas adic ionales para encontrar el óptimo global [11]. Los métodos de búsqueda global lo que pers iguen es no caer en óptimos locales, explor ando c on más efic iencia el espac io de búsqueda. Es to lo hacen trabajando generalmente con un c omponente aleatorio de búsqueda, que hace que s i s e enc uentran en un óptimo local, salten a otr o punto del espacio de búsqueda, donde pueden encontr ar otro óptimo local o pos iblemente global. Algunos de estos métodos son: Recocido simulado, el cual emplea un proc edimiento de enfriado, algunas meta- heur ístic as como GRASP ( Gr eedy Randomized Adaptive Searc h Pr ocedure) , o Búsqueda Tabú, entr e otr os [11]. Las meta-heur ístic as han tenido un gran auge en los últimos tiempos, debido princ ipalmente a la necesidad de hoy en día de dis poner de herr amientas que permitan ofrec er s oluciones ágiles a pr oblemas reales. Los pr oc edimientos Meta-heurístic os s on definidos de la siguiente for ma: [12] 9.
(10) "Los procedimientos M etaheurísticos s on una cl ase de métodos aproximados que están diseñados para r es olver pr oblemas difíciles de optimización c ombinatori a, en l os que los heurísticos clásicos no son ni efecti vos ni eficientes. Las M etaheurís ticas pr oporcionan un marc o general para crear nuevos algoritmos híbridos combinando diferentes conc eptos deri vados de: i nteligencia ar tificial, evol ución biológica y mecanismos es tadísticos" 1. Algunas de estas meta-heur ísticas son: Simulated Annealing, Búsqueda Tabú, GRA SP y Algoritmos Genétic os. Como el pr esente proy ecto emplea la Búsqueda Tabú c omo técnica de optimización, esta br eve res eña bibliográfica se centrar á en la descripc ió n de este proc es o. La búsqueda tabú es un procedimiento iter ativo y heur ístic o par a resolver problemas discretos de optimizac ión combinatoria y de gr an esc ala. Fue propues ta inicialmente por Fr ed Glover , y des de entonc es ha sido aplicada en la solución de una gran c antidad de pr oblemas de optimización [14]. Esta técnica busca escapar de óptimos locales, empleando algunas metodologías como el us o de memorias flexibles . Además esta técnica impone y relaja res tricc iones c on el fin de explor ar ár eas prohibidas, y de hacer cor tes de la región factible, al tener en cuenta las res tricciones que la limitan [13]. La memoria, antes menc ionada, se c lasifica en me moria a cor to plaz o, en la cual se almac ena la historia de los últimos movimientos realizados, esta memoria s e denomina lista tabú, y es la memoria bas ada en la pertenencia, tiene como objetiv o tener un registro de todos los movimientos tabú que pueden hac er que nos regr esemos a un óptimo local de una iter ación anterior; memoria a medio plaz o, en la c ual se registr an los atr ibutos más comunes de un c onjunto de soluc iones, para poder explor ar dicha z ona del espacio de búsqueda; y a lar go plaz o, que lo que hace es div ers ificar la búsqueda sobre regiones que no han sido explorada aún; todo esto con el fin de no c aer en óptimos loc ales . Las dos últimas memor ias oper an como una base de las dos estr ategias de la Bús queda Tabú, que s on las estr ategias de intens ific ación y divers if icac ión de la bús queda, y son las memor ias bas adas en frecuencia. Búsqueda Tabú además de emplear es ta memor ia par a la bús queda del óptimo global, emplea un método llamado niv el de aspirac ión, el c ual per mite esc apar de los óptimos locales, el cual c ons iste en un criterio par a aceptar o no movimientos inc luidos en la lista tabú, es dec ir, cambiar la clasif ic ac ión de tabú a algún mov imiento c uando s u memor ia a corto plaz o ex pir e [11]. “La BT s e cimenta en tres puntos principales: 1. MARTÍ, Rafael. Meta Heurísticos en Optimización Co mbinatoria. [12]. 10.
(11) 1. El us o de estructuras de mem oria basadas en atributos diseñados para permitir criteri os de eval uaci ón e información de búsqueda histórica, la cual s e explota más a fondo que las estruc turas de m emori a rígida (como en ramific ación y acotami ento) o por sistemas de pér dida de memori a (c omo rec ocido sim ulado y otr os métodos aleatorizados). 2. Un mecanismo asoci ado de contr ol, m edi ante el empl eo de estructuras de memori a, bas ado en el interjuego entr e las c ondiciones que r estringen y liberan al proc eso de búsqueda ( envuelto en las restricciones tabú y el criterio de as piración). 3. La incorpor ación de funciones de memori a de difer entes lapsos de tiempo, des de térmi no cor to hasta de término lar go, para im plantar estrategi as que r efuerc en la combinación de movimientos y las carac ter ísticas de s olución que históricam ente se han enc ontrado buenas, mientr as que l as es trategias de diversificación manejan la búsqueda dentr o de nuevas r egi ones. “ 2. La búsqueda tabú s e bas a en dos pr oces os claves que son: r estr ingir la búsqueda al clas ificar un mov imiento c omo tabú o pr ohibido, y liber ar la búsqueda empleando una func ión de memor ia de tér mino c orto que proporciona una estr ategia de olv ido. Esto último debido a que después de varias iteraciones se puede levantar la clasif ic ac ión de tabú par a un movimiento según el niv el de aspir ac ión c omo s e menc ionó anterior mente. Los pas os del algor it mo de Búsqueda Tabú, tomados de la tes is de maestr ía de Rubén Dar ío Ac er o [3], s on los siguientes: 1. 2. 3. 4.. Selección de una s olución inicial x 0. (Q ue debe s er una sol ución factible) Elecci ón del entor no y gener ación de una nueva s oluci ón ν(x0). Evaluación de la función objetivo. Actualización de la mejor sol ución y de la mej or de las mej ores soluciones. 5. Criteri o de finalización. Una v ez se tiene una solución inicial o una s oluc ión actual si no se trata de la primera iter ación, s e busc a el óptimo en el vecindar io analizado, y se acepta el movimiento siempr e y cuando la nuev a solución sea mejor que la actual. En este cas o el criter io de parada puede ser que ya se ha r ealizado un númer o de iterac iones (o tiempo c omputac ional) específic o o que s e c onsidere que el v alor obtenido es cerc ano al óptimo deseado. El pr imer paso es revis ar s i el movimiento es per mitido, es decir , que no es tabú, de otr a for ma, s e aplica el criterio de aspirac ión para analizar el status tabú, c on el fin de dar le una 2. GU TIERRE Z, DE LO S COBO S, P ÉRE Z. Búsqueda Tabú: Un Procedi miento Heurístico para Solucionar Problemas de Opti mización Co mbinatoria.. 11.
(12) segunda oportunidad al movimiento par a clas ificars e como admisible; si no hay ningún mov imiento admis ible, el menos inadmisible es el escogido [15]. La técnic a Bús queda Tabú emplea dos estr ategias para encontrar el óptimo local, las cuales están r elac ionadas con la memor ia a largo plazo, que son la intens if icac ión ( a tér mino medio) y la diversific ación (a tér mino largo). La primera de ellas c onsiste en regr esar a r egiones c atalogadas como buenas, con el fin de ex plor arlas mejor; mientras que la otra c ons iste en analiz ar nuevas áreas no exploradas del espacio de soluciones [15]. Hay que tener en cuenta que el tamaño de la lista tabú es un par ámetro, el c ual no puede s er muy pequeño para ev itar el ciclado, ni muy gr ande par a no restr ingir la búsqueda, pues s e puede impedir llegar a valles profundos , es decir, obtener el óptimo local. Este tamaño puede deter minarse mediante pruebas empír ic as preliminares . También ex isten las listas tabú múltiples , c ada una desarr ollada par a un atr ibuto en particular, c ada uno de los cuales puede tener un pes o, para deter minar el s tatus tabú de los movimientos que contienen [11]. En la siguiente sesión se describirá el algoritmo des arr ollado par a dar s oluc ión al pr oblema del agente v iajer o y de r uteo de v ehíc ulos con c apac idad.. 12.
(13) 3. DESCRIPCIÓN DEL ALGORITMO El algoritmo des arrollado consta de dos partes pr incipalmente que son: a) Una parte r elac ionada más c on la for ma de presentac ión del pr ograma, ya que s e quer ía hac er un desarrollo bastante amigable para el us uar io. b) Una parte r elac io nada más con el fondo del pr oyecto, es decir con la meta-heurístic a empleada. A continuación se descr ibir á detalladamente cada una de las par tes de este desarrollo. a) Esta pr imer a parte inc luye: i.. La declar ac ión de los par ámetr os del algoritmo c aptur ados c omo ventanas dentr o del desarrollo. Par a la meta- heurística Bús queda Tabú, algunos de los par ámetros más importantes son: • El tamaño de la lista tabú. • El númer o de movidas en c ada iter ac ión. • El númer o de iter aciones (o crit er io de par ada escogido, en este caso este fue el selecc ionado). • Númer o de Clientes. • Tipo de datos de ubicación, es decir, si son coordenadas o distancias. • Estr ategia de Soluc ió n Inicial (V ec ino más c erc ano o Clar ke and Wright. • Estr ategia de V ecindad; las opciones s on Mutac ión, Ins erción o 2OPT. Par a el cas o de CVRP hay una opc ión adic io nal que es una estrategia híbrida Inserción – 2O PT. • Cuando s e s elecciona la estr ategia híbrida también se requier e el porcentaje de inserción. Los par ámetros que se tuv ier on en c uenta par a el análisis de parámetr os relevantes en la meta- heurística s on: tamaño de la lis ta tabú, número de mov idas en c ada it erac ión y númer o de iterac iones. A continuación se presenta la parte del código que hace esta declarac ión: 'Declaración de Parámetros del algoritmo Public NumMenu As Integer Public NumClientes Public Tamano_Lista As Integer Public Tamano_Poblaci on As Integer Public NumIteraci ones As Integer Public Tipo_datos As Integer. 13.
(14) ii.. Pr ocedimiento asociada a cada botón de comando para id entificar qué par ámetros s e deben requerir y qué procedimiento ejec utar, ya s ea TSP o CVRP. A continuac ió n se pres enta la parte del c ódigo donde se encuentra es tos pr ocedimientos: 'Procedimi ento que s e llama cuando s e s elecci ona el botón TSP Public Sub T SP() NumMenu = 1 Call MenuT odos (NumMenu) End Sub 'Procedimi ento que s e llama cuando s e s elecci ona el botón CVRP Public Sub CVRP() NumMenu = 2 Call MenuT odos (NumMenu) End Sub. iii.. Pr ocedimiento de captura de parámetr os (estos parámetr os son ingr esados por el c liente; es te proc edimiento también le da formato a la hoja de datos y r es ultados. A continuac ió n se pres enta la parte del c ódigo que hace referenc ia a es te pr oc edimiento: 'Procedimi ento que c aptura los parámetros del algoritmo y da formato 'a l a hoj a de datos y res ultados Public Sub MenuT odos (NumMenu) Works heets(2).Visibl e = T rue Works heets(2).Activate ActiveSheet.Unprotect ("Li ndo03") ActiveSheet.Cells.Select Sel ection.ClearContents Sel ection.NumberF ormat = "General" Sel ection.Interior.Col orIndex = xlNone Sel ection.Lock ed = T rue Sel ection.F ormulaHi dden = False Works heets(2).Range("A1").Select Fila = 0 Columna = 0 NumClientes = Application.InputBox (Prompt:="Número de Clientes:", Title:="Nuevo Dato", Type:=1) Tipo_datos = Application.InputBox (Prompt:=" Los datos de l os clientes hac en referencia a l as distancias o a las c oordenadas de ubic ación? Si son distancias por favor res ponda 1, de lo contrari o res ponda 2:", Title:=" Nuev o Dato" , Type:=1) 'Parametros de la búsqueda tabú parametrizable T amano_Lista = Application.InputBox(Prompt:="T amaño de la Lis ta T abú:" , Title:=" Nuev o Dato" , Type:=1) T amano_Pobl acion = Applicati on.InputBox(Prompt:="T amaño de la Población Tabú:", Title:="Nuevo Dato", Ty pe:=1) NumIteraciones = Applic ation.InputBox (Prompt:=" Número de Iteraci ones del algoritmo:", Title:="Nuevo Dato", Ty pe:=1) If (NumClientes = F alse) T hen Ms gBox "Debe di gitar el número de clientes." Works heets(2).Visi ble = F alse Else If (Tipo_datos = Fals e Or (Ti po_datos <> 1 And Tipo_datos <> 2)) Then. 14.
(15) MsgBox "Debe digitar 1 o 2 s egún la opción escogida." Work sheets(2).Visi ble = F als e Else If (T amano_Lista = F alse) Then Ms gBox "Debe digitar el T amaño de l a Lis ta T abú." Worksheets (2).Visible = Fals e Else If (T amano_Pobl acion = F alse) T hen MsgBox "Debe digitar el Tamaño de l a Población T abú." Worksheets(2).Visible = Fals e Else If (NumIteraciones = False) T hen MsgBox "Debe digitar el Número de Iteraciones del algoritmo." Works heets (2).Visible = Fals e Els e Works heets (2).Range(" a1" ).Offs et(Fila, Columna) = " Número de Clientes" Works heets (2).Range(" a1" ).Offs et(Fila, Columna + 2) = NumClientes Fila = Fil a + 2 If (NumMenu = 1) Then If (Ti po_datos = 1) Then Works heets (2).Range(" a1" ).Offs et(Fila, Col umna) = " Distancias entre Clientes" Fila = Fila + 1 Col umna = Columna + 1 F or i = 1 To NumClientes Works heets(2).Range("a1").Offset(Fila, Col umna) = i Columna = Columna + 1 v alor = ActiveCell.Value Nex t i Col umna = 0 Fila = Fila + 1 F or i = 1 To NumClientes Works heets(2).Range("a1").Offset(Fila, Col umna) = i Fila = Fila + 1 Nex t i F or i = 1 To NumClientes F or j = 1 To NumClientes Works heets(2).Cells (i + 4, j + 1).Interi or.ColorIndex = 15 Works heets(2).Cells (i + 4, j + 1).Lock ed = Fals e Works heets(2).Cells (i + 4, j + 1).NumberF ormat = " 0.00" Nex t j Nex t i Els e Works heets (2).Range(" a1" ).Offs et(Fila, Col umna) = " Coordenadas de los clientes" Fila = Fila + 1 Works heets (2).Range(" a1" ).Offs et(Fila, Col umna) = " Cliente" Works heets (2).Range(" a1" ).Offs et(Fila, Col umna + 1) = "Coordenada X" Works heets (2).Range(" a1" ).Offs et(Fila, Col umna + 2) = "Coordenada Y" Col umna = 0 Fila = Fila + 1 F or i = 1 To NumClientes Works heets(2).Range("a1").Offset(Fila, Col umna) = i Fila = Fila + 1 Nex t i F or i = 1 To NumClientes Works heets(2).Cells (i + 4, 2).Interior.ColorIndex = 15 Works heets(2).Cells (i + 4, 3).Interior.ColorIndex = 15 Works heets(2).Cells (i + 4, 2).Locked = F alse. 15.
(16) Works heets(2).Cells (i + 4, 3).Locked = F alse Works heets(2).Cells (i + 4, 2).NumberFormat = "0.00" Works heets(2).Cells (i + 4, 3).NumberFormat = "0.00" Nex t i End If Els e If (Ti po_datos = 1) Then Works heets (2).Range(" a1" ).Offs et(Fila, Col umna) = " Distancias entre Clientes" Fila = Fila + 1 Col umna = Columna + 1 F or i = 1 To NumClientes Works heets(2).Range("a1").Offset(Fila, Col umna) = i Columna = Columna + 1 v alor = ActiveCell.Value Nex t i Col umna = 0 Fila = Fila + 1 F or i = 1 To NumClientes Works heets(2).Range("a1").Offset(Fila, Col umna) = i Fila = Fila + 1 Nex t i F or i = 1 To NumClientes F or j = 1 To NumClientes Works heets(2).Cells (i + 4, j + 1).Interi or.ColorIndex = 15 Works heets(2).Cells (i + 4, j + 1).Lock ed = Fals e Works heets(2).Cells (i + 4, j + 1).NumberF ormat = " 0.00" Nex t j Nex t i Fila = Fila + 1 Works heets (2).Range(" a1" ).Offs et(Fila, Col umna) = " Demanda" Fila = Fila + 1 F or i = 1 To NumClientes Works heets(2).Range("a1").Offset(Fila, Col umna) = i Fila = Fila + 1 Nex t i F or i = 1 To NumClientes Works heets(2).Cells (i + Fila - NumClientes , 2).Interior.ColorIndex = 15 Works heets(2).Cells (i + Fila - NumClientes , 2).Locked = F alse Works heets(2).Cells (i + Fila - NumClientes , 2).NumberFormat = "0.00" Nex t i Fila = Fila + 1 Works heets (2).Range(" a1" ).Offs et(Fila, Col umna) = " Capaci dad de l os vehícul os". clientes". Works heets (2).Cells (Fila + 1, 2).Interi or.ColorIndex = 15 Works heets (2).Cells (Fila + 1, 2).Lock ed = Fals e Works heets (2).Cells (Fila + 1, 2).NumberF ormat = " 0.00" Els e Works heets (2).Range(" a1" ).Offs et(Fila, Col umna) = " Coordenadas de los Fila = Fila + 1 Works heets (2).Range(" a1" ).Offs et(Fila, Col umna) = " Cliente" Works heets (2).Range(" a1" ).Offs et(Fila, Col umna + 1) = "Coordenada X" Works heets (2).Range(" a1" ).Offs et(Fila, Col umna + 2) = "Coordenada Y" Col umna = 0 Fila = Fila + 1 F or i = 1 To NumClientes. 16.
(17) Works heets(2).Range("a1").Offset(Fila, Col umna) = i Fila = Fila + 1 Nex t i F or i = 1 To NumClientes Works heets(2).Cells (i + 4, 2).Interior.ColorIndex = 15 Works heets(2).Cells (i + 4, 3).Interior.ColorIndex = 15 Works heets(2).Cells (i + 4, 2).Locked = F alse Works heets(2).Cells (i + 4, 3).Locked = F alse Works heets(2).Cells (i + 4, 2).NumberFormat = "0.00" Works heets(2).Cells (i + 4, 3).NumberFormat = "0.00" Nex t i Fila = Fila + 1 Works heets (2).Range(" a1" ).Offs et(Fila, Col umna) = " Demanda" Fila = Fila + 1 F or i = 1 To NumClientes Works heets(2).Range("a1").Offset(Fila, Col umna) = i Fila = Fila + 1 Nex t i F or i = 1 To NumClientes Works heets(2).Cells (i + Fila - NumClientes , 2).Interior.ColorIndex = 15 Works heets(2).Cells (i + Fila - NumClientes , 2).Locked = F alse Works heets(2).Cells (i + Fila - NumClientes , 2).NumberFormat = "0.00" Nex t i Fila = Fila + 1 Works heets (2).Range(" a1" ).Offs et(Fila, Col umna) = " Capaci dad de l os vehícul os". Works heets (2).Cells (Fila + 1, 2).Interi or.ColorIndex = 15 Works heets (2).Cells (Fila + 1, 2).Lock ed = Fals e Works heets (2).Cells (Fila + 1, 2).NumberF ormat = " 0.00" End If End If Works heets (2).Columns(" A:A").Sel ect Works heets (2).Columns(" A:A").EntireCol umn.AutoFit If (Tipo_datos = 2) Then Works heets(2).Columns ("B:B").Select Works heets(2).Columns ("B:B").EntireCol umn.AutoFi t Works heets(2).Columns ("C:C").Select Works heets(2).Columns ("C:C").EntireCol umn.AutoFit End If Works heets (2).Range(" A1" ).Select Dim strPassword As String strPassword = " Lindo03" Works heets (2).Activate Ac tiveSheet.Protect Passw ord:=strPassw ord, DrawingO bjec ts:=True, Contents:=T rue, Scenarios:=True, Us erInterfaceOnly :=T rue End If End If End If End If End If End Sub. iv.. Pr ocedimiento de validac ión de datos, valida que se tengan todos los datos r equeridos, y además llama el procedimiento pr incipal para la ejec ución de la meta- heurís tica.. 17.
(18) A continuac ió n se pres enta la parte del c ódigo que hace referenc ia a es te pr oc edimiento: 'Procedimi ento que v alida que los datos estén c orrectos y llama el 'procedimi ento princi pal para inici ar la bús queda tabú Public Sub Solucion() If (NumClientes = F alse) T hen Ms gBox "Debe s elecci onar la opción des eada en el menú y proporcionar los datos requeridos." Works heets(2).Visi ble = F alse Else Works heets(2).Ac tivate ActiveSheet.Unprotect ("Li ndo03" ) Di m Val orNumero As Boolean Di m DescError As Boolean DescError = Fals e Works heets(1).Ac tivate ActiveSheet.Unprotect ("Li ndo03" ) ActiveSheet.Cells.Selec t Sel ection.Cl earContents Sel ection.F ont.Col orIndex = 2 Works heets(1).Cells(4, 1).Select If (NumMenu = 1) Then If (Tipo_datos = 1) T hen F or i = 1 To NumClientes For j = 1 T o NumClientes Ac tiveCell.Offset(i, j) = " =ISNUMBER('DATOS Y RESULT ADOS'!RC)" If (Activ eCell.Offs et(i, j ).Value = F alse) Then Des cError = T rue End If Ac tiveCell.Offset(i, j) = " =ISBLANK('DATOS Y RESULTADOS'!RC)" If (Activ eCell.Offs et(i, j ).Value = T rue) Then Des cError = T rue End If Ac tiveCell.Offset(i, j).Value = "" Nex t j Nex t i Else F or i = 1 To NumClientes Activ eCell.Offs et(i, 1) = " =ISNUMBER('DATOS Y RESULTADOS'!RC)" If (ActiveCell.O ffset(i, 1).Value = False) Then DescError = True End If Activ eCell.Offs et(i, 1) = " =ISBLANK('DATOS Y RESULT ADOS'!RC)" If (ActiveCell.O ffset(i, 1).Value = T rue) Then DescError = True End If Activ eCell.Offs et(i, 1).Value = "" Activ eCell.Offs et(i, 2) = " =ISNUMBER('DATOS Y RESULTADOS'!RC)" If (ActiveCell.O ffset(i, 2).Value = False) Then DescError = True End If Activ eCell.Offs et(i, 2) = " =ISBLANK('DATOS Y RESULT ADOS'!RC)" If (ActiveCell.O ffset(i, 2).Value = T rue) Then DescError = True End If Activ eCell.Offs et(i, 2).Value = "" Nex t i End If Else. 18.
(19) If (Tipo_datos = 1) T hen F or i = 1 To NumClientes For j = 1 T o NumClientes Ac tiveCell.Offset(i, j) = " =ISNUMBER('DATOS Y RESULT ADOS'!RC)" If (Activ eCell.Offs et(i, j ).Value = F alse) Then Des cError = T rue End If Ac tiveCell.Offset(i, j) = " =ISBLANK('DATOS Y RESULTADOS'!RC)" If (Activ eCell.Offs et(i, j ).Value = T rue) Then Des cError = T rue End If Ac tiveCell.Offset(i, j).Value = "" Nex t j Nex t i F or i = 1 To NumClientes Activ eCell.Offs et(i + NumCli entes + 2, 1) = " =ISNUMBER('DATO S Y RESULT ADO S'!RC)" If (ActiveCell.O ffset(i + NumClientes + 2, 1).Value = F alse) T hen DescError = True End If Activ eCell.Offs et(i + NumCli entes + 2, 1) = " =ISBLANK('DAT OS Y RESULT ADO S'!RC)" If (ActiveCell.O ffset(i + NumClientes + 2, 1).Value = T rue) Then DescError = True End If Activ eCell.Offs et(i + NumCli entes + 2, 1).Val ue = "" Nex t i ActiveCell.Offset(2 * NumCli entes + 4, 1) = "=ISNUMBER('DATOS Y RESULT ADO S'!RC)" If (ActiveCell.Offset(2 * NumClientes + 4, 1).Value = False) T hen Desc Error = T rue End If ActiveCell.Offset(2 * NumCli entes + 4, 1) = "=ISBLANK('DAT OS Y RESULT ADO S'!RC)" If (ActiveCell.Offset(2 * NumClientes + 4, 1).Value = True) Then Desc Error = T rue End If ActiveCell.Offset(2 * NumCli entes + 4, 1).Val ue = "" Else F or i = 1 To NumClientes Activ eCell.Offs et(i, 1) = " =ISNUMBER('DATOS Y RESULTADOS'!RC)" If (ActiveCell.O ffset(i, 1).Value = False) Then DescError = True End If Activ eCell.Offs et(i, 1) = " =ISBLANK('DATOS Y RESULT ADOS'!RC)" If (ActiveCell.O ffset(i, 1).Value = T rue) Then DescError = True End If Activ eCell.Offs et(i, 1).Value = "" Activ eCell.Offs et(i, 2) = " =ISNUMBER('DATOS Y RESULTADOS'!RC)" If (ActiveCell.O ffset(i, 2).Value = False) Then DescError = True End If Activ eCell.Offs et(i, 2) = " =ISBLANK('DATOS Y RESULT ADOS'!RC)" If (ActiveCell.O ffset(i, 2).Value = T rue) Then DescError = True End If Activ eCell.Offs et(i, 2).Value = "" Nex t i F or i = 1 To NumClientes. 19.
(20) Activ eCell.Offs et(i + NumCli entes + 2, 1) = " =ISNUMBER('DATO S Y RESULT ADO S'!RC)" If (ActiveCell.O ffset(i + NumClientes + 2, 1).Value = F alse) T hen DescError = True End If Activ eCell.Offs et(i + NumCli entes + 2, 1) = " =ISBLANK('DAT OS Y RESULT ADO S'!RC)" If (ActiveCell.O ffset(i + NumClientes + 2, 1).Value = T rue) Then DescError = True End If Activ eCell.Offs et(i, 1).Value = "" Nex t i ActiveCell.Offset(2 * NumCli entes + 4, 1) = "=ISNUMBER('DATOS Y RESULT ADO S'!RC)" If (ActiveCell.Offset(2 * NumClientes + 4, 1).Value = False) T hen Desc Error = T rue End If ActiveCell.Offset(2 * NumCli entes + 4, 1) = "=ISBLANK('DAT OS Y RESULT ADO S'!RC)" If (ActiveCell.Offset(2 * NumClientes + 4, 1).Value = True) Then Desc Error = T rue End If ActiveCell.Offset(i, 1).Value = "" End If End If If (Desc Error = T rue) T hen Work sheets(2).Activate MsgBox "Todas las distancias deben s er diligenci adas y deben ser números." Else s trPassword = "Li ndo03" Work sheets(1).Activate Activ eSheet.Protect Password:=strPassword, DrawingObj ects:=T rue, Contents:=True, Scenarios:=True, Us erInterfaceOnly:=True Work sheets(2).Activate Call menu(NumMenu, T amano_Lista, Tamano_Pobl acion, NumIteraciones, Ti po_datos) End If End If End Sub. b) Para descr ibir la segunda parte, relacionada con la meta- heurística empleada, s e describirán los siguientes as pec tos . • • • • • • • • •. Secuencias o tours Restricc iones y Lista Tabú Criter io de Aspir ación Soluc ión Inic ia l Movida empleada Estr ategia de Intensific ac ión Estr ategia de Diversificac ión Criter io de Par ada Recálculo de la función objetiva. Secuencias o tours. 20.
(21) La r epres entación de la solución por medio de s ecuencias o tours c omo es neces ar io para la aplic ación de la meta-heurístic a Búsqueda Tabú, se hace por medio de un único v ector en el que s e inc luyen los c lientes visitados por cada vehículo o por el únic o v ehículo para el cas o de TSP. Para el cas o de TSP este tour inc luye el or den en que los clientes son visitados; es decir, que este tour tiene una longitud fija igual al númer o de clientes. Un ejemplo de este tour podr ía s er:. 2. 4. 3. 7. 5. 9. 1. 8. 6. En este c aso s e tienen 9 c li entes, es decir, que el tamaño del tour es 9, y el or den de vis ita de los c li entes para minimizar los costos ser ía 2, 4, 3, 7, 5, 9, 1, 8 y 6. Para la cas o de CVRP en el tour una r uta es identificada porque inicia y finaliza c on el depósito, ya que los vehíc ulos deben partir y regr es ar al depósito; excepción del últ imo tour (último v ehículo) que no s e coloc a el depósito al final del tour por que er a algo obvio y se omitió en la definición del tour. Como el número de v ehículos empleados puede variar, el tamaño del tour no es fijo. Un ejemplo de este tour podr ía s er:. 1. 2. 4. 3. 1. 7. 5. 9. 1. 8. 6. Para el cas o del ejemplo s e tienen 8 clientes y un depósito (1). Se neces it an 3 vehíc ulos para satisfac er la demanda de los 8 c lientes; el primer vehíc ulo atiende los clientes 2, 4 y 3 en es e orden, parte y regr esa al depósito (1); el segundo vehículo visita los clientes 7, 5 y 9 en ese orden, par tiendo y regr esando al depós ito ( 1) y el último v ehículo atiende los clientes 8 y 6 en ese orden y también parte y regr es a al depósito (1) . De estos tours se obtiene toda la infor mac ión para el cálc ulo de la función objetiva, empleando además la tabla de distancia. Restricciones y Lista Tab ú En este caso se tomar á c omo restricc ión que los clientes que ac abaron de s er movidos no puedan s er escogidos nuevamente. El tamaño de la lis ta tabú es un par ámetro de entrada proporc ionado por el usuar io, una de las teor ías es que esté debe ser directamente pr oporcional al númer o. 21.
(22) de c liente, per o esto lo afir mar án o negar án los res ultados. El tamaño ideal par a c ada cas o nos lo dará el análisis de los mismos. Criteri o de Aspir ación El cr iterio de aspir ación par a este c aso es uno de los más utilizados en la lit er atura y es ac eptar aquella movida que mejore el v alor de la función objetiva. Solución Inicial El cálculo de la solución inicial se puede hacer utilizando dos técnicas difer entes que son: El vec in o más cerc ano y la heur ístic a de Clar ke and Wright. La progr amac ión de es tas técnic as es dif er ente par a cada uno de los problemas tratados, ya que en uno es un único vehíc ulo y en el otr o son var ios vehículos de capac idad limitada, es dec ir, s e incluye una restr icción más. La s elecc ió n de la técnic a de solución inic ial a emplear la hac e el us uar io, es otr o dato de entrada. Estas técnic as se convierten en un s ubpr oceso dentr o del algor itmo de la meta- heur ís tica Bús queda Tabú. A continuac ión se describirá cada una de estas técnicas : i.. Vecino más cercano: En esta técnica se escoge aleatoriamente un nodo de partid a, para el c aso de TSP un c liente y para le c aso de CVRP un depós it o (c liente con demanda 0); una vez escogido este nodo de partida se busca entr e todos los nodos res tante el más cercano a este nodo de partida ( menor dis tanc ia) y luego el más cercano a este segundo nodo y as í suc esivamente hasta visitar todos los c lientes. Cuando el pr oblema a r esolver es de ruteo de v ehíc ulos con capacidad, además de tener en cuenta que se deben vis itar todos los clientes es neces ar io tener en cuenta que no se puede violar la capacidad de los vehículos; es decir que también es nec es ario calcular la c antidad de pr oduc tos despachados por cada v ehíc ulo y si s e va a superar la capacidad de uno emplear otro para la visita de clientes faltantes y as í suces iv amente hasta v isitar todos los c lientes. El algoritmo de esta técnica par a TSP es la s iguiente: Sub v ecino_mas_c ercano_ts p(vx ) vx = 0 Call leer_datos_de_entrada_tsp(vx ) iteraci ones_v mc = 500 Call generar_s oluci on_v mc_ts p(cli entes ) F or i = 1 To clientes mejor_s ecuencia_vmc (i) = sec uencia_final _vmc(i) Nex t i mejor_funcion_obj etiva_v mc = funcion_objetiv a_v mc _ts p(mejor_sec uencia_vmc ) v alor_funcion_objetiv a_tour_fi nal = mejor_funcion_objetiva_v mc ti empo_mejor_s olucion = Time ti empo_s oluci on_fi nal = Ti me. 22.
(23) numero_i teracion_mejor_soluci on = 0 numero_i teracion_s oluci on_final = 0 F or generaci on = 2 T o iteraci ones _vmc Call generar_sol ucion_vmc _tsp(clientes) v alor_funcion_objetiv a_vmc = funci on_objetiva_vmc_tsp(s ecuenci a_final_v mc ) If (val or_funcion_obj etiva_v mc < mejor_funcion_objetiva_v mc ) Then F or i = 1 T o clientes mejor_secuencia_vmc (i) = sec uenci a_final _vmc (i) Nex t i mejor_funcion_objetiva_v mc = val or_funcion_objetiva_v mc v alor_funci on_objetiv a_tour_final = mejor_funci on_objetiva_vmc tiempo_mejor_sol ucion = Ti me tiempo_sol ucion_fi nal = Time numero_iteracion_mejor_soluci on = 0 numero_iteracion_s oluci on_fi nal = 0 End If Nex t generacion vx = vx + 2 Cells(vx, 1).Val ue = "Solucion Vecino más Cercano" vx = vx + 1 Cells(vx, 1).Val ue = "Valor F unci ón Obj etiva" Cells(vx, 3).Val ue = mej or_funcion_objetiva_v mc 'val or_funcion_obj etiva_tour_final = mej or_funcion_obj etiva_vmc Works heets(2).Cells (vx , 3).NumberFormat = " 0.00" vx = vx + 1 Cells(vx, 1).Val ue = "Orden" Cells(vx, 3).Val ue = "Secuencia" vx = vx + 1 F or i = 1 To clientes Cells(vx , 1).Value = i Works heets(2).Cells(vx , 1).NumberF ormat = "General" Cells(vx , 3).Value = mej or_s ecuenci a_vmc (i) Works heets(2).Cells(vx , 3).NumberF ormat = "General" tour(i ) = mej or_s ecuencia_vmc(i ) vx = vx + 1 Nex t i v alor_funcion_objetiv a = mej or_funcion_obj etiva_v mc End Sub Sub leer_datos_de_entrada_ts p(vx) 'Lee la matriz de distanci as entre clientes vx = vx + 1 clientes = Cells(vx , 3).Value vx = vx + 4 If (tipo_datos_clientes = 2) Then F or i = 1 To clientes c oordenada_x (i ) = Cells (vx, 2).Val ue c oordenada_y (i ) = Cells (vx, 3).Val ue vx = vx + 1 Nex t i vx = vx + 2 Cells(vx , 1).Value = " Distancias entre Clientes" vx = vx + 1 Filas = vx Columna = 2 F or i = 1 To clientes Cells(Fil as, Columna).Value = i Columna = Columna + 1 Nex t i Columna = 1. 23.
(24) Filas = Filas + 1 F or i = 1 To clientes Cells(Fil as, Columna).Value = i Filas = Filas + 1 Nex t i vx = vx + 1 F or i = 1 To clientes F or j = 1 T o clientes matriz_distanci a(i , j) = Sqr((Abs (coordenada_x (i) - c oordenada_x(j ))) ^ 2 + (Abs(coordenada_y(i ) - coordenada_y (j))) ^ 2) Cells(vx , j + 1).Value = matriz_distanci a(i, j) Cells(vx , j + 1).NumberFormat = " 0.00" Nex t j vx = vx + 1 Nex t i Else F or i = 1 To clientes F or j = 1 T o clientes matriz_distanci a(i , j) = Cells (vx , j + 1).Val ue Nex t j vx = vx + 1 Nex t i End If End Sub Sub generar_sol ucion_vmc _tsp(clientes) 'Genera una s oluci ón factibl e busc ando el vecino más c ercano F or i = 1 To clientes s ec uencia_v mc(i ) = i Nex t i clientes_tempo = clientes punto_vmc = genere_al eatorio_entre(1, cli entes ) punto_sec uencia_v mc = s ecuencia_vmc(punto_vmc) s ecuencia_final_vmc (1) = punto_secuencia_v mc F or i = 1 To clientes - 1 F or k = punto_v mc To clientes_tempo - 1 s ec uencia_vmc (k) = secuenci a_v mc (k + 1) Nex t k cli entes _tempo = clientes_tempo - 1 menor_distancia_v mc = matriz_distancia(punto_sec uencia_v mc, secuencia_v mc (1)) nuevo_punto_sec uencia_v mc = s ecuencia_vmc(1) nuevo_punto_vmc = 1 F or j = 1 To clientes_tempo - 1 If (matriz _distancia(punto_secuencia_vmc, s ecuencia_v mc(j + 1)) < menor_distancia_v mc) Then menor_distanci a_v mc = matriz_distancia(punto_sec uenci a_v mc, secuencia_v mc (j + 1)) nuevo_punto_sec uencia_v mc = s ec uencia_vmc (j + 1) nuevo_punto_vmc = j + 1 End If Nex t j punto_s ecuencia_vmc = nuevo_punto_s ec uencia_v mc punto_v mc = nuev o_punto_vmc s ec uencia_final_v mc (i + 1) = punto_s ecuencia_vmc Nex t i End Sub Function genere_aleatorio_entre(x, y ) 'Genera un número entero entre x y y u = Rnd() genere_aleatori o_entre = Int(x * (1 - u) + (y + 1) * u). 24.
(25) End Functi on Function funci on_objetiva_v mc_tsp(secuenci a_final_vmc ) 'Calc ula l a funci ón objetiv a para la ruta escogida para el proc es o del v ecino más cerc ano funcion_obj etiva_v mc_tsp = 0 F or i = 1 To clientes - 1 funcion_obj etiva_v mc _tsp = funci on_objetiva_v mc_tsp + matriz _distancia(s ecuencia_final_vmc (i), s ecuenci a_final_vmc (i + 1)) Nex t i funcion_obj etiva_v mc_tsp = funci on_objetiva_vmc_tsp + matriz _distancia(s ecuencia_final_vmc (clientes), secuenci a_final_v mc(1)) End Functi on. El algoritmo de esta técnica par a CV RP es la s iguiente: Sub v ecino_mas_c ercano_cvrp(vx) vx = 0 Call leer_datos_de_entrada_cvrp(vx ) 'iteraciones _v mc = 500 Call generar_s oluci on_v mc_cv rp(clientes) v ehic ulos = vehicul os_vmc F or i = 1 To clientes + vehicul os - numero_depositos mejor_s ecuencia_vmc (i) = sec uencia_final _vmc(i) Nex t i mejor_funcion_obj etiva_v mc = funcion_objetiv a_v mc _cvrp(mej or_secuencia_v mc) v alor_funcion_objetiv a_tour_fi nal = mejor_funcion_objetiva_v mc ti empo_s oluci on_fi nal = Ti me ti empo_mejor_s olucion = Time numero_i teracion_mejor_soluci on = 0 numero_i teracion_s oluci on_final = 0 If (numero_deposi tos > 1) Then iteraci ones_vmc = 100 F or generaci on = 2 To i teraci ones _v mc Call generar_sol ucion_v mc_cv rp(clientes ) v alor_funci on_objetiv a_vmc = funci on_objetiva_v mc_c vrp(secuencia_fi nal _vmc) If (v alor_funcion_obj etiv a_vmc < mejor_funcion_objetiv a_v mc) T hen F or i = 1 To clientes + v ehic ulos - numero_depositos mejor_sec uenci a_v mc(i) = secuenci a_final_v mc (i) Nex t i vehicul os = v ehic ulos _v mc mejor_funcion_objetiv a_vmc = val or_funcion_obj etiva_v mc val or_funci on_objetiva_tour_final = mejor_funci on_objetiva_v mc tiempo_mejor_sol ucion = Ti me tiempo_sol ucion_final = Time numero_iteracion_mejor_sol ucion = 0 numero_iteracion_solucion_final = 0 End If Nex t generacion End If vx = vx + 2 Cells(vx, 1).Val ue = "Solucion Vecino más Cercano" vx = vx + 1 Cells(vx, 1).Val ue = "Valor F unci ón Obj etiva" Cells(vx, 3).Val ue = mej or_funcion_objetiva_v mc Works heets(2).Cells (vx , 3).NumberFormat = " 0.00" vx = vx + 1 Cells(vx, 1).Val ue = " Numero de Vehíc ulos Empleados" Cells(vx, 3).Val ue = vehiculos. 25.
(26) vx = vx + 1 Cells(vx, 1).Val ue = "Orden" Cells(vx, 3).Val ue = "Secuencia" vx = vx + 1 posici ones_depositos = 1 F or i = 1 To clientes + vehicul os - numero_depositos Cells(vx , 1).Value = i Works heets(2).Cells(vx , 1).NumberF ormat = "General" Cells(vx , 3).Value = mej or_s ecuenci a_vmc (i ) Works heets(2).Cells(vx , 3).NumberF ormat = "General" tour(i ) = mej or_s ecuencia_vmc(i ) If (demanda(tour(i)) = 0) Then posicion_depositos _cvrp(posiciones_depositos) = i If (i <> 1) T hen clientes _visitados_vehiculo(posici ones_depositos - 1) = numero_clientes numero_clientes = 0 End If posiciones _depositos = posici ones_depositos + 1 Else numero_clientes = numero_cli entes + 1 End If If (i = clientes + v ehic ulos - numero_depositos ) T hen clientes_visitados_v ehic ulo(posici ones_depositos - 1) = numero_clientes End If vx = vx + 1 Nex t i v alor_funcion_objetiv a = mej or_funcion_obj etiva_v mc End Sub Sub leer_datos_de_entrada_cv rp(vx ) 'Lee la matriz de distanci as entre clientes, l a demanda de c ada cliente y l a c apacidad de los vehícul os vx = vx + 1 clientes = Cells(vx , 3).Value vx = vx + 4 If (tipo_datos_clientes = 2) Then F or i = 1 To clientes c oordenada_x (i ) = Cells (vx, 2).Val ue c oordenada_y (i ) = Cells (vx, 3).Val ue vx = vx + 1 Nex t i vx = vx + 2 s uma_demandas = 0 F or i = 1 To clientes demanda(i ) = Cells(vx, 2).Value vx = vx + 1 Nex t i vx = vx + 1 c apaci dad_v ehic ulos = Cells (vx , 2).Value vx = vx + 2 If (clientes < 256) Then Cells(vx , 1).Value = " Distancias entre Clientes" vx = vx + 1 Filas = vx Columna = 2 F or i = 1 T o clientes Cells(Fil as, Columna).Val ue = i Columna = Col umna + 1 Nex t i Columna = 1. 26.
(27) Filas = Filas + 1 F or i = 1 T o clientes Cells(Fil as, Columna).Val ue = i Fil as = Filas + 1 Nex t i vx = vx + 1 End If s uma_distancias = 0 F or i = 1 To clientes F or j = 1 T o clientes matriz_distanci a(i , j) = Sqr((Abs (coordenada_x (i) - c oordenada_x(j ))) ^ 2 + (Abs(coordenada_y(i ) - coordenada_y (j))) ^ 2) If (clientes < 256) Then Cells (vx , j + 1).Value = matriz_distanci a(i, j) Cells (vx , j + 1).NumberF ormat = "0.00" End If Nex t j If (clientes < 256) Then vx = vx + 1 End If Nex t i Else F or i = 1 To clientes F or j = 1 T o clientes matriz_distanci a(i , j) = Cells (vx , j + 1).Val ue Nex t j vx = vx + 1 Nex t i vx = vx + 2 F or i = 1 To clientes demanda(i ) = Cells(vx, 2).Value vx = vx + 1 Nex t i vx = vx + 1 c apaci dad_v ehic ulos = Cells (vx , 2).Value End If 'identi fica todos los depósitos existentes j =1 numero_depositos = 0 F or i = 1 To clientes If (demanda(i) = 0) Then numero_depositos = numero_depositos + 1 depositos (j ) = i j =j + 1 End If Nex t i End Sub Sub generar_sol ucion_vmc _cv rp(clientes ) 'Genera una s oluci ón factibl e busc ando el vecino más c ercano F or i = 1 To clientes s ec uencia_v mc(i ) = i Nex t i clientes_tempo = clientes v ehic ulos _vmc = 1 j =1 numero_deposito_escogido = genere_aleatori o_entre(1, numero_depositos ) deposi to_esc ogido = depositos (numero_deposi to_esc ogido) punto_vmc = deposito_escogido punto_sec uencia_v mc = deposito_esc ogido. 27.
(28) s ecuencia_final_vmc (1) = sec uenci a_v mc(deposito_esc ogi do) If (numero_deposi tos > 1) Then depositos_tempo = 1 F or i = 1 To clientes If (demanda(i) = 0) T hen F or j = i To clientes - depositos _tempo sec uenci a_vmc (j) = secuenci a_vmc (j + 1) Nex t j depositos_tempo = depositos_tempo + 1 'i = i - 1 End If Nex t i cli entes _tempo = clientes_tempo - numero_depositos + 1 Else F or k = punto_v mc To clientes_tempo - 1 s ec uencia_vmc (k) = secuenci a_v mc (k + 1) Nex t k End If c apacidad_tempo = 0 clientes_tempo = clientes _tempo - 1 Whil e (clientes _tempo >= 1) menor_distancia_v mc = matriz_distancia(punto_sec uencia_v mc, secuencia_v mc (1)) nuevo_punto_sec uencia_v mc = s ecuencia_vmc(1) nuevo_punto_vmc = 1 F or j = 1 To clientes_tempo - 1 If ((matriz _distancia(punto_sec uenci a_v mc , secuenci a_vmc (j + 1)) < menor_distancia_v mc) And (capaci dad_tempo + demanda(s ec uencia_v mc(j + 1)) <= capacidad_v ehic ulos )) Then menor_distanci a_v mc = matriz_distancia(punto_sec uenci a_v mc, secuencia_v mc (j + 1)) nuevo_punto_sec uencia_v mc = s ec uencia_vmc (j + 1) nuevo_punto_vmc = j + 1 End If Nex t j If (nuevo_punto_v mc = 1) Then If (c apacidad_tempo + demanda(s ecuencia_vmc (1)) <= capaci dad_v ehiculos) Then F or k = nuev o_punto_vmc To clientes _tempo - 1 sec uenci a_vmc (k) = secuencia_vmc(k + 1) Nex t k capaci dad_tempo = capaci dad_tempo + demanda(secuenci a_v mc (1)) clientes _tempo = clientes_tempo - 1 punto_secuencia_vmc = nuevo_punto_sec uencia_v mc punto_v mc = nuevo_punto_vmc sec uencia_fi nal _v mc(cli entes - numero_depositos - clientes_tempo + vehicul os_vmc) = punto_s ecuencia_vmc Else vehicul os_v mc = vehiculos_vmc + 1 punto_secuencia_vmc = deposito_escogido punto_v mc = deposito_esc ogi do sec uencia_fi nal _v mc(cli entes - numero_depositos - clientes_tempo + vehicul os_vmc) = deposito_esc ogi do capaci dad_tempo = 0 End If Else c apaci dad_tempo = capacidad_tempo + demanda(sec uencia_v mc(nuevo_punto_v mc)) punto_sec uencia_v mc = nuev o_punto_s ec uencia_vmc punto_vmc = nuevo_punto_v mc F or k = nuevo_punto_v mc To clientes_tempo - 1 sec uencia_v mc (k ) = s ecuencia_vmc (k + 1) Nex t k clientes_tempo = clientes_tempo - 1. 28.
(29) s ec uencia_final_vmc (cli entes - numero_depositos + 1 - clientes_tempo + vehicul os_v mc 1) = punto_secuenci a_v mc End If Wend End Sub Function genere_aleatorio_entre(x, y ) 'Genera un número entero entre x y y u = Rnd() genere_aleatori o_entre = Int(x * (1 - u) + (y + 1) * u) End Functi on Function funci on_objetiva_v mc_cvrp(s ec uencia_fi nal_vmc) 'Calc ula l a funci ón objetiv a para la ruta escogida para el proc es o del v ecino más cerc ano para cvrp funcion_obj etiva_v mc_cvrp = 0 parti da = secuencia_final _vmc(1) F or i = 1 To (cli entes - numero_depositos + v ehic ulos - 1) funcion_obj etiva_v mc _cvrp = funcion_objetiva_v mc _cvrp + matriz _distancia(s ecuencia_final_vmc (i), s ecuenci a_final_vmc (i + 1)) Nex t i funcion_obj etiva_v mc _cvrp = funcion_objetiv a_v mc _cv rp + matriz _distancia(s ecuencia_final_vmc (clientes + vehiculos - numero_depositos), parti da) End Functi on. ii.. Heur ístic a de Clar ke and Wright: A continuación se pr esentan los pasos de esta heur ística tomados de Torr es [18]. a. “ Constr uir la matr iz de distancias más cortas entre clientes b. Selecc ionar un vehíc ulo para cada c liente, y as ignar una ruta de ida y v uelta al depósito c. Calcular los ahorr os netos par a cada par eja de clientes, y asignar los a una matriz de ahorros d. En la matr iz de ahorr os netos, par a i<j, identific a la celda (i, j) que c ontiene el máximo ahorro neto. Consolida las rutas ( 0,i,0) y ( 0,j,0) en la única ruta (0,j,i,0) e. Identific ando en la matriz de ahorros netos, con i<j, la celda (i, j) que contiene el máx imo ahorro neto, los clientes i y j pueden ser enlazados si y s olo s i se satisfacen las siguientes c ondiciones: f. Ex iste un trayec to simple (i,0) y otr o tr ay ecto simple ( 0,j) g. Los clientes i y j no están y a en la mis ma ruta h. Al enlazar los c lientes i y j , agregando el camino (i,j) y quitando (i,0) y (0,j) no s e viola ninguna r estr icción del sistema. i. Repit e el paso 5 hasta que no queden ahorros netos por examinar .” 3 El algoritmo de esta heur ística para TSP es la siguiente: Sub Clarke_and_Wright(). 3. TORRES, José Fidel. Presentaciones de l a Asign atura Mod elos de Sistemas Logísticos. [38]. 29.
(30) vx = 0 vy = 1 Call leer_datos_de_entrada(vx ) 'iteraciones _c aw = 20 punto_inicio_caw = 1 Call generar_s oluci on_c aw(punto_i nicio_caw ) Cells(vy, clientes + 3).Value = "Iteraci on" Cells(vy, clientes + 5).Value = " Mej or Secuencia" Cells(vy, clientes * 2 + 7).Value = " Val or Funcion O bjetiva" Cells(vy + 1, clientes + 3).Value = "1" F or i = 1 To clientes mejor_s ecuencia_caw (i ) = s ecuencia_final_caw(i) Cells(vy + 1, clientes + 4 + i).Value = mej or_s ecuencia_caw(i ) Nex t i mejor_funcion_obj etiva_c aw = funci on_objetiva(mejor_s ecuencia_caw ) Cells(vy + 1, clientes * 2 + 7).Value = mejor_funcion_obj etiva_c aw F or generaci on = 2 T o cli entes vy = vy + 2 Cells(vy , clientes + 3).Value = generacion punto_i nicio_caw = generaci on Call generar_sol ucion_caw(punto_inicio_caw) v alor_funcion_objetiv a_caw = funcion_obj etiv a(s ec uencia_final_caw ) F or i = 1 To clientes Cells(vy, clientes + 4 + i ).Value = s ecuencia_final_caw (i) Nex t i Cells(vy , clientes * 2 + 7).Value = valor_funci on_objetiva_caw If (val or_funcion_obj etiva_c aw < mej or_funcion_objetiva_caw ) Then F or i = 1 T o clientes mejor_secuencia_caw(i ) = s ec uencia_final_caw (i) Nex t i mejor_funcion_objetiva_c aw = valor_funcion_objetiva_c aw End If F or i = 1 To clientes Cells(vy + 1, clientes + 4 + i ).Value = mejor_s ec uencia_caw (i ) Nex t i Cells(vy + 1, clientes * 2 + 7).Value = mejor_funcion_obj etiva_c aw Nex t generacion vx = vx + 1 Cells(vx, 1).Val ue = "Solucion Clarke and Wright" vx = vx + 1 Cells(vx, 1).Val ue = "Valor F unci ón Obj etiva" Cells(vx, 2).Val ue = mej or_funcion_objetiva_caw vx = vx + 1 Cells(vx, 1).Val ue = " Clientes" Cells(vx, 2).Val ue = "Siti o Asi gnado" vx = vx + 1 F or i = 1 To clientes Cells(vx , 1).Value = i Cells(vx , 2).Value = mej or_s ecuenci a_caw (i) vx = vx + 1 Nex t i End Sub Sub leer_datos_de_entrada(vx ) 'Lee la matriz de distanci as entre clientes vx = vx + 1 clientes = Cells(vx , 3).Value vx = vx + 3 'Cells (vx , 1).Value = " Distancias entre cli entes" vx = vx + 1. 30.
(31) F or i = 1 To clientes F or j = 1 To clientes matriz_distanci a(i, j) = Cells(vx , j + 1).Value Nex t j vx = vx + 1 Nex t i End Sub Sub generar_sol ucion_caw (punto_inicio_c aw) 'Genera una s oluci ón factibl e usando la heurística de Clark e and wright clientes_tempo = clientes 'punto_inicio_c aw = genere_aleatori o_entre(1, clientes ) s ecuencia_final_caw (1) = punto_i nicio_caw clientes_tempo = clientes _tempo - 1 'Crea la matriz de ahorros F or i = 1 To clientes F or j = 1 To clientes If (i = j Or i = punto_inici o_caw) Then ahorro = 0 matriz_ahorros(i, j ) = ahorro 'Cells(clientes + 5 + i, j + 1).Val ue = ahorro Else ahorro = matriz_distancia(i, punto_inici o_c aw) + matriz_distancia(punto_inici o_c aw, j ) matriz _distancia(i, j) matriz_ahorros(i, j ) = ahorro 'Cells(clientes + 5 + i, j + 1).Val ue = ahorro End If Nex t j Nex t i Whil e (clientes _tempo > 0) 'Esc oge el mayor ahorro disponi ble bAhorroInici al = Fals e F or i = 1 To clientes F or j = 1 T o clientes If (bAhorroInicial = Fals e And i <> j And matriz _ahorros(i, j ) <> "x") T hen bAhorroInicial = True may or_ahorro = matriz_ahorros(i , j) partida = i llegada = j Else If (bAhorroInicial = True And matriz _ahorros (i, j) <> "x " And matriz_ahorros (i, j ) > may or_ahorro) T hen mayor_ahorro = matriz_ahorros (i, j) partida = i llegada = j End If End If Nex t j Nex t i matriz_ahorros(partida, llegada) = "x " 'Cells(clientes + 5 + partida, llegada + 1).Value = "x " 'Se ingresa a la secuenci a si cumpl e las condici ones bPartidaEnSecuencia = Fals e bLl egadaEnSec uencia = False F or i = 1 To clientes - clientes_tempo If (s ecuenci a_final_c aw(i ) = parti da) Then bPartidaEnSecuencia = True End If If (s ecuenci a_final_c aw(i ) = llegada) Then bLlegadaEnSec uenci a = T rue. 31.
(32) End If Nex t i If (bLlegadaEnSecuencia = False And bPartidaEnSec uencia = Fals e) Then If (clientes - clientes_tempo = 1) T hen sec uencia_fi nal _caw(2) = partida sec uencia_fi nal _caw(3) = llegada clientes _tempo = clientes_tempo - 2 Else If (matriz _distancia(llegada, secuencia_final_c aw(2)) < matriz _distancia(s ecuencia_final_caw(cli entes - clientes _tempo), partida)) Then For i = 1 T o (clientes - clientes_tempo) sec uenci a_c aw(i) = sec uencia_fi nal _caw (i) Nex t i sec uenci a_fi nal _caw (2) = partida sec uenci a_fi nal _caw (3) = llegada clientes_tempo = clientes_tempo - 2 For i = 4 T o (clientes - clientes_tempo) sec uenci a_fi nal _caw(i ) = s ecuencia_caw (i - 2) Nex t i Else sec uenci a_fi nal _caw (clientes - clientes_tempo + 1) = parti da sec uenci a_fi nal _caw (clientes - clientes_tempo + 2) = llegada clientes_tempo = clientes_tempo - 2 End If End If Else If (bLlegadaEnSecuencia = F alse And secuencia_fi nal _caw (clientes - clientes_tempo) = partida) Then clientes _tempo = clientes_tempo - 1 sec uencia_fi nal _caw(clientes - clientes_tempo) = llegada End If If (bPartidaEnSecuenci a = F alse And s ec uencia_fi nal_caw (2) = ll egada) Then clientes _tempo = clientes_tempo - 1 F or i = 1 To (clientes - clientes_tempo) sec uenci a_caw(i) = s ec uencia_final_caw (i) Nex t i sec uencia_fi nal _caw(2) = partida F or i = 3 To (clientes - clientes_tempo) sec uenci a_fi nal _caw (i) = secuenci a_caw (i - 1) Nex t i End If End If Wend End Sub Function genere_aleatorio_entre(x, y ) 'Genera un número entero entre x y y u = Rnd() genere_aleatori o_entre = Int(x * (1 - u) + (y + 1) * u) End Functi on Function funci on_objetiva(secuenci a_final _caw ) 'Calc ula l a funci ón objetiv a para la ruta escogida funcion_obj etiva = 0 F or i = 1 To clientes - 1 funcion_obj etiva = funci on_objetiva + matriz_distanci a(sec uencia_fi nal _caw (i), secuencia_final_c aw(i + 1)) Nex t i funcion_obj etiva = funci on_objetiva + matriz_distanci a(s ec uencia_fi nal_caw (clientes), secuencia_final_c aw(1)). 32.
(33) End Functi on. El algoritmo de esta heur ística para CV RP es la s iguiente: Sub Clarke_and_Wright() vx = 0 vy = 1 Call leer_datos_de_entrada_cvrp(vx ) 'iteraciones _c aw = 20 punto_inicio_caw = 1 Call generar_s oluci on_c aw(punto_i nicio_caw ) Cells(vy, clientes + 3).Value = "Iteraci on" Cells(vy, clientes + 5).Value = " Mej or Secuencia" Cells(vy, clientes * 2 + 7).Value = " Val or Funcion O bjetiva" Cells(vy + 1, clientes + 3).Value = "1" F or i = 1 To clientes + vehicul os - numero_depositos mejor_s ecuencia_caw (i ) = s ecuencia_final_caw(i) Cells(vy + 1, clientes + 4 + i).Value = mej or_s ecuencia_caw(i ) Nex t i mejor_funcion_obj etiva_c aw = funci on_objetiva(mejor_s ecuencia_caw ) Cells(vy + 1, clientes * 2 + 7).Value = mejor_funcion_obj etiva_c aw v ehic ulos _mej or_s olucion = v ehiculos 'For generacion = 2 T o clientes If numero_depositos > 1 Then F or generaci on = 2 To 10 v y = vy + 2 Cells(vy, clientes + 3).Value = generacion punto_inicio_caw = generaci on Call generar_sol ucion_c aw(punto_inicio_caw) v alor_funci on_objetiv a_caw = funcion_objetiv a(sec uencia_fi nal _caw ) F or i = 1 T o clientes + v ehiculos - numero_depositos Cells(vy, cli entes + 4 + i ).Val ue = sec uencia_fi nal_caw(i) Nex t i Cells(vy, clientes * 2 + 7).Val ue = valor_funci on_objetiva_caw If (v alor_funcion_obj etiv a_caw < mejor_funcion_objetiva_c aw) Then F or i = 1 To clientes + v ehic ulos - numero_depositos mejor_sec uenci a_c aw(i ) = s ec uencia_fi nal_caw(i) Nex t i mejor_funcion_objetiv a_c aw = v alor_funci on_objetiv a_caw vehicul os_mejor_s oluci on = vehicul os End If F or i = 1 T o clientes + v ehiculos_mejor_sol ucion - numero_depositos Cells(vy + 1, clientes + 4 + i ).Value = mejor_s ec uencia_c aw(i ) Nex t i Cells(vy + 1, clientes * 2 + 7).Value = mejor_funcion_objetiv a_c aw Nex t generacion End If vx = vx + 1 Cells(vx, 1).Val ue = "Solucion Clarke and Wright" vx = vx + 1 Cells(vx, 1).Val ue = "Valor F unci ón Obj etiva" Cells(vx, 2).Val ue = mej or_funcion_objetiva_caw vx = vx + 1 Cells(vx, 1).Val ue = " Número Vehíc ulos" Cells(vx, 2).Val ue = vehiculos_mejor_sol ucion vx = vx + 1 Cells(vx, 1).Val ue = "Secuencia" Cells(vx, 2).Val ue = " Cliente" vx = vx + 1. 33.
(34) F or i = 1 To clientes + vehicul os_mejor_sol ucion - numero_depositos Cells(vx , 1).Value = i Cells(vx , 2).Value = mej or_s ecuenci a_caw (i) vx = vx + 1 Nex t i End Sub Sub leer_datos_de_entrada_cv rp(vx ) 'Lee l a matriz de distanci as entre clientes, la demanda de c ada cliente y la c apaci dad de los vehícul os ti po_datos _clientes = 2 vx = vx + 1 clientes = Cells(vx , 3).Value vx = vx + 4 If (tipo_datos_clientes = 2) Then F or i = 1 To clientes c oordenada_x (i ) = Cells (vx, 2).Val ue c oordenada_y (i ) = Cells (vx, 3).Val ue vx = vx + 1 Nex t i vx = vx + 2 s uma_demandas = 0 F or i = 1 To clientes demanda(i ) = Cells(vx, 2).Value vx = vx + 1 Nex t i vx = vx + 1 c apaci dad_v ehic ulos = Cells (vx , 2).Value vx = vx + 2 Cells(vx , 1).Value = " Distancias entre Clientes" vx = vx + 1 Filas = vx Columna = 2 F or i = 1 To clientes Cells(Fil as, Columna).Value = i Columna = Columna + 1 Nex t i Columna = 1 Filas = Filas + 1 F or i = 1 To clientes Cells(Fil as, Columna).Value = i Filas = Filas + 1 Nex t i vx = vx + 1 s uma_distancias = 0 F or i = 1 To clientes F or j = 1 T o clientes matriz_distanci a(i , j ) = Sqr((Abs(c oordenada_x (i ) - c oordenada_x (j))) ^ 2 + (Abs(coordenada_y(i ) - coordenada_y (j))) ^ 2) Cells(vx , j + 1).Value = matriz_distanci a(i, j) Cells(vx , j + 1).NumberFormat = " 0.00" Nex t j vx = vx + 1 Nex t i Else F or i = 1 To clientes F or j = 1 T o clientes matriz_distanci a(i , j) = Cells (vx , j + 1).Val ue Nex t j vx = vx + 1. 34.
(35) Nex t i vx = vx + 2 F or i = 1 To clientes demanda(i ) = Cells(vx, 2).Value vx = vx + 1 Nex t i vx = vx + 1 c apaci dad_v ehic ulos = Cells (vx , 2).Value End If 'identi fica todos los depósitos existentes j =1 numero_depositos = 0 F or i = 1 To clientes If (demanda(i) = 0) Then numero_depositos = numero_depositos + 1 depositos (j ) = i j =j + 1 End If Nex t i End Sub Sub generar_sol ucion_caw (punto_inicio_c aw) 'Genera una s oluci ón factibl e usando la heurística de Clark e and wright clientes_tempo = clientes posici on_inicio_caw = genere_aleatorio_entre(1, numero_depositos ) punto_inicio_caw = depositos (posici on_inici o_caw) 'punto_inicio_c aw = genere_aleatori o_entre(1, clientes ) s ecuencia_final_caw (1) = punto_i nicio_caw clientes_tempo = clientes _tempo - 1 'Crea la matriz de ahorros F or i = 1 To clientes F or j = 1 To clientes If (i = j Or i = punto_inici o_caw) Then ahorro = 0 matriz_ahorros(i, j ) = ahorro 'Cells(clientes + 5 + i, j + 1).Val ue = ahorro Else ahorro = matriz_distancia(i, punto_inicio_c aw) + matriz _distancia(punto_inicio_c aw, j) matriz _distancia(i, j) matriz_ahorros(i, j ) = ahorro 'Cells(clientes + 5 + i, j + 1).Val ue = ahorro End If Nex t j Nex t i v ehic ulos = 1 c apacidad_tempo = 0 Whil e (clientes _tempo > 0) 'Esc oge el mayor ahorro disponi ble bAhorroInici al = Fals e F or i = 1 To clientes F or j = 1 T o clientes If (bAhorroInicial = Fals e And i <> j And matriz _ahorros(i, j ) <> "x") T hen bAhorroInicial = True may or_ahorro = matriz_ahorros(i , j) partida = i llegada = j Else If (bAhorroInicial = True And matriz_ahorros (i, j) <> "x" And matriz_ahorros (i, j) > may or_ahorro) T hen mayor_ahorro = matriz_ahorros (i, j). 35.
Documento similar
Estos forman parte de las pérdidas secundarias, así como los cambios de roles y el estigma hacia el doliente, del que habla Freud en Tótem y Tabú (1912-13). Los sujetos tienen
Pero es obligado el señalar que en ocasiones han estado conside- rados como un tabú secreto para quienes los han prota- gonizado, de ahí podemos deducir que a diferencia de las
Una vez obtenido el peso de cada n-grama y su distancia en número de términos con respecto al n-grama más largo, se puede calcular la relevancia (o similitud) entre la consulta q y
Así, “uno de los debates más importantes sobre el suicidio en la literatura psiquiátrica del siglo XIX fue si debía ser considerado como una enfermedad mental o como el
Este trabajo pretende analizar el tratamiento mediático del acoso escolar, en sus múltiples vertientes, y corroborar si, como menciona el citado informe, sólo se ocupan del
Lo que queda de este año y el próximo lo vamos a dedicar a seguir nuestra formación, sensibilizar a la opinión pública de Getafe para que dejen de verse como tema tabú; formar
En Marruecos, llevar a la pantalla el tabú y hacerlo de forma realista y pormenorizada (nos referimos a la inclusión de desnudos, escenas de sexo, orgasmos, etc.), sigue
Está pendiente la resolución del escándalo del caso Urdangarin, donde aparecen elementos de gran confusión sobre el grado de responsabilidad de los elementos implicados. d)