ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA UNIVERSIDAD DE SEVILLA Proyecto Final de Carrera Titulación: Ingeniería Industrial Título del proyecto: Implementación de un algoritmo basado en la Búsqueda Tabú para la resolución de un problema de ruteo de vehículos con ventana temporal de acceso. Autor: Francisco de Asís Vázquez Delgado Tutor: Rafael Grosso de la Vega Sevilla, Noviembre 2012 Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 A mis padres, mis hermanas, mi novia, mis amigos y a todos aquellos que me han apoyado a lo largo de mi vida. 2 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 ÍNDICE 1. INTRODUCCIÓN Y OBJETO DEL PROYECTO ............................................... 5 2. TRANSPORTE URBANO DE MERCANCIAS .................................................. 8 2.1. 2.1.1. Problemas producidos por el transporte urbano de mercancías ...... 8 2.1.2. Necesidad de su existencia ..................................................................... 9 2.2. Planificación y gestión .......................................................................... 10 2.2.2. Producción y comercialización ............................................................ 10 2.2.3. Distribución ............................................................................................ 10 2.2.4. Clientes .................................................................................................... 11 2.2.5. Administración local ............................................................................. 11 Mecanismo de control administrativo ....................................................... 11 2.3.1. Posibilidades de aplicación: ................................................................. 12 2.3.2. Establecimiento de una regulación ..................................................... 13 2.3.3. Impuestos ................................................................................................ 14 2.3.4. Creación de subvenciones y desarrollo de la infraestructura ......... 14 2.4. 4. Sectores implicados......................................................................................... 9 2.2.1. 2.3. 3. Importancia del transporte urbano de mercancías. ................................... 8 El Transporte Urbano de Mercancías en Sevilla ....................................... 15 PRESENTACIÓN DEL PROBLEMA PLANTEADO ...................................... 16 3.1. Definiciones de elementos del problema................................................... 16 3.2. Presentación del problema .......................................................................... 19 3.2.1. Proceso general ...................................................................................... 19 3.2.2. Restricciones del problema .................................................................. 21 3.2.3. El modelo matemático del problema .................................................. 22 RESOLUCIÓN DEL PROBLEMA DE RUTEO DE VEHÍCULOS (VRP) ...... 27 4.1. Introducción al Problema de Ruteo de Vehículos .................................... 27 4.2. El VRP en la práctica. ................................................................................... 28 4.3. Variantes del VRP ......................................................................................... 30 4.4. Algoritmos para el VRP ............................................................................... 32 4.4.1. Métodos Exactos .................................................................................... 33 4.4.2. Métodos Heurísticos ............................................................................. 34 3 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 4.4.3. 5. 2012 Métodos Metaheurísticos ..................................................................... 37 ALGORITMO BÚSQUEDA TABÚ .................................................................... 40 5.1. Desarrollo histórico....................................................................................... 40 5.2. Definiciones ................................................................................................... 41 5.3. Conceptos de la búsqueda tabú .................................................................. 42 5.4. Características de la búsqueda tabú (uso de la memoria)....................... 45 6. DESARROLLO DEL ALGORITMO BÚSQUEDA TABÚ ............................... 52 6.1. Introducción a la situación planteada ........................................................ 52 6.2. Diagrama de flujo general ........................................................................... 53 6.3. Presentación de los parámetros .................................................................. 54 6.4. Diseño de los algoritmos .............................................................................. 55 6.5. Desarrollo del algoritmo básico .................................................................. 56 6.6. Desarrollo del algoritmo complejo. ............................................................ 60 7. PARAMETRIZACIÓN SOBRE LA RED DE PRUEBA ................................... 67 7.1. Red de prueba................................................................................................ 67 7.2. Experimentos realizados .............................................................................. 69 8. RESULTADOS SOBRE LA RED DE SEVILLA ................................................ 73 8.1. Red de Sevilla ................................................................................................ 73 8.2. Imposiciones sobre el problema ................................................................. 74 8.3. Parámetros del problema ............................................................................. 75 8.4. Resultados obtenidos.................................................................................... 76 9. CONCLUSIONES ................................................................................................. 93 10. BIBLIOGRAFÍA ................................................................................................ 95 11. ANEXOS ............................................................................................................ 98 11.1. Algoritmo Búsqueda Tabú Simple ......................................................... 99 11.1.1. Bloque Intensificación ..................................................................... 101 11.1.2. Bloque Diversificación..................................................................... 109 11.2. Algoritmo Búsqueda Tabú Complejo................................................... 112 11.2.1. Bloque Intensificación ..................................................................... 113 11.2.2. Bloque Pre-Diversificación. ............................................................ 129 11.2.3. Bloque Diversificación..................................................................... 131 4 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 1. INTRODUCCIÓN Y OBJETO DEL PROYECTO El transporte urbano de mercancías es una de las actividades que afectan de una forma más notoria a los habitantes de una ciudad. Principalmente, afecta de forma directa al tráfico y al medio ambiente (calidad del aire y contaminación acústica) de la ciudad. Tanto la fluidez del tráfico como el medio ambiente de una determinada ciudad son dos de los aspectos que definen la calidad de vida de sus habitantes, y por ello, desde finales de los años 80 se ha llevado a cabo la imposición de normas de tráfico que regulan el transporte urbano de mercancías en el área urbana. Para el caso de ciudades en las que la mayor parte de su actividad comercial se desarrolla en el casco antiguo de la ciudad, la problemática se ve agravada por varios aspectos. En los cascos antiguos de ciudades históricas, como pueden ser las principales capitales españolas y europeas, la calles suelen tener una disposición sinuosa y en la mayoría de los casos la anchura no permite la existencia de varios carriles para vehículos en la calzada, lo que dificulta de sobremanera que haya un tráfico fluido. Si se diera lugar la afluencia de clientes en hora punta a la vez que se produce la entrega de la mercancía por parte de las empresas se provocaría un colapso del tráfico debido a que el espacio sería insuficiente para que ambos sectores desarrollen su actividad de un modo confortable. Una de las estrategias seguidas por las administraciones públicas de las ciudades ha sido regular el acceso a los cascos antiguos mediante restricciones temporales de acceso. Estas restricciones están orientadas principalmente a conseguir una mejor complementariedad de todas las personas que acceden a diario a los cascos antiguos. Se consigue repartir el flujo de vehículos de la manera más homogénea posible a lo largo del horizonte temporal de la jornada laboral. Las consecuencias de las restricciones impuestas por la administración local de una ciudad son favorables para la ordenación del tráfico y la disminución de la contaminación medioambiental, pero a su vez son perjudiciales en términos económicos para las empresas de reparto de mercancías. Se produce la aparición de problemas en el reparto de mercancías derivados de la regulación del tráfico, que provocan que se necesiten más recursos por parte de las empresas para repartir la mercancía dentro del horizonte temporal de la jornada laboral. Más recursos significa más dinero, y el aspecto económico es 5 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 una fuerza mayor a la hora de impulsar el estudio de cualquier aspecto de la ciencia y la sociedad. La aparición de sobrecostes en las empresas sirvió de impulso para que se dedicaran esfuerzos en el estudio matemático del problema con el objetivo de buscar la mejor solución. El estudio continuado de los algoritmos exactos y las metaheurísticas aplicadas a este tipo de problemas es clave para conseguir el objetivo de principal de cualquier empresa de transporte de mercancías: conseguir disminuir costes sin perjudicar a la calidad del servicio prestado. Así, en este proyecto se realiza el estudio de la problemática planteada mediante el uso de la programación computacional (lenguaje M) en Matlab. La programación no es más que la herramienta que se ha utilizado para obtener los resultados, sin embargo, el elemento importante es la estrategia utilizada para realizar el estudio. El problema que se plantea para ser estudiado y analizado es el de “Ruteo de Vehículos con Ventana Temporal de Acceso”, siendo sus siglas VRPATW (Vehicle Routing Problem with Access Time Window) el cual, es una variante del tradicional “Problema de Ruteo de Vehículos” (Vehicle Routing Problem, VRP). La ventana temporal de acceso hace referencia a la restricción de acceso a la zona de mayor densidad de negocio en cierta ciudad. Para el proyecto que se desarrolla se ha tomado a la ciudad de Sevilla como escenario de estudio. Una posible estrategia sería utilizar métodos exactos para la resolución del modelo matemático que representa al problema real planteado. Sin embargo, la cantidad vasta de recursos necesarios para obtener la solución exacta de un problema de las dimensiones de este problema hace que resulte poco viable la implementación del método exacto. Ya que en este tipo de problemas no es necesario obtener el óptimo global para considerar un resultado como bueno, en este proyecto se ha optado por el desarrollo de la metaheurística denominada Búsqueda Tabú, ya que permite encontrar soluciones cercanas al óptimo global sin requerir tantos recursos como en el caso del método exacto. El objetivo del proyecto es realizar el estudio de sobrecostes de los resultados obtenidos de la ejecución de simulaciones de algoritmos basados en la Búsqueda Tabú en los diferentes escenarios propuestos, así como realizar una comparación de metaheurísticas tomando los resultados obtenidos por un algoritmo Genético sobre los mismos escenarios que los usados en las simulaciones del algoritmo Búsqueda Tabú. Para ello, previamente se diseñarán 6 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 y se programarán dos algoritmos basados en la Búsqueda Tabú, referidos como “básico” y “complejo”. Los resultados obtenidos mediante un algoritmo Genético que servirán de base para la comparación de los resultados obtenidos mediante el algoritmo Búsqueda Tabú son resultado de una investigación llevada a cabo por el Departamento de Organización Industrial de la Escuela Superior de Ingeniería de la Universidad de Sevilla, habiendo sido publicados dichos resultados en el artículo científico: Muñuzuri, J., Grosso, R., Cortés, P. & Guadix, J. 2012, "Estimating the extra costs imposed on delivery vehicles using access time windows in a city", Computers, Environment and Urban Systems, in press. El desarrollo del proyecto ha constado de cinco fases muy diferenciadas: Estudio del estado del arte, donde se ha procedido a la búsqueda y posterior lectura de la bibliografía relacionada con el campo bajo estudio en el proyecto final de carrera. Diseño del algoritmo. Tomando como base las normas y características que debe tener un algoritmo para ser considerado Búsqueda Tabú, se ha diseñado una combinación de estrategias de actuación para el algoritmo que respetan las características comentadas y capaz de obtener una solución cercana al optimo global. Implementación. Se ha implementado el algoritmo diseñado en lenguaje M para ser ejecutado con la herramienta informática Matlab. Experimentación. Se ha realizado la ejecución del algoritmo implementado en Matlab sobre los diferentes escenarios propuestos. Análisis de resultados. Una vez se han obtenido los resultados mediante la experimentación se han analizado los sobrecostes y se han comparado la metaheurísticas Búsqueda Tabú y Algoritmo Genético tomando los resultados obtenidos con el algoritmo Genético publicados en el artículo científico antes comentado. 7 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 2. TRANSPORTE URBANO DE MERCANCIAS 2.1. Importancia del transporte urbano de mercancías. En Europa más del 75 % de la población reside en áreas urbanas [17] y por esta razón, la producción industrial se concentra también en esas mismas zonas. Esto hace que en estas zonas exista un gran potencial para el sector del transporte de mercancías. De la totalidad del tráfico propio de las áreas urbanas, el transporte de mercancías (camiones de más de 3,5 toneladas) supone alrededor del 10 %. Si incluimos los coches y las furgonetas, que están cobrando más importancia en los últimos años, este tanto por ciento sería aún mayor [17]. La importancia del transporte urbano de mercancías se puede ver también en la distribución de costes dentro de la cadena de transporte de mercancías. La proporción de las actividades de recogida y reparto, que normalmente tienen lugar en las áreas urbanas, supone en el transporte combinado alrededor de un 40% [7] sobre el coste total de las actividades de transporte que se realizan a domicilio. Estos costes se ven incrementados enormemente por la reducción de los “stocks”, el menor tamaño de la mercancía y el aumento del número de pedidos. 2.1.1. Problemas producidos por el transporte urbano de mercancías Debido a la elevada densidad de población de las áreas urbanas y a los limitados recursos existentes (infraestructura, recursos medioambientales,...), el transporte urbano de mercancías se ha de enfrentar con numerosas dificultades. Aparte de la alta densidad de población y el elevado consumo que se produce en estas zonas, es necesario hacer referencia también a la gran cantidad de edificios que hay en ellas. Además, la infraestructura de tráfico es muy escasa y las posibilidades de ampliarla se ven limitadas por la escasez de zonas libres. Por otra parte, la construcción de una infraestructura subterránea resulta muy cara y su financiación es posible sólo en algunos casos. Además de los obstáculos originados por la infraestructura de tráfico, los problemas medioambientales son de vital importancia en las áreas urbanas. La importancia de estos aspectos guarda relación con lo densamente poblada que se encuentran estas zonas. En el área urbana de Bremen, Alemania (~500’000 habitantes) el tráfico (de mercancías y de pasajeros) consume más de 500 toneladas de carburante al día, 8 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 lo que produce la emisión al aire de las siguientes sustancias contaminantes [17]: Monóxido de carbono 34 ton./día Partículas en suspensión 0.16 ton./día NOx 18 ton./día CH 8 ton./día El porcentaje de energía consumida y de contaminación producida por el transporte de mercancías es mayor que el del correspondiente porcentaje de vehículos kilómetro [17]. Otro aspecto de importancia dentro del ámbito del medio ambiente es la contaminación acústica producida por el tráfico en las áreas urbanas. En la ciudad de Zúrich, Suiza, un tercio de la población reside en áreas con emisiones acústicas por encima de los límites fijados por la ley federal de protección contra el ruido [22]. 2.1.2. Necesidad de su existencia A pesar de los problemas descritos en el apartado anterior, las ventajas para la sociedad en su totalidad que podría acarrear la restricción del transporte de mercancías en el área urbana no están muy claras. Para la competitividad económica de un área urbana es muy importante garantizar que en esa zona tenga lugar un intercambio de productos que resulte libre y económico. La zona centro delas ciudades se puede ver resentida, en comparación con los centros comerciales de la periferia, si el tráfico de distribución de productos resulta demasiado caro. En este contexto, a menudo hay que tener en cuenta que un camión que se encargue de la distribución de productos a un atienda situada en una zona residencial causa menos problemas de tráfico que 100 coches particulares recogiendo de un centro comercial alejado del centro la misma cantidad de productos que el camión. 2.2. Sectores implicados 9 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 2.2.1. Planificación y gestión Tradicionalmente, el sector del urbanismo y el sector de la ingeniería del transporte presentan puntos de vista complementarios. Los urbanistas se preocupan de la distribución del espacio y la forma estética en la ciudad y en las viviendas, pero a menudo quedan fuera de juego cuando la perspectiva a tratar son los servicios de una ciudad, sus flujos de movilidad o su funcionalidad. Sólo a principios de la década de los 90 se planteó explícitamente que la ciudad la definen redes y no zonas. Por otro lado, los ingenieros de tráfico y transporte, históricamente preocupados por la fluidez del tráfico y la seguridad vial, están en proceso de descubrimiento de la “democratización” de la vía pública (uso del mismo para todos los modos de transportes) y de la planificación y gestión de la movilidad sostenible. Poco a poco los profesionales se van comprometiendo no solo con los efectos sino también con las causas que los producen. 2.2.2. Producción y comercialización Las empresas, en su búsqueda de ampliar el nicho de mercado, lanzan estrategias de comercialización cada vez más sofisticadas desde el punto de vista competitivo. Los niveles de servicio ofrecidos se ponen metas crecientes: por ejemplo, una empresa de E-commerce (venta de libros, CD, etc.) ofrece un servicio de entrega a domicilio en 4 horas para las ciudades de Barcelona y Madrid. En el caso de la distribución de mercancías, ante la solución más evidente de consolidar proveedores para su posterior distribución, el sector de la producción antepone sus lícitos intereses de tipo estratégico (discreción y exclusividad en la relación con sus clientes, etc.) y económico (ventajas para el cargador con menor red de distribución). Las nuevas tecnologías han sido aplicadas, por ahora, casi exclusivamente como medio para acercarse a un cliente más lejano y exigente, por lo tanto el nuevo desafío de las empresas está en la aplicación de éstas mismas tecnologías a la optimización de los recursos usados para el cumplimiento del servicio. 2.2.3. Distribución Ante la necesidad de lograr la productividad por medio de la rapidez, los transportistas pueden llegar a utilizar prácticas poco ortodoxas en cuanto a interferencias para la movilidad de la ciudad. En otro sector como el de los suministros urbanos (gas, agua, saneamientos, teléfonos, electricidad, etc.), las ineficiencias suelen quedar enmascaradas porque, por ejemplo, quien se ve entorpecido por las obras de tendido de redes no tiene la posibilidad de evaluar el nivel de la planificación de éstas. En resumen, es más evidente un camión 10 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 aparcado en una zona no permitida, que la duplicación de obras, producto de una planificación independiente de cada servicio. 2.2.4. Clientes Los clientes de la ciudad deben percibir que el beneficio que obtienen por vivir, invertir o visitar la cuidad, es igual o superior al que otra localidad le proporcionaría. El cliente ya superó la condición de "cautivo" debida a sus activos fijos y pasó de ser un "cliente leal" (valor simbólico de la ciudad) a un cliente que busca la mejor localización de su negocio (valor debido a las propiedades de la ciudad), para el logro de una ventaja competitiva sostenible. 2.2.5. Administración local La administración local en su búsqueda de mejorar la calidad de vida de la población a la que sirve (reducción de la congestión, de la contaminación atmosférica y acústica, mejora de la seguridad vial, etc.), a menudo se ve condicionada por perspectivas parciales y olvida las necesidades logísticas que permiten la sostenibilidad de la ciudad. Es desde las administraciones desde donde se debería promocionar un transporte urbano de mercancías de calidad, pero para ello debe conocer cuáles son las prácticas a "premiar o penalizar". Dado que un buen uso del espacio urbano repercute positivamente en toda la sociedad, es también la administración quien debería canalizar esfuerzos de formación y concienciación en el sector dirigidos a todos los sectores comprometidos en la eficiencia logística de la ciudad. 2.3. Mecanismo de control administrativo Como ya se ha visto en apartados anteriores, el transporte urbano de mercancías es un área que aporta desarrollo económico cumpliendo uno de los principales objetivos de cualquier actividad dentro de la totalidad de la sociedad. Estos objetivos se pueden considerar también como la optimización de un sistema económico y social con carácter global [15]. Los sistemas propios de las distintas partes involucradas (fabricantes, compañías de distribución, destinatarios) tienen un tamaño mucho más reducido y, por lo tanto, sus intereses no están en demasiada consonancia con los de la sociedad en general. Los intereses de la sociedad en su totalidad deberían estar representados por las autoridades locales. Estos intereses, u objetivos, se pueden resumir de la siguiente manera: 11 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Hacer un uso óptimo de la limitada capacidad infraestructural. Minimizar las emisiones contaminantes. Lograr bienestar económico y competitividad en el área urbana. A pesar de que la mayoría de estos objetivos aún no se han logrado cumplir de manera satisfactoria, los problemas derivados del transporte urbano de mercancías todavía no han sido abordados por muchas de las autoridades responsables. Alrededor del 20 % de las ciudades no tienen personal dedicado a estos asuntos, y sólo un cuarto de las ciudades tienen al menos un responsable trabajando en este asunto a jornada completa [15]. 2.3.1. Posibilidades de aplicación: Las formas de participación dentro del proceso de transporte urbano de mercancías, y del transporte en general, son muy variadas. Sólo se encontrarán soluciones adecuadas a los problemas que puedan surgir si se comprende cómo se desarrolla la totalidad del proceso de transporte urbano de mercancías y la forma en que participan todas las partes involucradas en dicho proceso (autoridades públicas/policía, vendedores al por menor, asociaciones de comerciantes, transportistas, agencias de transporte, compañías distribuidoras, etc.). Por lo tanto, para que se pueda crear un marco a partir del que llegar a posibles acuerdos, es necesario que exista cooperación entre las distintas partes involucradas a nivel local. Para obtener una imagen real de cuál es la situación actual, es necesario que las autoridades locales recopilen y analicen los datos estadísticos sobre transporte de mercancías. Por lo tanto, también es importante coordinar la política de mercancías urbanas con las de las ciudades vecinas, especialmente si están situadas en la misma área metropolitana. La política de transporte urbano de mercancías debe estar integrada dentro de la política de transporte de un área metropolitana. Por tanto, es importante que exista también un programa global de planificación del transporte y de la infraestructura/uso del suelo en el área urbana. Los distintos medios a disposición del sector público para influir en el sistema de transporte se pueden dividir en tres grupos distintos: o Establecimiento de una regulación al respecto. 12 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 o Impuestos. o Subvenciones y desarrollo de la infraestructura. 2.3.2. Establecimiento de una regulación El término ‘restricción’ se utilizaba en el pasado para expresar la reducción de ciertos medios de transporte. Hoy en día, el concepto de restricción ha sido sustituido por el de regulación, que supone una influencia más directa por parte de las autoridades. Peso: Establecer restricciones en cuanto al peso es una práctica habitual en las Ciudades Europeas. En la mayoría de los casos, se limita el acceso a la ciudad a camiones con un peso superior a las 3.5 ton. También hay que tener en cuenta que las restricciones en cuanto al peso de los vehículos tienen como consecuencia el uso de vehículos pequeños en estas zonas. Evidentemente, el uso de estos vehículos pequeños conlleva la realización de mayor número de trayectos, lo que no resulta necesariamente beneficioso. Emisiones: Las emisiones de gases contaminantes producidas por los vehículos son restringidas por la Comisión Europea. Sin embargo, en muchas ciudades, especialmente en aquellas que tienen un importante atractivo, únicamente se permite el acceso a la zona centro a vehículos que no producen emisiones contaminantes. Tiempo de reparto: Las restricciones en cuanto al tiempo de reparto únicamente permiten el acceso de los vehículos de reparto a la zona centro de las ciudades durante un periodo de tiempo determinado. No está muy claro cómo se pueden llevar a la práctica estas restricciones de forma eficaz. Uno de los problemas básicos en este sentido es la posible incapacidad de realizar el reparto en estas zonas debido a las propias restricciones de tiempo, que puede originar un mayor número de trayectos. Carreteras de acceso: Las restricciones en el uso de carreteras especiales tienen como consecuencia una concentración del tráfico en cualquier otro punto de la red vial. La congestión de varias carreteras a la vez también puede tener ese efecto. Zonas de carga: Las labores de carga y descarga en el centro urbano a menudo se ven entorpecidas por los coches estacionados en esa misma zona. Por lo tanto, es necesario que las autoridades locales faciliten una zona apropiada para estas labores. En algunas ciudades como París, los 13 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 establecimientos de un cierto tamaño han tenido que habilitar un espacio destinado a este fin. 2.3.3. Impuestos La recaudación de impuestos en el tráfico urbano se realiza principalmente con el fin de reducir el tráfico de vehículos privados. Es una medida más inusual en el transporte de mercancías. Sin embargo, la recaudación de impuestos en el transporte de mercancías se está utilizando como medida de internalización de gastos externos, como el peaje del tráfico pesado o el establecimiento de impuestos adicionales para vehículos altamente contaminantes. Pero estas medidas son de carácter general y no tienen demasiada importancia en las áreas urbanas. 2.3.4. Creación de subvenciones y desarrollo de la infraestructura Subvención y regulación son dos términos muy cercanos entre sí. En lugar de limitar los posibles modos de afrontar una consecuencia negativa, se pueden subvencionar fórmulas más favorables, por ejemplo, fomentando el uso de vehículos que producen bajas emisiones contaminantes, o los camiones con gran capacidad de carga. En este sentido, otorgar subvenciones no sólo significa premiar económicamente un determinado esfuerzo, también puede significar, por ejemplo, favorecer un mejor acceso a la infraestructura mediante la creación de, por ejemplo, carriles de alta ocupación [15]. El riesgo de las subvenciones reside en que pueden provocar efectos secundarios no deseados. Subvencionar el uso de camiones de gran capacidad puede dar lugar a movimientos y flujos innecesarios. Las subvenciones dentro del ámbito del transporte urbano de mercancías también pueden consistir en el fomento de determinadas estructuras logísticas, como pueden ser el transporte intermodal, las ciudades del transporte o los centros de distribución de mercancías. Por lo tanto, resulta útil contar con la infraestructura necesaria, como pueden ser las terminales de transbordo para el transporte intermodal, o los corredores de transporte. No obstante, al poner en práctica estas medidas hay que asegurarse de que no aparezcan efectos secundarios no deseados. Es muy difícil determinar cuál es la medida más adecuada en cada caso. 14 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 2.4. El Transporte Urbano de Mercancías en Sevilla En una ciudad donde el casco antiguo de la ciudad coincide con su foco principal de comercio, el transporte urbano de mercancías cobra mucha importancia. En el caso de Sevilla, se da el supuesto anterior, pero además, existe otro factor que influye fuertemente sobre la logística urbana, y es la problemática de ser una ciudad con el tercer casco antiguo más grande de Europa (superado por los cascos antiguos de Génova y Venecia). La tendencia cada vez mayor por parte de la administración de promover la salud arquitectónica y medioambiental de la ciudad, hace que cada vez existan más dificultades a la hora de dar un servicio logístico de calidad en el centro de la ciudad. Los principales problemas derivados de la logística urbana relacionados con el tráfico en Sevilla se comentan a continuación: Zonas de carga y descarga: Aun existiendo placas de tráfico limitando las zonas de carga y descarga donde se informa de los horarios donde se destinan esas zonas a su función, por lo general, no se respetan los citados horarios por parte de los vehículos privados. Esto genera conflictos de tráfico debido a la obligación del transportista de realizar su carga/descarga ocupando una zona no destinada a ello. Horarios de acceso: Al existir una limitación temporal impuesta por la administración para acceder al centro de la ciudad, no se puede realizar un plan de entregas/recogidas de mercancía todo lo bueno que pudiera ser, conllevando consigo en la mayoría de los casos un aumento de los costes logísticos para las empresas. Peatonalización y accesibilidad: cada vez con más frecuencia la administración peatonaliza zonas del centro, lo cual provoca un acceso cada vez más difícil a las zonas de reparto afectadas por las peatonalizaciones. 15 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 3. PRESENTACIÓN DEL PROBLEMA PLANTEADO Brevemente se va a proceder a introducir el problema sobre el que se basa este proyecto así como las razones por las que se realiza éste. Se plantea la realización del diseño de un algoritmo búsqueda tabú para resolver el problema de ruteo de vehículos con ventana temporal de acceso (VRPATW). El algoritmo Búsqueda Tabú es una metaheurística basada en la memoria a corto y a largo plazo con gran capacidad de variabilidad en las estrategias a seguir. A lo largo de la realización del proyecto se ha procedido a seleccionar las estrategias que tendrán lugar durante la ejecución del algoritmo, así como a implementar en lenguaje M el algoritmo completo para realizar ciertas simulaciones determinadas. En capítulos posteriores se detallan las características del algoritmo resultante del diseño. Existen dos razones principales por las que se ha decido aplicar el algoritmo diseñado al problema VRPATW. La primera se debe a que con anterioridad se ha resuelto el mismo problema mediante la aplicación de un algoritmo Genético y se va a proceder a la comparar los resultados obtenidos por este algoritmo con los resultados que se han obtenido tras las simulaciones del algoritmo Búsqueda Tabú. La segunda razón es porque es un modelo de problema que no ha sido objeto de muchos estudios debido a que se trata de un problema “joven”. Esta juventud comentada se debe a que el problema surge tras la aparición de las restricciones temporales de acceso impuestas por las administraciones locales para acceder determinadas zonas de la ciudad (suele ser la zona donde se concentra el mayor número de negocios de la ciudad, el casco antiguo, zonas protegibles de contaminación, etc.). 3.1. Definiciones de elementos del problema Antes de plantear el problema se deben conocer los diferentes elementos que intervienen en su modelado, así como algunas condiciones adoptadas en su planteamiento. Partimos del conocimiento del grafo completo que contiene todos los posibles arcos entre los diferentes nodos del problema de optimización de rutas: G=[N,L]. Siendo “N” y “L” el conjunto de nodos y de arcos totales del problema respectivamente. 16 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Dentro del conjunto de nodos “N” existen tres subconjuntos en relación a los niveles de oferta y demanda que tienen los nodos: o Subconjunto “ ”: los nodos tienen unos niveles de demanda positiva y oferta igual a cero (clientes). o Subconjunto “ ̅ ”: los nodos tienen unos niveles de demanda y oferta igual a cero. o Subconjunto “ 1”: compuesto por un único nodo con un nivel de oferta positivo. o Subconjunto “ 2”: donde los nodos tienen unos niveles de oferta y demanda nulos. Dentro del conjunto “N” existen dos subconjuntos en relación a la restricción de acceso al centro. o Subconjunto “RZ”: Son aquellos situados dentro de la denominada zona restringida. La restricción de acceso que tienen es que no se pueden realizar incursiones a la zona restringida ni permanecer dentro de la zona restringida mientras nos encontremos dentro de la ventana temporal “TW”. Además, tenemos que y que ̅ . Es decir, dentro de la zona restringida habrá forzosamente nodos clientes, pero también se obliga a que no todos los nodos situados dentro de la zona restringida sean clientes. El número de vehículos de transporte de mercancías que realizarán las rutas por el grafo se define por “V”. El objetivo del problema es suministrar a los nodos del subconjunto “ ” (clientes, y a los que nos referiremos como “nodos destinos” a partir de ahora) la demanda requerida mediante el uso de vehículos de transporte de mercancías “V”, dentro del horizonte temporal definido por [to,tf]. Los vehículos saldrán desde el nodo “d”, denominado “nodo origen” y desarrollaran una ruta teniendo en cuenta ciertas restricciones. El tiempo necesario para recorrer un arco entre dos nodos viene modelado por unos costes temporales “T”. Teniendo un coste de tij cuando vayamos desde el nodo “i” al nodo “j”, con , y este valor temporal es independiente de la mercancía que transporte el vehículo. 17 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Existirá otro coste temporal, será aquel asociado al tiempo de entrega de la mercancía. El coste será de “h” y se incurrirá en el cada vez que se realice una entrega a un cliente (nodos del subconjunto “ ”). La Ventana Temporal comentada anteriormente será única y efectiva para todos los nodos del subconjunto “RZ”. Este espacio de tiempo viene definido por el intervalo [tVC,tVA]. Lógicamente, este intervalo de tiempo será menor que la duración de la jornada laboral [to,tf]. Por último, se añadirá un coste adicional “cvehiculo” por cada vehículo adicional (a parte del primer vehículo) que se utilice para completar las entregas a todos los clientes. El problema a resolver es conseguir obtener un conjunto de rutas con el menor coste posible con inicio y llegada en el mismo nodo de manera que se entreguen todos los pedidos a los a los nodos clientes. El problema se puede considerar una variante del VRPTW ya que cumple con las características de este y además se imponen restricciones relacionadas con la zona restringida. Las restricciones que se deberán respetar son las que se detallan a continuación: Cada pedido debe ser entregado por un único vehículo. Todos los pedidos deben ser entregados dentro del horizonte temporal. No se podrán incumplir las restricciones impuestas por la Ventana Temporal y por la Zona Restringida. Se deberán utilizar el mínimo número de vehículos. Un esquema visual del espacio donde se desarrolla el problema puede ser el que se muestra en la figura 1: 18 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Figura 1: Esquema general de situación 3.2. Presentación del problema 3.2.1. Proceso general Dentro del horizonte temporal de un día se debe ejecutar la entrega de todos los pedidos realizados por los clientes que tienen que ser entregados en ese día. Los clientes se modelan como nodos de la red, algunos estarán fuera de la zona restringida y otros dentro. Al conjunto de nodos que requieran una entrega se les llama “nodos paradas”, quedando excluido de las paradas el nodo del que parten y al que vuelven los vehículos tras finalizar su jornada, al cual nos referiremos como “nodo origen”. En nuestro caso, es preferible utilizar el menor número de vehículos posible en vez de utilizar más vehículos y tardar menos tiempo en entregar todos los pedidos, lo cual conllevaría un gasto mayor. El problema se resolverá mediante la ejecución de los algoritmos Búsqueda Tabú que se han creado. Concretamente se han diseñado dos algoritmos búsqueda tabú, uno denominado “Simple”, donde se ejecutan las estrategias sencillas básicas de la Búsqueda Tabú, y un algoritmo denominado “Complejo”, donde se han implementado estrategias más avanzadas que requieren más cálculos computacionales. 19 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Los algoritmos están diseñados para que vayan añadiendo vehículos a fin de cumplir las restricciones del problema, por lo que se empieza a realizar las entregas con un solo vehículo, el cual, parte del nodo origen, recorre los arcos hasta el primer nodo parada, donde realiza la entrega durante un cierto tiempo determinado, y una vez hecha la entrega se pueden dar dos situaciones: 1. que deba esperar un tiempo antes de partir hacia el segundo nodo parada debido a que no pueda entrar aún en la zona restringida, en cuyo caso esperaría el tiempo necesario antes de salir. 2. que no sea necesario esperar, por lo que saldría inmediatamente después realizar la entrega. El camino recorrido a través de los arcos entre los nodos es siempre el menor camino posible entre ellos. Así se procede con todos los clientes y la jornada finaliza con el regreso del vehículo al nodo origen tras haber realizado las entregas a todos los clientes. A lo largo del recorrido del vehículo por el grafo pueden surgir situaciones que entren en conflicto con las restricciones del problema, ya sea con las de la ventana temporal o con las restricciones de la zona restringida. Es a raíz de estas situaciones cuando el algoritmo opta por alguna de las soluciones disponibles, como pueden ser asignar un tiempo de espera a un vehículo para que no entre en la zona restringida mientras se encuentra la ventana temporal cerrada o también puede optar por añadir un vehículo ya que no ve capaz entregar todos los pedidos antes de llegar al límite del horizonte temporal. En el caso de que se necesite un nuevo vehículo (es decir, en caso de no poder satisfacer la demanda antes del final del horizonte temporal respetando las restricciones de la zona restringida y de la ventana temporal), un nuevo vehículo partirá del nodo origen desde el inicio del horizonte temporal (to=0) siguiendo la ruta que habría seguido el vehículo anterior (es decir, el vehículo que el programa asignó anteriormente para recorrer el grafo). Todos los vehículos, para finalizar correctamente su ruta, deben llegar al nodo origen antes del límite del horizonte temporal. La función objetivo (podríamos referirnos a ella en este caso como una función de coste temporal), que los algoritmos “Búsqueda Tabú” minimizarán, será en términos temporales, y estará compuesta por el tiempo empleado en cada ruta (desde que el vehículo sale del nodo origen hasta que vuelve a él para finalizar la ruta) por cada vehículo más un coste adicional por cada vehículo de más que se necesite a partir del segundo (incluyendo éste). 20 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 3.2.2. Restricciones del problema Las restricciones que se tienen en cuenta para modelar el problema real no ayudan a asemejar el problema real al planteado para su resolución, sin embargo son restricciones necesarias para poder llegar a una solución concreta de una manera factible en términos computacionales y de tiempo. Así, las restricciones nos permiten mantener los objetivos de la realización de este estudio respetando la finalidad. Se listan a continuación las restricciones consideradas individualmente y con interés aclaratorio: 1. Los vehículos no tendrán límite de capacidad. Esta restricción hace referencia a que se considera que la carga que ha de ser entregada no tiene un tamaño grande y es de poco peso. Así con un vehículo de reparto de mercancías medio sería posible hacer la entrega de todos los pedidos a los clientes sin necesidad de utilizar otro vehículo obligado por la falta de espacio ni por sobrepasar la limitación de peso máximo del vehículo. En modelos de problemas sobre logística urbana con carga fraccionada, esta restricción es muy común por lo ya explicado anteriormente (mercancía de poco tamaño). 2. La función objetivo debe ser expresada en términos de tiempo. Cabe resaltar que los costes cij también serán expresados en términos de tiempo. Para el cálculo de los costes se ha fijado como velocidad media de cada trayecto entre nodo y nodo una velocidad de 20 km/h. Esta velocidad tiene en cuenta la aparición de los diferentes agentes que intervienen en un trayecto por ciudad, como pueden ser los semáforos, la aparición de peatones, atascos, etc... Además, conociendo la distancia en términos de longitud entre los nodos de todo el grafo se consigue hacer el cálculo de los costes cij de cada arco en términos temporales. 3. La Longitud de la Ventana Temporal, [tVC , tVA], se ha tomado como parámetro del problema, y cuyo valor se irá variando para realizar el estudio sobre su repercusión en el valor de la función objetivo, además de su repercusión sobre otras variables de interés, como puede ser el tiempo de ejecución del algoritmo. 4. La dimensión de la Zona Restringida es otro de los parámetros del problema cuyo valor se variará para estudiar el comportamiento del algoritmo ante diferentes situaciones. La Zona Restringida tendrá como límite geográfico siempre los últimos nodos que se encuentren dentro del radio que se fije en cada problema, es decir, para entrar o salir de la zona 21 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 restringida es obligatorio pasar por algún nodo, no se produciría la entrada en la Zona Restringida o la salida de ésta durante el recorrido de un arco. 5. El Tiempo de Entrega se define en el modelo como h = 20min. Se toma este valor como el tiempo medio de entrega a un cliente. 6. La duración del horizonte temporal se ha fijado como una jornada laboral de 10 horas, siendo: [to , tf] = 10h = 600 min. 3.2.3. El modelo matemático del problema Se define la siguiente nomenclatura para modelar el problema: G(N, A): grafo de nodos y arcos representativo del área urbana. N: nodo que representa al único depósito del modelo. D: conjunto de nodos destino (clientes del problema). Q: nodo que representa el final de la ruta (mismo que el nodo N en el caso de este proyecto). AV: Longitud del horizonte temporal (en unidades de tiempo) anterior al periodo con restricción de acceso a la Zona Restringida. V: Periodo con Restricción de Acceso (unidades de tiempo). DV: Longitud del horizonte temporal (en unidades de tiempo) posterior al periodo con restricción de acceso a la Zona Restringida. cij: Duración (en unidades del tiempo) del trayecto entre el nodo i y el nodo j a través del arco (i, j) fuera del período con restricción de acceso a la zona restringida. TD: tiempo que el vehículo permanece en el nodo destino D. 22 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 dij: Duración (en unidades del tiempo) del trayecto entre el nodo i y el nodo j a través del arco (i, j) dentro del período con restricción de acceso a la zona restringida. Si los nodos i y j están fuera de la zona restringida, dij = cij, sin embargo, si alguno de los dos se encuentra dentro de la zona restringida dij es un valor alto (simulando infinito). K: coste fijo por vehículo utilizado. K': constante de valor muy elevado. : para cada arco (i, j) del grafo, es igual a 1 si el vehículo t recorre el arco antes del comienzo del período con restricción, y 0 en caso contrario. : para cada arco (i, j) del grafo, es igual a 1 si el vehículo t recorre el arco durante período con restricción, y 0 en caso contrario. : para cada arco (i, j) del grafo, es igual a 1 si el vehículo t recorre el arco después de la finalización del período con restricción, y 0 en caso contrario. : instante de tiempo en el que el vehículo t pasa por el nodo j. : es igual a 1 si el vehículo t realiza una entrega en el nodo destino D antes del comienzo del período con restricción de acceso, y 0 en caso contrario. : es igual a 1 si el vehículo t realiza una entrega en el nodo destino D durante el período con restricción de acceso, y 0 en caso contrario. : es igual a 1 si el vehículo t realiza una entrega en el nodo destino D después de finalizar el período con restricción de acceso, y 0 en caso contrario. El modelo que se presenta es lineal y está gobernado por variables binarias. La función objetivo representa el coste en unidades temporales de realizar las rutas, diferenciando entre tres tipos de entregas, las que se realizan antes, durante y después del periodo con restricción de acceso. Además también se tiene en consideración el coste incurrido por cada vehículo utilizado para completar las rutas. 23 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 A continuación se muestra el modelo matemático del problema. ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ( ) 24 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Se procede a mostrar la interpretación de cada restricción del modelo. [1] El vehículo t solo puede transcurrir por el arco (i, j) antes, durante o después del período restrictivo. [2] Si el vehículo t se incorpora a un nodo j antes del período restrictivo, debe dejar el nodo antes o durante el período restrictivo. [3] Si el vehículo t se incorpora a un nodo j durante el período restrictivo, debe dejar el nodo durante o después del período restrictivo. [4] Si el vehículo t se incorpora a un nodo j después del período restrictivo, debe dejar el nodo después del período restrictivo. [5] Todos los vehículos t deben salir del depósito N y deben volver al nodo final Q (estos dos nodos son el mismo). [6] Todas las entregas en los nodos destino D se deben hacer. [7] El tiempo durante el cual un vehículo t está circulando antes del período restrictivo debe ser más pequeño o igual a la longitud del tiempo AV. [8] El tiempo durante el cual un vehículo t está circulando después del período restrictivo debe ser más pequeño o igual a la longitud del tiempo DV. [9] El tiempo durante el cual un vehículo t está circulando durante el período restrictivo debe ser más pequeño o igual a la longitud del tiempo V del período restrictivo. [10] Si un vehículo debe entregar en un nodo destino antes del comienzo del período restrictivo, debe tener acceso al nodo antes del período restrictivo. [11] Si un vehículo debe entregar en un nodo destino durante el período restrictivo, debe tener acceso al nodo durante el período restrictivo. [12] Si un vehículo debe entregar en un nodo destino después del período restrictivo, debe tener acceso al nodo después del período restrictivo. [13] Estas restricciones evitan lazos en las rutas de los vehículos. Esto implica que si el vehículo t cruza el arco (i, j), el tiempo en que alcanza i debe ser más pequeño que el tiempo en el cual alcanza j. 25 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 [14] Los vehículos están disponibles en el depósito N desde el tiempo cero, y alcanzan el resto de los nodos en tiempos positivos. [15] Restricciones que imponen los valores 0 y 1 para las variables binarias. 26 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 4. RESOLUCIÓN DEL PROBLEMA DE RUTEO DE VEHÍCULOS (VRP) 4.1. Introducción al Problema de Ruteo de Vehículos Para comprender el mecanismo de los algoritmos de cálculo de rutas, primero se deben entender los problemas para los que están diseñados, además de comprender las diferentes variantes que pueden surgir. Por esta razón se realiza una ligera introducción a este tipo de problema más conocido por su denominación en inglés “Vehicule Routing Problem” (VRP). El principal objetivo del problema de ruteo de vehículos [25] es suministrar los pedidos a un grupo de clientes que por lo general se encontrarán dispersos a lo largo de una zona geográfica de manera que se minimice el coste. Principalmente las características de este problema son: 1. Se cuenta con demanda determinista (conocida), exceptuando a la variante del problema que sufre demandas estocásticas. 2. Las entregas deben realizarse con el mínimo coste, para ello se deben optimizar las rutas de los vehículos que tienen origen y final en el depósito o almacén. Los clientes solo pueden ser atendidos una vez, por lo tanto, el vehículo que le suministre el pedido deberá tener una capacidad mayor que la demanda total del cliente. Todos los clientes deben ser atendidos una sola vez, por lo que a cada uno le visitara un vehículo con una capacidad de carga mayor que la demanda del cliente. Todas las variantes de un problema de ruteo de vehículos tienen tres aspectos comunes: 1. Los clientes: Un cliente tiene siempre una demanda que tendrá que ser satisfecha por un solo vehículo. Para la mayoría de los problemas, la demanda es un producto o un bien que tiene asignado un volumen dentro del vehículo. Pero a veces, la demanda no se entiende como un bien o un producto, sino como simplemente la realización de un servicio que dura cierto tiempo, así, en estos casos el vehículo solo deberá visitar al cliente. 27 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 A lo largo del capítulo, se mostrarán los diferentes VRP en los cuales los clientes tienen restricciones temporales, por ejemplo, sobre cuando pueden ser atendidos y cuando no. Se crean las denominadas ventanas temporales. 2. El depósito o almacén: Tanto los bienes a distribuir vehículos como los vehículos suelen encontrarse ubicados en depósitos o almacenes. Generalmente las rutas seguidas por los vehículos de reparto empiezan y finalizan en el depósito. Se puede dar el caso de tener varios depósitos con una flota determinada de vehículos. Pueden existir restricciones temporales asociadas a la carga de los bienes en los vehículos, es decir, ventanas temporales sobre el depósito, con el objetivo de evitar que varios vehículos acudan a la vez a cargar la mercancía al depósito. 3. Los vehículos: La “capacidad” de un vehículo de transporte puede expresarse en términos de volumen, de peso, de número visitas máximas a clientes, etc. y en ciertos problemas es deseable que la capacidad soportada por cada vehículo sea más o menos pareja. Cada vehículo, por lo general, se asume que recorrerá una única ruta durante el horizonte temporal, pero en los últimos años se han realizado estudios de modelos en los que el número de rutas de un vehículo puede ser mayor. 4.2. El VRP en la práctica. Debido a la importancia que ha cobrado en los últimos siglos el transporte de mercancías como una necesidad de una sociedad moderna, el VRP se ha desarrollado con velocidad, obteniendo una capacidad de aplicación fuerte en múltiples sectores. Un factor muy importante para el desarrollo económico de una región es contar con una buena red de transporte, donde la relación y la comunicación entre los diferentes sistemas de transporte son básicas. A lo largo de la historia, se ha 28 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 demostrado que las regiones con mejores redes de transporte han prosperado más que las que no lo poseen, y eso entre otros factores se debe a que su existencia facilita las relaciones comerciales entre las empresas. Para una empresa, la reducción de costes es una de las tareas que siempre está en continua gestación. Una buena política de logística por parte de la empresa permitirá a ésta una disminución muy considerable de los costes asociados y repercutirá directamente en el margen de beneficio de ésta. Para una empresa que preste servicios de entrega comprometidos en tiempo, el VRP se convierte en un problema fundamental a resolver con el mejor resultado posible, puesto que competirán con las demás empresas ofreciendo un mejor servicio [14]. El VRP es motivo de estudios continuados ya que es un reto resolver el modelo de una manera óptima. Para casos en los que el problema no consta de muchos nodos (clientes), es posible encontrar soluciones exactas numéricamente en tiempos razonables. Sin embargo, a medida que el problema aumenta de tamaño, los tiempos se van haciendo muy grandes y llega a ser inviable su resolución tanto por tiempo de resolución como por lo complicado del modelo. Matemáticamente el VRP se dice que es un problema del tipo NP. Llegar a saber a qué grupo pertenece cada problema es primordial, ya que permite no intentar resolver el problema con un algoritmo exacto y optar por aplicar métodos no exactos de resolución que sin embargo pueden obtener un resultado muy aproximado al óptimo. Estos métodos no exactos son las heurísticas y metaheurísticas. El alcanzar una solución cercana al óptimo, en la mayoría de los casos reales donde se aplican estos métodos, es ya considerado como un buen resultado. Aplicar heurísticas o metaheurísticas proporciona estas soluciones y disminuyen considerablemente el tiempo empleado para ello con respecto a los métodos exactos [18]. La variedad de VRP existentes hace que la función objetivo de estos problemas no sea siempre alcanzar la ruta más corta posible, sino que se debe buscar la solución óptima respetando las restricciones impuestas intentando obtener el menor coste posible. 29 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 4.3. Variantes del VRP La base del problema es siempre el VRP original, pero en los casos reales, los diferentes VRP tienen una serie de restricciones con aspectos muy característicos que hacen que cada uno se enfoque de manera diferente. A continuación se encuentran expuestas algunas de las variantes principales del Vehicule Routing Problem, cuyos modelos pueden ser resueltos por algoritmos cada vez más avanzados en la búsqueda conjunta de mejorar la función objetivo mientras se respetan las restricciones del problema. En la figura 2 se muestra la relación entre ellas: Figura 2: Variantes principales de VRP 1. Capacited VRP (CVRP): Para esta variante del VRP se tiene una capacidad de carga uniforme en los vehículos y se debe minimizar el coste de transporte de atender las demandas conocidas de los clientes [8]. Así, sobre el problema original VRP se añade la restricción de capacidad de que los vehículos poseen una capacidad de carga uniforme de un solo producto. 30 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 2. Multiple Depot VRP (MDVRP): Se dispone de varios depósitos desde los que pueden ser atendidos los clientes. Si es posible separar grupos de clientes que estén cerca de cada depósito, podría resolverse el problema como un conjunto de problemas independientes VRP. En el MDVRP se requiere una asignación de cada cliente a un depósito, además de conocer el número de vehículos establecidos en cada depósito. Un vehículo inicia su ruta en un depósito, atiende a sus clientes y regresa al depósito. 3. Periodic VRP (PVRP): Es la variante que tiene en cuenta que el periodo se extiende a varios días, y por lo tanto su planificación. En el VRP original, el periodo de planificación es de un día. 4. Split Delivery VRP (SDVRP): En esta variante la restricción que limita la visita de un cliente a una sola vez es eliminada, y por lo tanto, un vehículo pasa a poder visitar a un cliente más de una vez a lo largo del horizonte temporal. 5. Stochastic VRP (SVRP): En este caso, uno o más de los datos que en el VRP original eran conocidos serán en este caso aleatorios. Podrían ser los clientes, las demandas… 6. VRP with Backhauls (VRPB): La particularidad de esta variante es que existe la posibilidad de que se produzca una recogida o entrega de bienes a los clientes. 7. VRP with Pick-Up and Delivering (VRPPD): Como su propio nombre indica, se realiza una recogida de mercancía de ciertos clientes y se reparte en otros. 8. VRP with Satellite Facilities (VRPSF): Es un caso especial ya que se permite el reabastecimiento de vehículos sin necesitar que vuelvan al depósito. 9. VRP with Time Windows (VRPTW): Esta variante introduce las ventanas temporales. Se establece o puede establecerse un intervalo de tiempo en el que se permite o se restringe la entrega de mercancía a los clientes, también pudiendo tener restricciones temporales el acceso de los vehículos al depósito. 31 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 10. VRP with Access Time Windows (VRPATW): En el VRPATW se agrega una restricción temporal relacionada con el acceso a ciertas zonas de las ciudades. Este tipo de problemas surge de la restricción por parte de las administraciones locales de acceder a ciertas zonas de la ciudad (principalmente el centro de la ciudad) durante una franja horaria del día determinada debido a razones sociales, ambientales y económicas. En general, cada problema VRP de la vida real supone en sí mismo una variante del problema original, ya que cada caso tiene sus características y restricciones propias. Es por esto que necesitan “adaptarse” los algoritmos existentes al problema concreto. 4.4. Algoritmos para el VRP Los problemas derivados del transporte de mercancías están relacionados de manera directa con el VRP, pero éste a su vez no solo se ha desarrollado en ese ámbito, sino en muchos otros, por lo que se convirtió pronto en un problema importante de optimización, para el que se han desarrollado diversas soluciones a lo largo de las últimas cinco décadas. Fueron Dantzing y Ramser quienes en 1959 propusieron un método de resolución para un modelo que representaba una situación real. Se modeló el abastecimiento de las gasolineras de combustible, y éste método se convirtió en la primera formulación matemática para solucionarlo. G. Clarke y J.M. Wright [4] presentaron en 1964 un método heurístico capaz de mejorar la solución conseguida por Dantzing y Ramser. A partir de ahí, han aparecido una gran cantidad de métodos para resolver las diversas variantes del VRP. En algunos casos se intenta encontrar la solución óptima, en otros simplemente una buena aproximación a ella. Las metodologías de resolución se agrupan según la finalidad y el modo de intentar obtener la solución. Se va a proceder a presentar algunos de los métodos más importantes en la resolución de problemas VRP hasta la fecha. La mejora de estos métodos es continua y acaban existiendo muchas posibilidades a la hora de afrontar una familia de problemas. Las distintas necesidades de recursos de cada algoritmo de resolución provocan que existan ventajas e inconvenientes relacionadas con los tiempos de computación necesarios para resolver los problemas [18]. 32 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Se distinguen tres familias de algoritmos utilizados para resolver el VRP, las cuales se listan a continuación: 1. Los métodos Exactos 2. Los métodos Heurísticos. Dentro de ellos, se explican brevemente los siguientes algoritmos: a) Clarke & Wright. b) Método del barrido. c) Búsqueda local (Lin y Kernighan) 3. Los métodos Metaheurísticos. De los cuales, los más destacados son los siguientes: a) b) c) d) GRASP. Algoritmos Genéticos (GA). Búsqueda Tabú. Simulated Annealing (SA). 4.4.1. Métodos Exactos Debido a la complejidad de los modelos matemáticos, solo los problemas con hasta 100 clientes (aproximadamente) pueden ser resueltos mediante métodos exactos. En estas metodologías, la resolución suele aplicarse a problemas relajados y suelen utilizarse variantes del método Branch and Bound (ramificación y poda). Además, se han desarrollado algoritmos de programación dinámica, los cuales se ven acelerados los cálculos a partir de una relajación del espacio de estados. Sobresale también el método de generación de columnas, que resulta ser muy efectivo en problemas con ventanas temporales muy ajustadas. Destacamos dos métodos exactos para resolver problemas VRP: El método de Branch and Bound (Ramificación y Poda) y el método de Branch and Cut (Ramificación y Corte) [3]: 1. Branch and Bound (Ramificación y poda): Este método se basa en la idea de “divide y vencerás”. Con dividir se refiere a ramificar el conjunto de soluciones enteras en subconjuntos separados cada vez de menor tamaño. Posteriormente se determina el valor de la mejor solución del subconjunto. En base a una cota superior o inferior establecida el 33 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 algoritmo elimina (poda) la rama del árbol que no puede contener la solución óptima. 2. Branch and Cut (Ramificación y Corte): Es una mezcla de métodos en sí mismo basado en el método de Branch and Bound y también en el método de planos de corte en los nodos. Primero se comienza eligiendo un nodo al que evaluar (inicialmente el nodo raíz). Posteriormente decide si se van a generar planos de corte o no. Finalmente se aplican los criterios del método de ramificación y poda. Debido a que generalmente los métodos exactos se aplican solo a problemas con una pequeña cantidad de nodos, son desarrollados en su mayoría para fines académicos, ya que en los problemas reales de VRP se tiene una estructura nodal muy amplia y por lo tanto no son recomendables porque requerirían mucho tiempo de computación. 4.4.2. Métodos Heurísticos 1. Algoritmo de Clarke & Wright (Método de los ahorros) Este algoritmo se diseñó para un problema donde existe un depósito central y se cuenta con uno o más vehículos de entrega para n clientes, cada una demanda conocida previamente. El objetivo principal es proporcionar las rutas de los vehículos que hagan que se cumpla la demanda de cada cliente respetando las restricciones de minimización de costes. G. Clarke y J.M. Wright en “Scheduling of Vehicles from a Central Depot to a Number of Delivery Points” [4], proponen un algoritmo para resolver el problema. Este algoritmo de Clark & Wright consigue soluciones aceptables, y es bastante utilizado en la práctica, por su simplicidad de aplicación y por el poco tiempo que se precisa para resolver el problema. Se identifica el depósito en la localización 0, y los clientes en las localizaciones posteriores hasta n, y se consideran conocidos los costes por trayecto desde el depósito a cada cliente; esto es: coj = Coste de realizar el trayecto desde el depósito hasta el cliente. Para desarrollar el método, es fundamental conocer el coste del trayecto entre todos los clientes, lo que significa que se considera que se conocen todos los costes de cada trayecto. 34 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 cij = Coste de realizar el trayecto desde el cliente i al cliente j. En la práctica, se hace la consideración de que cij = cji, para todo i>=1 y n>=j. Se expone una explicación de cómo procede el algoritmo a continuación: Primero debe suponerse que hay una asignación de vehículos hecha para cada cliente. Es una solución inicial compuesta por n rutas desde el depósito hasta cada cliente. Así el coste total derivado de todas las rutas en este caso es: ∑ Posteriormente, se realiza el enlace entre los clientes i y j, lo que provoca que ahora el vehículo se dirija desde el depósito a i, después a j y finalmente regrese al depósito. Tras realizar esto, se ha conseguido un ahorro en el coste de: ( ) ( ) El algoritmo calcula para cada posible pareja de combinaciones (i,j) el ahorro Sij ordena los resultados en orden decreciente. El número total de combinaciones posibles viene determinado por el número combinatorio: ( ) 2. Método del Barrido. En este método, se representa el mapa de clientes y el depósito como puntos sobre un plano en coordenadas polares (r,), siendo r la distancia en línea recta entre el depósito y el cliente, y el ángulo formado entre los dos Se procede haciendo rotar una recta con origen en el depósito y “barrer” el plano hasta que las demandas de los clientes que han sido barridos sean igual a la capacidad máxima permitida por el vehículo. 35 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Así, obtenemos diversos conjuntos de clientes donde la suma de la demanda total requerida por cada conjunto es menor o igual a la que un vehículo es capaz de suplir debido a su limitación de capacidad. Para obtener la mejor ruta dentro de cada conjunto debe emplearse un algoritmo destinado a esté a fin, como podría ser el anteriormente comentado “Método de los ahorros”, consiguiendo así la ruta más económica posible para cada conjunto. La figura 3 muestra el modo en el que se forman los conjuntos de clientes donde la demanda total es menor o igual que la que es capaz de proporcionar un vehículo limitado por su capacidad. Figura 3: Ejemplo Método de Barrido 3. Técnicas de búsqueda local En este caso, el algoritmo también parte del conocimiento de una solución inicial que deberá mejorar progresivamente. En cada iteración, el algoritmo se mueve hacia una solución mejor que la anterior y el proceso global finaliza cuando no es posible encontrar el movimiento que hace que la solución mejore. Debido al procedimiento de las técnicas de búsqueda local, es normal que lleguen a obtener la solución correspondiente de un óptimo local. 36 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Para resolver esta problemática, tendría que existir la posibilidad de que el algoritmo pudiese moverse hacia soluciones “peores” para intentar encontrar otra vía de avance hacia otro óptimo diferente del anterior. Esta posibilidad conllevaría un algoritmo algo más complejo. Lin y Kernighan desarrollaron un algoritmo que se basa en este hecho y proponen movimientos compuestos, donde puede ocurrir un movimiento simple que no mejore exclusivamente, pero que sin embargo, el global de todos los movimientos si consiga mejorar la solución original. La idea es la de realizar movimientos de mejora y de empeoramiento de forma consecutiva, pero respetando la finalidad del algoritmo de manera que no se pierda nunca el control sobre la mejora global de la búsqueda. 4.4.3. Métodos Metaheurísticos Los métodos metaheurísticos están ligados a los procedimientos heurísticos ya que intentan proporcionar mejoras sobre estos últimos. Se puede hacer una clasificación según el tipo de heurística que se aborde, en este caso los métodos metaheurísticos se clasifican en: a) Métodos constructivos. Aquellos donde se introducen elementos a una solución inicial vacía (algoritmo GRASP). b) Métodos Evolutivos. Estos métodos construyen grupos de soluciones completas, realizan una selección basándose en el valor de ciertos atributos, posteriormente se combinan algunas de las soluciones seleccionadas y se remplazan finalmente el grupo de soluciones (Algoritmo Genético, Búsqueda Dispersa). c) Métodos de búsqueda. Los métodos de búsqueda dan por hecho que debe existir una solución óptima y ejecutan un procedimiento que no llega a la solución del óptimo global del problema pero sí a una solución muy cercana a ésta. El riesgo más común de estos métodos es el de obtener la solución de un óptimo local y quedar atrapado en él. 37 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Los métodos de búsqueda local más importantes se desarrollan según la manera que tienen de salir del óptimo local. Hay tres maneras de proceder: I. Retornar a una solución inicial diferente y volver a comenzar. (Multi start) Variación de la estructura de entornos. (Metaheurística de búsqueda de entornos variables) Realizar movimientos que empeoren la solución para salir del óptimo local. Simulated annealing y Búsqueda Tabú. II. III. 1. GRASP. Greedy Randomized Adaptive Search Procedure El algoritmo GRASP (en español puede traducirse como “Procedimiento de Búsqueda Voraz Aleatorio y Adaptativo) fue desarrollado por (T.A. Feo and M.G.C. Resende en 1995 [9] y se presentó como una metaheurística con propósito general. En este método, cada iteración o paso, tiene dos fases: construcción y mejora. Durante la construcción se ejecuta una heurística constructiva de la que se obtiene una solución inicial. Posteriormente en la fase de mejora, esta solución inicial es tratada con un algoritmo de búsqueda local para ser mejorada. El componente particular de este algoritmo es una función que se encarga de seleccionar al elemento a incluir en la solución actual que proporciona el mejor resultado sin llevar en consideración otros puntos de vista (de aquí la característica de voraz) El concepto de que es adaptativo viene de que tras cada iteración es actualizado el beneficio conseguido tras la adición del elemento a la solución. 2. Algoritmo Genético El algoritmo genético genera en cada iteración un grupo de soluciones. Las soluciones posteriores resultantes son una mezcla de las soluciones anteriores. Así, a diferencia de otros algoritmos, aquí no se produce la transformación de una única solución. La teoría de la evolución de las especies de Darwin es la base de este algoritmo. Las soluciones generadas a partir de otras conservarán algunas características de éstas dependiendo del grado de mutación que se quiera conseguir en cada iteración. 38 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 La mutación es el aspecto aleatorio de este algoritmo, y gracias a esta característica queda resuelta la problemática de los óptimos locales anteriormente comentada. 3. Simulated Annealing (Algoritmo de Recocido Simulado) Básicamente es un método donde se construyen nuevas soluciones de un modo aleatorio basado en determinadas reglas probabilísticas. Es un algoritmo denominado Hill-Climbing y está basado en el recocido de los metales donde se "calienta" a alta temperatura el sistema que se quiere optimizar, para después rebajar la temperatura lentamente, hasta que ya no ocurran modificaciones en el sistema. Aunque los cambios de temperatura durante el proceso real se dan de forma continua, en el algoritmo sólo se producen de forma escalonada. 4. Búsqueda Tabú El algoritmo búsqueda tabú está basado en el concepto de movimientos prohibidos (movimientos tabú) dentro de la solución que se quiere mejorar. Estos movimientos tabú permiten al algoritmo moverse por una zona más amplia de posibles soluciones sin caer en soluciones anteriormente ya encontradas. Es lo que se conoce como “memoria”, y en la búsqueda tabú se encuentra el desarrollo de memoria tanto a corto plazo como a largo plazo. Debido a esto, se dice que es una búsqueda inteligente que aprende a medida que itera el algoritmo a partir de la solución inicial. El modo de salir de óptimos locales encontrados es mediante técnicas de diversificación aleatorias pero inteligentes, es decir, respetando a la memoria a largo plazo, que es la que guía a la diversificación hacia zonas inexploradas. 39 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 5. ALGORITMO BÚSQUEDA TABÚ La búsqueda Tabú se origina tras intentar dar “inteligencia” a los algoritmos basados en la búsqueda local. Fred Glover fue el primero que la definió, “La búsqueda tabú conduce un procedimiento de búsqueda local para explorar el espacio de soluciones alternativas al óptimo local”. La Inteligencia Artificial proporciona a la búsqueda tabú el uso de “memoria”, la cual es implementada a partir de estructuras simples para lograr direccionar la búsqueda contando con la historia de la memoria. El procedimiento extrae información de lo que sucedió anteriormente y actúa en consecuencia. Debido a esto, se dice que existe aprendizaje y que es una búsqueda inteligente. La búsqueda tabú permite trasladarse a soluciones que no sean tan buenas como la actual, de este modo puede escapar de óptimos locales para continuar estratégicamente buscando soluciones aún mejores [6]. 5.1. Desarrollo histórico El origen de la Búsqueda Tabú (Tabú Search) data de finales de los 70. Fred Glover introdujo oficialmente el nombre y su metodología en dos artículos en 1989 [12]. En palabras de Glover: “La búsqueda tabú tiene sus orígenes en procedimientos combinatorios aplicados a problemas de cubrimiento no lineales en los finales de los años 70 y aplicada subsecuentemente a una diversa colección de problemas que van desde secuenciación y balance de canales de computación hasta análisis de clusters y planeamiento de espacio” El término tabú (taboo) procede de la Polinesia [10], donde los aborígenes de la isla Tonga usan el término cuando se refieren a elementos que no se pueden tocar porque son sagrados. Una definición más moderna es: “Una prohibición impuesta por costumbres sociales como una medida de protección”, y también como “marcada como que constituye un riesgo”, esta acepción es la que está más cerca de la esencia del método donde el riesgo a ser evitado es el de seguir 40 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 un camino no productivo, incluyendo el de ser conducido a una trampa de la que no se puede salir (óptimo local). 5.2. Definiciones Se presentan primero algunos conceptos propios de los métodos de búsqueda y luego los conceptos específicos de la búsqueda tabú. Conceptos de los métodos de búsqueda: Dado un problema P de optimización combinatoria utilizaremos x para denotar el conjunto de soluciones posibles del problema y c para la función objetivo. Cada solución tiene un conjunto de posibles soluciones asociadas, que se denomina entorno o vecindario de x y se denota como N(x). Cada solución del entorno puede obtenerse directamente a partir de x mediante una operación llamada movimiento. La solución Inicial xo dependerá del algoritmo específico que la genera, se puede usar una heurística para proporcionar una buena solución inicial o se puede partir de una solución obtenida aleatoriamente, lo usual es utilizar el conocimiento que se tiene de dónde podría haber una buena solución, pero, si no se tiene ninguna información puede partirse de cualquier valor y mejorarlo en el proceso de solución. Un procedimiento de búsqueda local parte de una solución inicial xo, calcula su vecindario N(xo) y escoge una nueva solución x1 en ese vecindario, de acuerdo a un criterio de selección pre establecido. Es decir, realiza un movimiento que aplicado a xo da como resultado x1, este proceso se realiza reiteradamente. Se pueden definir diferentes criterios para seleccionar una nueva solución del entorno. Uno de los criterios más simples consiste en tomar la solución con mejor evaluación de la función objetivo, siempre que la nueva solución sea mejor que la actual. Este criterio, conocido como greedy (voraz, goloso), permite ir mejorando la solución actual mientras se pueda. Como especifica Martí [19] “El óptimo local alcanzado no puede mejorarse mediante el movimiento definido. Sin embargo, el método empleado no 41 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 permite garantizar, de ningún modo, que sea el óptimo global del problema. Más aún, dada la “miopía” de la búsqueda local, es de esperar que en problemas de cierta dificultad, en general no lo sea.” El algoritmo se detiene cuando la solución no puede ser mejorada o cuando se cumple el criterio de parada. El riesgo que se corre es el de haber encontrado una solución óptima local, no la solución global del problema dada la “miopía” del método utilizado. Al aplicar un método de búsqueda cualquiera pueden presentarse dos problemas: 1. El algoritmo puede ciclar, revisitando soluciones ya vistas, por lo que habría que introducir un mecanismo que lo impida. 2. El algoritmo podría iterar indefinidamente, por lo que se establece un criterio de parada. Esta limitación de los métodos de búsqueda es el punto de inicio de muchas de las técnicas metaheurísticas, entre ellas la Búsqueda Tabú. 5.3. Conceptos de la búsqueda tabú La búsqueda tabú puede ser aplicada directamente a expresiones verbales o simbólicas, sin necesidad de transformarlas a expresiones matemáticas, el requerimiento x∈S (x es una solución factible) puede, por ejemplo, especificar condiciones lógicas o interconexiones que pueden ser difíciles de expresar matemáticamente por lo tanto será mejor dejarlas como expresiones verbales y codificarlas como reglas. Una solución pertenece al conjunto de élite dependiendo de su puntaje, (threshold) el cual está relacionado con la función objetivo de la mejor solución encontrada durante la búsqueda, un óptimo local pertenece al conjunto de élite. La característica que distingue a la Búsqueda Tabú de las otras metaheurísticas de búsqueda es el uso de la memoria la cual tiene una estructura basada en una lista tabú y unos mecanismos de selección del siguiente movimiento. La lista tabú es una lista (linked list) en el contexto computacional [5], donde se registran aquellas soluciones o atributos de soluciones que no deben ser elegidas. Una forma sencilla de construir una lista tabú consiste en que cada vez que se realiza un movimiento, se introduce su inverso (si se pasó de xo a x1 , el inverso 42 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 es x1 a xo) en una lista circular, de forma que los elementos de dicha lista están penalizados durante un cierto tiempo. Por tanto, si un movimiento está en la lista tabú no será aceptado, aunque aparentemente sea mejor solución que la solución actual. La lista tabú puede contener: Soluciones visitadas recientemente Movimientos realizados recientemente o Atributos o características que tenían las soluciones visitadas. El tamaño de la lista tabú (tabu tenure) es el tiempo o número de iteraciones que un elemento (movimiento o atributo) permanece en la lista tabú. Si todos los elementos tienen la misma “tenure”, ésta estará identificada por la longitud de la lista tabú, sin embargo si es variable, todos los elementos de la lista tabú no tendrán la misma “tenure”, un elemento que entró a la lista tabú antes que otro podría salir mucho después. Esto es, por ejemplo si existiesen dos tipos de movimientos, denominados tipo 1 y tipo 2, si un movimiento tipo 1 tiene asociada una “tenure” de 5 y entra a la lista tabú en la iteración 30, (saldrá en la iteración 35) y si un movimiento tipo 2 tiene asociada una “tenure” de 2 y entra a la lista tabú en la iteración 31, saldrá de la misma en la iteración 33, entró después, pero sale antes. Por ejemplo si se está construyendo un árbol en un grafo, se parte de un nodo y se van agregando nodos (con su consiguiente arista), después de algunas iteraciones puede necesitarse retirar una arista (con su correspondiente nodo), se tienen pues dos tipos de movimientos: agregar una arista (tipo 1) y retirar una arista (tipo 2). Cuando una arista se agrega al árbol se hace una entrada a la lista tabú que penaliza su salida durante k1 iteraciones, análogamente cuando sale se hace una entrada en la lista tabú que penaliza su entrada durante k2 iteraciones, como hay más aristas fuera del árbol que en él, se ve razonable implementar una estructura tabú que mantenga a una arista recientemente retirada con la condición tabú más tiempo (para dar oportunidad a otras aristas) que a una arista recientemente agregada [10]. Al igual que las costumbres sociales pueden cambiar con el tiempo, las soluciones tabú pueden dejar de serlo sobre la base de una memoria cambiante. Debe haber una forma de “olvido estratégico”, es decir, que una solución o atributo pueda salir de la lista tabú antes de que se cumpla su plazo. 43 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Esto se implementa a través del Criterio de Aspiración, el cual permite que un movimiento sea admisible aunque esté clasificado como tabú. Las aspiraciones son de dos clases: aspiraciones de movimiento. aspiraciones de atributo. Una aspiración de movimiento, cuando se satisface, revoca la condición tabú del movimiento. Una aspiración de atributo, cuando se satisface revoca el status tabú del atributo. En éste último caso el movimiento puede o no cambiar su condición de tabú, dependiendo de sí la restricción tabú puede activarse por más de un atributo. Se pueden tener los siguientes criterios de aspiración: Aspiración por Default: Si todos los movimientos posibles son clasificados como tabú, entonces se selecciona el movimiento “menos tabú”, es decir, si el movimiento m1 está penalizado en la lista tabú durante 2 iteraciones más y m2 está penalizado durante 1, m2 es menos tabú que m1. Aspiración por Objetivo: Una aspiración de movimiento se satisface, permitiendo que un movimiento x sea un candidato para seleccionarse si, por ejemplo, F(x) < mejor costo (en un problema de minimización). Aspiración por Dirección de Búsqueda: Un atributo de aspiración para la solución “s” se satisface si la dirección en “s” proporciona una mejora y el actual movimiento es un movimiento de mejora. Entonces “s” se considera un candidato. Se define el concepto de movimiento por ser esencial para comprender el método de Búsqueda Tabú [12]. Sea la función objetivo de un problema P de optimización combinatoria Minimizar c(x) : x ∈ X en Rn Donde X es el conjunto de soluciones factibles (discreto) 44 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Para resolver P se puede establecer convenientemente una secuencia de movimientos que llevan de una solución tentativa a otra. Se define un movimiento “s” como el mapeo definido en un subconjunto X(s) de X, s: X(s) → X Por ejemplo si el algoritmo está en el nodo i, (la solución factible i) los movimientos posibles son aquellos arcos que unen el nodo i con alguno de sus nodos adyacentes (otras posibles soluciones que se derivan de la solución i). A x ∈ X está asociado el conjunto N(x) (vecindario o entorno) el cual contiene los movimientos s ∈ S que pueden ser aplicados a x, es decir: N(x) = {s ∈ S: x ∈ X(s)} En la i-ésima iteración, para evolucionar hacia otras soluciones, se selecciona éstas en un entorno N(xi), pero que no estén en la lista Tabú: (N(xi) – {Lista Tabú}), evaluando cada una de las soluciones y quedándose con la mejor (que obviamente no es tabú). Para realizar una búsqueda completa, es deseable que el tamaño del entorno no sea elevado. Si se considera un entorno de tamaño grande, con objeto de reducir el tiempo de computación, se puede realizar la búsqueda en un subconjunto tomado aleatoriamente. Supongamos que el vecindario que se debe evaluar para determinar el siguiente movimiento es “grande” y es muy costoso en términos de tiempo de computación evaluar todos y cada uno de los vecinos, se pueden usar algunos procedimientos aleatorios tales como los métodos de Monte Carlo que muestrean el espacio de búsqueda hasta terminar finalmente mediante alguna forma de limitación de iteración. En todo caso se debe determinar el número de muestras y el tamaño de las mismas de tal modo que no ocasione más tiempo de procesamiento que una revisión exhaustiva del vecindario. 5.4. Características de la búsqueda tabú (uso de la memoria) La búsqueda tabú se caracteriza porque utiliza una estrategia basada en el uso de estructuras de memoria para escapar de los óptimos locales, en los que se puede caer al “moverse” de una solución a otra por el espacio de soluciones. 45 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Las estructuras de memoria usadas son de dos tipos: Explicita: Cuando la solución se almacena de manera completa, se registran soluciones de élite visitadas durante la búsqueda. por ejemplo {x1,x5,x7} donde las xi son soluciones ocurridas en iteraciones anteriores. Una extensión de esta memoria explícita registra vecindarios altamente atractivos pero inexplorados de las soluciones de élite. De atributos: Se guarda información acerca de ciertos atributos de las soluciones pasadas, para propósitos de orientación de la búsqueda. Este tipo de memoria registra información acerca de los atributos o características que cambian al moverse de una solución a otra. Por ejemplo en un grafo los atributos pueden consistir en nodos o arcos que son aumentados, eliminados o reposicionados por el mecanismo de movimientos. La memoria, por lo tanto puede ser explícita o de atributos o ambas. En síntesis, la estructura de memoria explicita almacena soluciones de élite (que dan un óptimo local) y la memoria de atributos tiene como propósito guiar la búsqueda. Es importante considerar que los métodos basados en búsqueda local requieren de la exploración de un gran número de soluciones en poco tiempo, por ello es crítico el reducir al mínimo el esfuerzo computacional de las operaciones que se realizan a menudo, lo que se puede conseguir registrando los atributos de las soluciones en vez de éstas para orientar la búsqueda más rápidamente. La estructura de la memoria en la metaheurística de búsqueda tabú opera en relación a cuatro dimensiones principales [10]: Calidad Influencia Corto plazo (lo reciente) Largo plazo (lo frecuente) La calidad se refiere a la habilidad para diferenciar el mérito de las soluciones, identifica qué las hace tan buenas e incentiva la búsqueda para reforzar las acciones que conducen a una buena solución y desalienta aquellas que conducen a soluciones pobres. 46 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 La flexibilidad de la estructura de memoria permite que la búsqueda sea guiada en un contexto multiobjetivo, donde la bondad de una dirección de búsqueda particular puede estar determinada por más de una función, el concepto de calidad en la búsqueda tabú es más amplio que el usado implícitamente en los métodos de optimización, en los cuales se considera que un movimiento es de mejor calidad que otro porque produce una mejor “mejora” (tal es el caso del descenso más rápido), bajo el enfoque de búsqueda tabú un movimiento puede ser de mejor calidad si, por ejemplo, su frecuencia de ocurrencia en el pasado es baja o no ha ocurrido antes y nos permite explorar nuevas regiones. La definición de calidad de una solución es flexible y puede ser adaptado a la naturaleza del problema. La dimensión influencia, considera el impacto de las elecciones hechas durante la búsqueda, mide el grado de cambio inducido en la estructura de la solución o factibilidad, no sólo en calidad sino también en estructura, en un sentido la calidad puede entenderse como una forma de influencia. Registrar información acerca de las elecciones de un elemento de una solución particular incorpora un nivel adicional de aprendizaje, registra qué elementos o atributos generan ese impacto. Esta noción puede ser ilustrada para el problema de distribuir objetos desigualmente pesados entre cajas, donde el objetivo es dar a cada caja, tan aproximadamente como sea posible, el mismo peso. Un movimiento que transfiere un objeto muy pesado de una es un movimiento de alta influencia, cambia significativamente la estructura de la solución actual, otro que intercambia objetos de pesos similares entre dos cajas no introduce mayor influencia. Tal movimiento puede no mejorar la solución actual, la solución actual es relativamente buena. Se privilegian los movimientos etiquetados como influyentes, pero esto no quiere decir que no se opte en alguna iteración por uno poco influyente, pues éstos pueden ser tolerados si proporcionan mejores valores hasta que las mejoras a partir de ellos parezcan ser insignificantes. En tal punto, y en ausencia de movimientos de mejora, los criterios de aspiración cambian para dar a los movimientos influyentes un rango mayor y éstos puedan salir de la lista tabú antes del plazo establecido en su tabú tenure. En el problema de distribuir objetos desigualmente pesados entre cajas, donde el objetivo es dar a cada caja, tan aproximadamente como sea posible, el mismo peso, una solución de calidad puede ser aquella que hace que la diferencia de pesos de las cajas sea pequeña, es decir las cajas están aproximadamente balanceadas. 47 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Estas dos dimensiones de la memoria: calidad e influencia, pueden estar consideradas de manera explícita en el algoritmo tabú, es decir, incluir una estructura de datos que registre la etiqueta de un movimiento o solución como de calidad y/o influyente paralela al registro de su condición tabú o no tabú; o puede estar dada de manera implícita, como considerar que es de calidad si es un óptimo local y/o considerar que es influyente si permite diversificar la búsqueda. Sin embargo las otras dos dimensiones: memoria de corto plazo y la de largo plazo, siempre van expresadas de manera explícita por medio de la lista tabú y de la tabla de frecuencias. Una distinción importante en la búsqueda tabú es la de diferenciar la memoria de corto plazo y la de largo plazo, cada tipo de memoria tiene sus propias estrategias, sin embargo, el efecto de la utilización de ambos tipos de memoria es el mismo: modificar el vecindario N(x) de la solución actual x (convertirlo en un nuevo vecindario N’(x)) En la memoria de corto plazo, el vecindario es generalmente: N’(x) = {N(x) – Lista Tabú} , N’(x) ⊂ N(x) En las estrategias que usan la memoria de largo plazo N’(x) puede ser expandido para incluir otras soluciones que no están en N(x). En ambos casos el vecindario de x, N(x) no es un conjunto estático sino un conjunto que varía dinámicamente de acuerdo a la historia de la solución x. En esencia la memoria de corto plazo utiliza la estructura tabú para penalizar la búsqueda y la memoria de largo plazo utiliza las frecuencias para determinar si un movimiento no tabú puede ser elegido o no. Memoria basada en lo reciente (corto plazo) Es una “memoria” donde se almacenan los últimos movimientos realizados, y que puede ser utilizada para “recordar” aquellos movimientos que hacen caer de nuevo en soluciones ya exploradas. Su objetivo es penalizar la búsqueda para evitar el ciclado. Es una manera de definir el entorno o vecindario reducido de una solución, consiste en etiquetar como tabú las soluciones previamente visitadas en un pasado cercano (recency), ciertos movimientos se consideran prohibidos (tabú), de forma que no serán aceptados durante un cierto tiempo o un cierto número de iteraciones, se considera que tras un cierto número de iteraciones la búsqueda está en una región distinta y puede liberarse del status tabú. 48 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Memoria basada en frecuencia (largo plazo) La memoria basada en frecuencia proporciona un tipo de información que complementa la información proporcionada por la memoria basada en lo reciente, ampliando la base para seleccionar movimientos preferidos. Como lo reciente, la frecuencia a menudo toma en cuenta las dimensiones de calidad de la solución e influencia del movimiento. En esta estructura de memoria se registra la frecuencia de ocurrencias de los movimientos, las soluciones o sus atributos y puede ser: Frecuencia de transiciones.- Cantidad de veces que una solución es la mejor o cantidad de veces que un atributo pertenece a una solución generada. Frecuencia de residencia.- Cantidad de iteraciones durante la cual un atributo pertenece a la solución generada. Una alta frecuencia de residencia, por ejemplo, puede indicar que un atributo es altamente atractivo si S es una secuencia de soluciones de alta calidad, o puede indicar lo contrario si S es una secuencia de soluciones de baja calidad. Por otro lado, una frecuencia de residencia que es alta (baja) cuando S contiene tanto soluciones de alta como de baja calidad puede apuntar a atributo fortalecido (o excluido) que restringe al espacio de búsqueda, y que necesita ser desechado (o incorporado) para permitir diversidad. La memoria a largo plazo tiene dos estrategias asociadas: Intensificación de la búsqueda. Diversificación de la búsqueda. La intensificación consiste en regresar a regiones ya exploradas para estudiarlas más a fondo. Para ello se favorece la aparición de aquellos atributos asociados a buenas soluciones encontradas. Para evitar regresar a óptimos locales cada cierto número de iteraciones, la búsqueda tabú utiliza además otra estrategia, como es la diversificación. La diversificación consiste en visitar nuevas áreas no exploradas del espacio de soluciones. Para ello se modifican las reglas de elección para incorporar a las soluciones atributos que no han sido usados frecuentemente. 49 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Una forma clásica de diversificación consiste en reiniciar periódicamente la búsqueda desde puntos elegidos aleatoriamente, si se tiene alguna información acerca de la región factible se puede hacer un “muestreo” para cubrir la región en lo posible, si no, cada vez se escoge aleatoriamente un punto de partida (método multi arranque). Otro método para diversificar propone registrar los atributos de los movimientos más utilizados en los anteriores movimientos, penalizándolos a través de una lista tabú a largo plazo y así explorar otros entornos. El uso racional de estas dos estrategias da lugar a dos características de la búsqueda tabú, el reencadenamiento de trayectorias y la oscilación estratégica. Una integración de las estrategias de intensificación y diversificación consiste en el re-encadenamiento de trayectorias (path relinking) [13]. Este acercamiento genera soluciones nuevas explorando trayectorias que “conectan” soluciones de élite, (óptimos locales) comenzando desde una de esas soluciones, llamada solución inicial, y generando un camino en el vecindario que conduce a otras soluciones, llamadas soluciones que sirven de guía. En una colección dada de soluciones de élite, el papel de la solución inicial y una solución guía se pueden alternar. Esto es, se puede generar simultáneamente un conjunto de soluciones actuales, extendiendo caminos diferentes, y permitiendo que una solución inicial sea reemplazada (como una solución orientadora para las otras) por otra, si ésta satisface un criterio de aspiración suficientemente fuerte. Debido a que sus papeles son intercambiables, la solución inicial y la guía son llamadas soluciones de referencia. El proceso de generar caminos entre soluciones de referencia está acompañado por movimientos de selección que introducen atributos contenidos en las soluciones que operan como soluciones guías. El proceso también puede continuar más allá de una solución de referencia cambiando el criterio de selección de movimiento que estratégicamente introducen atributos que no están en las soluciones guías. En ambos casos, estos atributos están ponderados para determinar a cuáles movimientos se les da una prioridad superior. La generación de tales caminos dentro de un vecindario “reasocia” puntos previos en formas diferentes a las registradas en la historia previa de búsqueda. La oscilación estratégica guía los movimientos hasta que se llega a un límite que por lo general representaría un punto donde el método debe parar. En 50 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 lugar de parar, se le permite al procedimiento cruzar ese límite modificando la definición de entorno y el criterio de evaluación, La repetición de este proceso oscilatorio de cruce de límite proporciona un marco adecuado para combinar estrategias de intensificación y diversificación. Una ventaja de esta estrategia es que al moverse fuera de la frontera y retornar desde una diferente dirección se descubren oportunidades para mejoramiento que no son alcanzables cuando la búsqueda está confinada de una manera estrecha [12]. En la tabla 1 se presentan una lista de componentes del algoritmo Búsqueda Tabú que es preciso que estén definidos de forma inequívoca. Tabla 1: Componentes de la Búsqueda Tabú 51 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 6. DESARROLLO TABÚ DEL ALGORITMO 2012 BÚSQUEDA 6.1. Introducción a la situación planteada El algoritmo desarrollado está diseñado para aplicarse a Problemas de Ruteo de Vehículos con Ventana Temporal de Acceso, habiendo respetado las características generales de la Búsqueda Tabú anteriormente mostradas y habiendo sido añadidas ciertas estrategias de intensificación y diversificación que se desarrollarán a continuación durante este capítulo. El esquema temporal que se plantea es el mostrado en la figura 4 mostrada a continuación: Figura 4: Esquema temporal Siendo: to = Inicio del horizonte temporal tf = Final del horizonte temporal tvc = Instante en el que comienza a actuar la ventana temporal tva = Instante en el que deja de actuar la ventana temporal Haciendo referencia al modelo matemático del capítulo 3 de este proyecto, se identifican tres variables temporales que se relacionan con las variables del esquema temporal arriba expuesto: La variable TVC (periodo con restricción de acceso) o TVC = tva - tvc La variable TA (periodo de tiempo previo al inicio del periodo con restricción de acceso) o TA = tvc – to 52 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 La variable TP (periodo de tiempo posterior al periodo con restricción de acceso) o TP = tf - tva Otras variables temporales a tener en cuenta son las relacionadas con las entradas y las salidas de los nodos destino durante la ruta. Se diferencian tres variables, una de las cuales será dato del problema: tin = Instante de llegada al nodo destino tout h = Duración de la entrega en el nodo destino = 20 minutos. Este valor está fijado para todas las entregas independientemente del nodo destino. = Instante de salida desde el nodo destino (i) hacia el siguiente nodo (i+1) 6.2. Diagrama de flujo general El diagrama de flujo principal de un algoritmo Búsqueda Tabú (figura 5) consta realmente de 2 componentes principales, siendo estos, la Intensificación y la Diversificación. La búsqueda tabú es un algoritmo que actúa sobre una solución inicial de entrada, por lo que se incluye en este el proyecto el diseño del algoritmo que crea la solución inicial, sin embargo la creación de la solución inicial no forma parte del algoritmo Búsqueda Tabú. El bloque Intensificación es quizás el más importante ya que es el encargado de la optimización local, mientras que el bloque de Diversificación se encarga de mover la solución hacía zonas inexploradas pero de un modo que no optimiza, sino que empeora la solución para poder salir del posible optimo local alcanzado en la Intensificación. Figura 5: Diagrama de flujo general 53 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 6.3. Presentación de los parámetros La complejidad del algoritmo, y sobre todo de su programación, obliga a definir ciertos parámetros de modelización. Los parámetros del modelo son parámetros de entrada que definen el comportamiento del algoritmo. Algunos de ellos se han considerado críticos y se ha decidido hacer un estudio con el objetivo de optimizar el rendimiento del algoritmo en términos de “calidad” de la solución respecto a las iteraciones realizadas. El resto que no ha sido considerado crítico, ha recibido un valor fijo y ha pasado a ser dato. Resulta muy complicado hacer un estudio de optimización de parámetros considerando todos ellos como críticos debido al tamaño del problema. Se diferencian dos tipos de parámetros, los relacionados exclusivamente con este proyecto en particular (Particulares) y aquellos comunes del problema de ruteo de vehículos con ventana temporal de acceso (Comunes). Parámetros Particulares y Críticos a) “vecifitness”: Puede definirse como el número máximo de nodos sometidos a evaluación por cada estrategia de intensificación. b) “numelite”: Hace referencia al número de vectores solución (salidas de la intensificación) consecutivos que se evalúan para definir el conjunto de “cadenas élite”. c) “radio”: Es el radio de búsqueda de vecinos cercanos entorno al nodo bajo análisis. d) “porcenmax”: Es el parámetro-condición que limita la pérdida de valor de la función objetivo tras aplicar la diversificación sobre el vector solución. e) “numeroiteracionesmax”: Es el número máximo de iteraciones que se ejecuta el algoritmo. 54 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Parámetros Comunes: a) “Numparadas”: Es el número de clientes que se han de visitar. Define el tamaño del problema. b) “Radio de la zona restringida”: Es el radio que tiene la zona restringida del problema a la que no se puede acceder mientras permanezca cerrada la venta temporal de acceso. c) “Tiempo VC”: Es el instante dentro del horizonte temporal a partir del cual se cierra el acceso a la zona restringida. (Ventana Cerrada). d) “Tiempo VA”: Es el instante dentro del horizonte temporal a partir del cual se permite el acceso a la zona restringida. (Ventana Abierta). Datos de Entrada: 1. “Porcen2”: Indica el número máximo de movimientos permitidos en la Diversificación. Se ha tomado este valor como el 10% del número total de paradas del problema. 2. “Numerotabu”: Define el número de iteraciones que permanece una relación entre nodos calificada como tabú después de realizarse una operación de intercambio o inserción entre ellas. 3. “Tiempoentregamax”: Es el tiempo que tarda un cliente en ser atendido. Es un valor fijo, es decir, todas las paradas que los vehículos realizan en los clientes duran el mismo tiempo. 6.4. Diseño de los algoritmos Como se ha expuesto en el objetivo de este proyecto final de carrera, uno de ellos es diseñar dos algoritmos basados en la búsqueda tabú y comparar los resultados de sus experimentos con los obtenidos por aquellos realizados con un algoritmo genético. A continuación se exponen dos algoritmos basados en la búsqueda tabú: uno “básico” y otro “complejo”. 55 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 6.5. Desarrollo del algoritmo básico El algoritmo básico está diseñado con las estrategias más sencillas posibles de intensificación y diversificación. El algoritmo comienza recibiendo una solución inicial en forma de vector de n componentes (la metodología para obtener la solución inicial será expuesta en apartados posteriores). Este vector de solución inicial será el elemento de entrada al bloque de Intensificación (solo para la primera iteración, en las posteriores el elemento de entrada será el vector solución de salida de la Diversificación). Debido a que uno de los objetivos de este proyecto es realizar una comparación de los resultados obtenidos por este algoritmo con los obtenidos por el algoritmo genético, se ha decidido usar el mismo método de evaluación para el vector solución. Este método es una función llamada “Fitness” que se ejecuta cada vez que quiero evaluar una posible solución. Así, a partir de ahora, cada vez que nos refiramos al término “evaluación”, “evaluar”, etc… nos estaremos refiriendo a aplicar la función Fitness sobre un vector solución. La salida de esta función está compuesta por una matriz donde se expone el número de vehículos utilizados, la ruta que cada vehículo realiza y el valor de la función objetivo del modelo del programa, además de por dos matrices más que ofrecen información sobre el instante de tiempo en el que cada vehículo llega y sale de cada nodo destino. El algoritmo “básico” aquí descrito posee una estructura igual a la mostrada en el diagrama de flujo de la figura expuesta anteriormente. El algoritmo comienza evaluando la solución inicial que es un elemento de entrada provisto por un algoritmo externo a este. Posteriormente se entra en el bloque Intensificación. Bloque Intensificación La intensificación es iterativa siempre que no se cumplan las condiciones de salida de la intensificación. Comienza con la elección del primer nodo del vector solución, nodo i. Primero se comprueba la situación temporal y geográfica en la que se encuentra el nodo, esto es, indicar si es un nodo interno o externo a la zona restringida y ver el instante de tiempo que es respecto al horizonte temporal. Dependiendo de la situación temporal y geográfica, se le asignará un 56 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 valor a un indicador, llamado “indicador2”, que dice qué tipo de vecinos se deben buscar. A continuación se pasa a la búsqueda de vecinos, este es un proceso simple, donde se localizan los nodos cercanos (el radio de búsqueda es uno de los parámetros que se han estudiado para encontrar la parametrización óptima) y que cumplen las condiciones impuestas por el indicador antes comentado. Una vez obtenidos los vecinos, se procede al análisis de la estrategia de intensificación implantada. En este caso se ha optado por la estrategia denominada “Intercambio puro de vecinos” cuyo proceder es el siguiente: 1. Para cada vecino, se realiza el cálculo de la distancia que resultaría de intercambiar el nodo bajo estudio “i” por el vecino “k”, esto es la suma de distancias entre la parada "(i-1)" y el vecino k y entre el vecino k y la parada “(i+1)”. Es decir: Distancia medida = Distancia ((i-1), (k)) + Distancia ((k), (i+1)) 2. Se almacenan las distancias anteriores de una forma ordenada de menor a mayor (las “vecifitness” menores distancias, siendo “vecifitness” un parámetro del problema analizado) puesto que buscamos disminuir la distancia entre (i-1) e (i+1), creándose una matriz denominada: “matrizdistvecinalorden”. 3. Ahora se pasa a “evaluar” cada posible intercambio de nodo y almacenamos los resultados de la evaluación. Si a lo largo de la evaluación nos encontramos con un vecino tabú (nos referimos a que el intercambio entre el nodo parada bajo estudio y el vecino sea prohibido por así indicarlo la lista tabú) el algoritmo se saltará el vecino y no evaluará su intercambio con el nodo bajo estudio, a no ser que se cumpla el Criterio de Aspiración tenido en cuenta: si la primera fila de “matrizdistvecinalorden” corresponde a un vecino tabú, entonces sí se tiene en cuenta para su evaluación. 4. Tras la evaluación, se selecciona el vecino para el que conseguimos el valor mínimo de la evaluación (función objetivo mínima) y se compara con el valor de la función objetivo que tiene el vector solución actual sin realizar el intercambio con el vecino seleccionado. 57 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 A modo de aclaración se puede apreciar en la figura 6 el proceso de intercambio puro: Figura 6: Esquema de intercambio puro La comparación realizada puede dar lugar a dos situaciones, que se realice el intercambio o que no se realice. En el caso de que se realice el intercambio en el vector solución, se modificará la lista tabú incrementándose con el Número Tabú (parámetro del problema) el nodo (k,i) de la matriz “ListaTabu”. Si no se realiza ningún intercambio, lo que significaría que la función objetivo actual es menor que la ofrecida por el mejor intercambio, entonces no se realiza ninguna acción sobre la Lista Tabú. A continuación se pasa a estudiar la siguiente posición del vector solución, y así se procede hasta completar todas las posiciones del vector solución (vector de tamaño igual a “Numparadas”, que es parámetro del problema). Tras estudiar el último nodo del vector solución, se pasa a comprobar el valor de la función objetivo final con la que se tenía al iniciar la intensificación. Si estos valores son iguales, o si el número de veces que se ha ejecutado la intensificación es mayor a 40, entonces finaliza la intensificación, en caso contrario se vuelve a iterar la intensificación. Tras salir del bucle de la intensificación se realiza la actualización de la Lista Tabú, esto es, disminuir los valores de la Lista en una unidad (menos los valores aumentados durante la intensificación). Seguidamente comienza el bloque de Diversificación. 58 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Bloque Diversificación La idea de la Diversificación es salirse de los posibles óptimos locales encontrados durante la intensificación y llegar a otras posibles soluciones que conduzcan a diferentes óptimos locales o incluso al óptimo global. Para ello se realiza una inserción de nodos aleatoria con condiciones siguiendo el siguiente proceso: Primero se seleccionan aleatoriamente dos elementos (“aleat”) del vector solución, llamados “aleat” y “aleat2”. Seguidamente se realiza el intercambio entre ellos y se evalúa el intercambio realizado con la función “fitness”. A continuación se someten los resultados de la evaluación a las condiciones de la diversificación: Condición de Intercambio: comprueba que tras hacer el intercambio no se ha incrementado más del 20% el valor de la función objetivo. En caso de que si se haya superado, primero se deshace el intercambio anterior y se procede la selección aleatoria de otros dos elementos para proceder al proceso de intercambio. Si continuamente (50 veces) ocurre esto, es decir, que se aumenta más del 20% el valor de la función objetivo, al final el algoritmo finaliza esta etapa y pasa a las siguientes condiciones de diversificación. Condiciones de Diversificación: Si se cumple alguna de ellas, el algoritmo finaliza la diversificación, si no se cumple ninguna, vuelve a iterar desde el inicio de la diversificación. Las condiciones son: o Que se hayan hecho más intercambios que un 10% del número total de nodos destino o Que la pérdida del valor de la función objetivo sea mayor al máximo permitido “porcenmax” (parámetro del problema ) o Que al realizar algún intercambio haya disminuido la función objetivo (haya mejorado) o Que se haya producido el salto desde la condición de intercambio por incapacidad de intercambiar los elementos seleccionados. 59 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Una vez que se cumple alguna de las Condiciones de Diversificación el algoritmo pasa la comprobación final, que son las condiciones finales, éstas son simplemente dos, y si se cumple alguna de ellas el algoritmo finaliza su ejecución, las condiciones son las siguientes: Que se haya llegado a un número de iteraciones “numeroiteracionesmax” (parámetro del problema). Que se haya producido el anterior salto comentado por incapacidad de intercambio. máximo Tras cumplir alguna de las condiciones finales el algoritmo finaliza quedando guardadas las diferentes soluciones obtenidas a lo largo de las intensificaciones realizadas por el algoritmo. 6.6. Desarrollo del algoritmo complejo. El diagrama de flujo del algoritmo complejo diseñado tiene una variante respecto al diagrama de flujo general antes mostrado. Como paso intermedio entre la intensificación y la diversificación se ha añadido el bloque Pre- Diversificación, en el cual, se preparan ciertos elementos del programa para su posterior entrada en la Diversificación. La figura 7 a continuación muestra el diagrama de flujo final para el algoritmo complejo: Figura 7: Diagrama de flujo del algoritmo Búsqueda Tabú Complejo Además de haber añadido un bloque adicional al diagrama, también se han añadido ciertas estrategias dentro de los bloques de Intensificación y Diversificación. A continuación se expone el modo de actuar del algoritmo “complejo” haciendo comparaciones con el algoritmo “básico” para ver las principales diferencias de diseño. 60 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Al igual que en el algoritmo “básico”, el algoritmo “complejo” también es alimentado con una solución inicial, la cual se obtiene con la misma metodología que la solución inicial del algoritmo “básico”. Ésta se evalúa y seguidamente empieza la intensificación. Bloque Intensificación El bloque de intensificación del algoritmo “complejo” sufre una modificación sustancial respecto al del algoritmo “básico” ya que cuenta con dos estrategias de mejora en lugar de una. El desarrollo del proceso de intensificación transcurre exactamente del mismo modo que en el algoritmo “básico” salvo porque a la hora de analizar los vecinos primero se analizan mediante la estrategia ya conocida “Intercambio puro de vecinos” y posteriormente con la estrategia añadida “Inserción de vecinos”. Las estrategias son totalmente independientes la una de la otra. El hecho de implementar en Matlab una estrategia antes que la otra es irrelevante. A continuación se va a explicar el procedimiento de la estrategia “Inserción de vecinos” y se va a omitir la de la estrategia “Intercambio puro de vecinos” puesto que ya ha sido explicada anteriormente en el apartado anterior donde se desarrolló el algoritmo “básico”. La estrategia “Inserción de vecinos” procede del siguiente modo: 1. De un modo parecido a la estrategia “Intercambio de vecinos” anteriormente explicada se realiza el cálculo de distancias. Esta vez obtendremos dos distancias diferentes para cada vecino, según se inserte el vecino delante o detrás del nodo (i) bajo estudio, es decir: Distancia medida 1 = Distancia ((i-1), (k)) + Distancia ((k), (i)) + Distancia ((i), (i+1)) Distancia medida 2 = Distancia ((i-1), (i)) + Distancia ((i), (k)) + Distancia ((k), (i+1)) 2. Tras esto se procede al ordenamiento de las medidas tomadas. “vecifitness” mejores 61 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 3. Se continúa con la “evaluación” de cada posible inserción de nodo y se almacenan los resultados de la evaluación. Si a lo largo de la evaluación nos encontramos con un vecino tabú (nos referimos a que el intercambio o inserción entre el nodo parada bajo estudio y el vecino sea prohibido por así indicarlo la lista tabú) el algoritmo se saltará el vecino y no evaluará su intercambio con el nodo bajo estudio, a no ser que se cumpla el Criterio de Aspiración tenido en cuenta: si la primera fila de “matrizdistvecinalordeninser” corresponde a un vecino tabú, entonces sí se tiene en cuenta para su evaluación. 4. Para finalizar, terminada la evaluación, se busca el vecino para el que conseguimos el valor mínimo de la evaluación y lo almacenamos para compararlo con el resultado que se obtuvo en la primera estrategia de intensificación. Se muestra a continuación la figura 8 donde se exponen las dos opciones de inserción. Figura 8: Esquema de la inserción de vecinos Una vez que tenemos los resultados óptimos de las dos estrategias de intensificación se comparan los resultados (nos referimos al valor de la función objetivo obtenido de las evaluaciones) con el valor de la función objetivo actual, es decir, la que le corresponde al vector solución sin realizarse ningún intercambio o inserción. En el caso de que se realice alguna modificación en el vector solución, se modificará la lista tabú (incrementándose con el Número Tabú el nodo (k,i) de la matriz “ListaTabu”. Si no se realizase ninguna modificación, es decir, que la función objetivo actual sea menor que la ofrecida por el mejor intercambio y la mejor inserción, entonces no se realizaría ninguna acción sobre la Lista Tabú. A continuación se pasaría a estudiar la siguiente posición del vector solución, y así se procedería hasta completar las “nodos paradas” posiciones del vector solución. 62 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Tras estudiar el último nodo del vector solución, se pasa a comprobar el valor de la función objetivo final con la que se tenía al iniciar la intensificación. Si estos valores son iguales, o si el número de veces que se ha ejecutado la intensificación es mayor a 40 finaliza la intensificación pasando al bloque de Pre-Diversificación, en caso contrario se vuelve a iterar la intensificación. Bloque Pre-Diversificación: creación de Cadenas Élite Este es un bloque donde no se modifica el vector solución, sino donde se preparan ciertas estructuras matriciales que serán de utilidad para las estrategias empleadas para diversificar la búsqueda. Inicialmente se realiza la actualización de la Lista Tabú (disminuir los valores de la Lista en una unidad salvo los valores aumentados durante la intensificación). Posteriormente se procede a la creación de la matriz de cadenas élite. Una cadena élite se define como una cadena de como mínimo 3 nodos que se repite en los últimos vectores solución resultantes de las ultimas intensificaciones (Nos referimos con “últimos” al valor del parámetro “numelite” antes expuesto). La estrategia de cadenas elite que se ha aplicado deriva de una estrategia propuesta en el año 2000 por Tan K.C., Lee L.H. y Zhu K.Q. [23].Se va a proceder a explicar la metodología para su creación: 1. Una vez se tienen almacenadas como mínimo un número de “numelite” soluciones óptimas locales obtenidas de la intensificación comienza la creación de la matriz de cadenas élite. 2. Se selecciona un elemento del vector solución (1). Se busca en la solución anterior que el elemento seleccionado y los dos posteriores estén los tres seguidos en el mismo orden independientemente de su posición dentro del vector solución de la intensificación anterior (2). Si esto ocurre, se pasa a buscar la misma cadena en el vector solución siguiente (3), y así hasta comprobar los “numelite” vectores soluciones óptimos locales. Si la cadena bajo análisis, se encuentra en todos los vectores solución comprobados, entonces se declara cadena elite, se almacena en la matriz de cadenas élite y el bucle comienza de nuevo. 3. En el caso de que una cadena no se encuentre en todos los vectores solución óptimos locales anteriores, el bucle comienza de nuevo seleccionando el elemento inmediatamente posterior para analizarlo. Este procedimiento se realiza un número de “Numparadas-2” veces, tantas como cadenas diferentes puede haber. 63 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 En la figura 9 se muestra un esquema del proceso: Figura 9: Cadenas élite Tras terminar de crear la matriz de cadenas élite comienza el bloque de Diversificación. Bloque Diversificación El bloque de diversificación del algoritmo “complejo” sufre dos modificaciones sustanciales respecto al del algoritmo “básico”. Se sustituye la estrategia de diversificación “completamente” aleatoria implementada en el algoritmo “básico” por una estrategia compuesta por dos estrategias simples, la estrategia de cadenas elite y una estrategia basada en listas tabú. A continuación se explica el procedimiento completo de la diversificación: 1. Primero se selecciona aleatoriamente un elemento (“ele”) del vector solución, compruebo que es un elemento que no he seleccionado en alguna iteración anterior de la diversificación en la que nos encontramos (se comprueba mediante una lista en forma de vector llamada “ListaTabu2” donde los elementos toman valor uno cuando han sido seleccionados y movidos de su posición), en caso de haber sido seleccionado anteriormente se volvería a escoger aleatoriamente un nuevo nodo (“ele”) como al principio. Una vez superado esa comprobación el algoritmo continúa seguidamente comprobando si el elemento pertenece a una cadena élite o no. En caso de que pertenezca volverá al inicio a seleccionar un nuevo elemento (“ele”) aleatoriamente. 64 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 2. Tras tener seleccionado el elemento que se va a insertar en alguna posición aleatoria del vector solución, se procede a seleccionar la posición donde se va a insertar. El algoritmo no selecciona realmente una posición, sino otro elemento (llamado “coloq”) en cuya posición se insertará el elemento “ele”. El algoritmo comprobará que el elemento seleccionado “coloq” no está en medio de ninguna cadena élite, sin embargo si puede estar en algún extremo. En caso de que sí esté en medio de alguna cadena élite, el algoritmo volverá a seleccionar un elemento “coloq” aleatoriamente. La figura 10 ilustra el mecanismo expuesto: Figura 10: mecanismo del a diversificación con cadenas élite 3. Después de realizar la inserción, deben comprobarse ciertas condiciones: Condición de Inserción: comprueba que tras hacer la inserción no se ha incrementado más del 20% el valor de la función objetivo: o En caso de que no se haya superado, se aumenta en una unidad el elemento de la matriz “ListaTabu2” (que indica que a lo largo de la diversificación actual no se podrá seleccionar el elemento “ele” otra vez para insertarlo en otra posición), se certifica en el vector solución la inserción realizada, y por último se aumenta en una unidad la variable que cuantifica el número de inserciones realizadas en la diversificación. 65 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 o En caso de que si se haya superado, se selecciona otro elementoposición “coloq” aleatoriamente y se vuelve a iniciar el proceso de inserción. Si continuamente (50 veces) ocurre esto, es decir, que se aumenta más del 20% el valor de la función objetivo, el algoritmo finaliza esta etapa y pasa a las siguientes condiciones de diversificación. Condiciones de Diversificación: aquellas que hacen que se vuelva a iniciar el proceso de diversificación desde el inicio (elección de un elemento para su inserción), son 4. Si se cumple alguna de ellas, el algoritmo finaliza la diversificación, si no se cumple ninguna, vuelve a iterar desde el inicio de la diversificación. Las condiciones son: o Que se hayan hecho más inserciones que un 10% del número total de nodos destino o Que la pérdida del valor de la función objetivo sea mayor al máximo permitido “porcenmax” (parámetro del problema ) o Que al realizar alguna inserción haya disminuido la función objetivo (haya mejorado) o Que se haya producido el salto desde la condición de inserción por incapacidad de insertar el elemento seleccionado. 4. Una vez que se cumple alguna de las Condiciones de Diversificación el algoritmo pasa a la comprobar las condiciones finales, éstas son simplemente dos, y si se cumple alguna de ellas el algoritmo finaliza su ejecución, en caso de cumplirse ninguna las condiciones son las siguientes: Que se haya llegado a un número de iteraciones máximo “numeroiteracionesmax”. Que se haya producido el anterior salto comentado por incapacidad de inserción o lo que es lo mismo, incapacidad de diversificar respetando las cadenas élites. 66 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 7. PARAMETRIZACIÓN SOBRE LA RED DE PRUEBA 7.1. Red de prueba Para realizar el análisis de los parámetros del problema e intentar encontrar los valores óptimos de estos se ha hecho uso de un modelo de ciudad denominado red de prueba. Sobre este modelo se han realizado un total de 256 experimentos del algoritmo búsqueda tabú que posteriormente se implementará para ejecutarse sobre el modelo de la red de Sevilla. La red de prueba está compuesta por un total de 900 nodos (30 X 30) unidos por arcos que representan una distancia de 200 metros. La dirección de estos arcos no es aleatoria, esta predeterminada. En la figura 11 se muestra la red de prueba: Figura 11: Construcción de la red de prueba Como se ha comentado, la dirección de los arcos no es aleatoria (la flechas indican la dirección en la que se permite el movimiento de un nodo a otro), pudiéndose apreciar en la figura anterior la alternancia de las direcciones tanto en sentido vertical como en horizontal. 67 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 La zona restringida se sitúa en el centro de la red de prueba como se muestra en la siguiente figura. Su forma está definida por el modo en la que se ha creado. En torno al nodo número 435, se construye la zona restringida tomando distancias equidistantes respecto a este nodo. Las distancias no son en línea recta, sino son las distancias recorridas por el grafo respetando las direcciones de los arcos. Debido a que en la realidad se produce una mayor concentración de clientes dentro de la zona restringida. Se ha programado la creación de esta de modo que no sea del todo aleatoria la localización de los clientes, sino que se producirá una concentración mayor de clientes (nodos destino) dentro de la zona restringida, así sean cuales sean los valores de los parámetros del radio de la zona restringida y el número de clientes, se conseguirá obtener una red de prueba fiel a la realidad en ese aspecto. La figura 12 muestra la red de prueba y la zona restringida implementadas en Matlab. Figura 12: Red de prueba y zona restringida El mapa de la red de prueba proporciona la información sobre parámetros clave del problema así como el escenario geográfico detallado. Entre los parámetros, la red de prueba muestra: El número total de nodos destinos. (nodos rodeados con un circulo de color azul) 68 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Cuáles de los nodos destinos se sitúan dentro de la zona restringida. Los nodos que pertenecen a la zona restringida son los que se sitúan dentro de cuadrados de color rojo. Localización del depósito (nodo origen), este se diferencia del resto porque está dentro de un cuadrado de color negro. 7.2. Experimentos realizados Como se comentó anteriormente, los parámetros seleccionados para realizar el estudio de sensibilidad son 5 parámetros del algoritmo y tres parámetros del problema: Parámetros del algoritmo: a) Vecifitness: Número máximo de nodos sometidos a evaluación por cada estrategia de intensificación. b) numelite: Número de vectores solución que definen el conjunto de “cadenas élite”. c) radio: Es el radio de búsqueda de vecinos. d) porcenmax: Es el parámetro-condición que limita la pérdida de valor de la función objetivo tras aplicar la diversificación sobre el vector solución. e) numeroiteracionesmax: Es el número máximo de iteraciones que se ejecuta el algoritmo. Parámetros del problema: f) Numparadas: Es el número de clientes que se han de visitar. g) Radio de la zona restringida. h) Duración del periodo de tiempo con acceso restringido, este valor viene definido por el valor de los parámetros “Tiempo VC” y “Tiempo VA”. 69 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Se han realizado 256 experimentos tomando para cada parámetro dos valores (28=256). Los valores que se han elegido para cada parámetro son los siguientes: Vecifitness = (5, 8) Numelite = (5, 10) Radio de búsqueda de vecinos = (15, 25) Porcenmax = (0.12, 0.18) Numeroiteraciones = (125, 250) Numparadas = (50, 120) Radio de la zona restringida = (20, 30) Periodo con restricción de acceso = (4, 8) Los resultados obtenidos proporcionan información sobre el valor de la función objetivo obtenida con cada configuración además del número de vehículos totales empleado en cada uno de los problemas. Como se esperaba, los resultados obtenidos sirven para identificar que configuración de parámetros tiene un comportamiento óptimo (por óptimo nos referimos respecto al total de posibles combinaciones de parámetros que hemos realizado, que son un total de 256). Evidentemente el estudio de sensibilidad podría haberse realizado con tantas configuraciones de parámetros diferentes como se hubiera querido, ya que no dejan de ser parámetros lineales. El problema está en conseguir elegir unos valores de parámetros en un tiempo prudente, siendo éste suficiente para proporcionar un número de experimentos lo suficientemente grande como para que quede constancia de que no se han elegido los valores al azar, sino con una buena base para la decisión. En la figura 13 se muestra parte de la tabla de resultados donde se concentran los mejores resultados de los experimentos sobre de cada uno de los 8 escenarios propuestos: 70 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Figura 13: Resultados red de prueba En base a los resultados obtenidos se deben decidir los valores para los parámetros estudiados. Se pueden sacar las siguientes conclusiones para cada parámetro: - Vecifitness: Se observa que a mayor valor, mejores resultados se obtienen. Esto es lógico ya que mientras más vecinos entren en el análisis más posibilidades habrá encontrar al mejor vecino posible. Debido a esto, se elige asignar el valor de 8 al parámetro “vecifitness”. - Numelite: Puede verse en la tabla que la mayoría de los resultados resaltados (los mejores de cada escenario) se encuentran en problemas con un valor del parámetro “Numelite” igual a 5. Esto también es lógico debido al diseño de la estrategia de cadenas élite; un número alto supondría la ausencia de cadenas elite, y sin embargo un valor demasiado bajo provocaría que se considerasen muchas cadenas. El valor seleccionado para realizar los experimentos sobre la red de Sevilla es 5. - Radio de búsqueda de vecinos: La conclusión que se saca de los resultados es acorde con la programación del algoritmo. A más radio, mas vecinos se encuentran, y si a la vez el valor de “vecifitness” es alto, entonces se encuentran los mejores resultados. Sin embargo para respetar al algoritmo búsqueda tabú, se debe seleccionar un radio acorde con el tamaño y la densidad de nodos destinos (clientes) del problema. Es decir, no se puede imponer un radio de busca demasiado grande, porque la búsqueda local dejaría de ser “local” propiamente dicha, pasaría a ser global puesto que se evaluaría un área demasiado grande de posibles vecinos. 71 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado - 2012 Porcenmax: Se observa que no existe una dependencia clara de los resultados respecto a este parámetro, por lo que se escoge un valor intermedio entre 0.12 y 0.18, así se decide asignar el valor de 0.14 al parámetro. - Número de iteraciones: El número de iteraciones del algoritmo es importante, ya que debe ser lo suficientemente grande como para permitir encontrar un valor muy cercano al óptimo, pero a su vez debe permitir ejecutar el algoritmo en unos tiempos de computación aceptables. Los resultados muestran que con 125 iteraciones ya se encuentran valores buenos del problema. Un posterior estudio, representado por la figura 14, permite saber en qué iteración se han encontrado los mejores resultados. Este estudio muestra como en la mayoría de los casos se encuentra el mejor resultado en iteraciones tempranas, así se decide emplear un máximo de 150 iteraciones para el modelo de la red de Sevilla. Figura 14: Ocurrencia de mejores resultados 72 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 8. RESULTADOS SOBRE LA RED DE SEVILLA La red de prueba permite realizar las comprobaciones y validaciones sobre el funcionamiento correcto del algoritmo diseñado, entendiéndose como correcto, no el hecho de ser más o menos eficiente, sino de verificar que el algoritmo se ejecuta tal como se pretendía con el diseño inicial. Una vez que se consigue la anterior verificación se ha proseguido con la búsqueda de la eficiencia del algoritmo a partir de su parametrización. Este proceso es el que se ha explicado en el capítulo anterior. Uno de los objetivos del proyecto es aplicar el algoritmo un grafo que simula la ciudad de Sevilla para estudiar sus resultados, y posteriormente realizar comparaciones con los resultados obtenidos mediante un algoritmo Genético, de manera que se pueden evaluar los sobrecostes debidos a las restricciones del problema. El procedimiento a seguir para la obtención de los resultados es parecido al seguido para la obtención de los resultados sobre la red de prueba. Se realizarán un total de 600 experimentos, 300 correspondientes al algoritmo “Complejo” y otros tantos correspondientes al algoritmo “Básico”. La estructura de los experimentos está compuesta por 10 distribuciones de clientes diferentes y 30 escenarios diferentes, donde varían el número de nodos destinos (clientes), la longitud de la ventana temporal de restricción de acceso y el radio de la zona con restricción de acceso. 8.1. Red de Sevilla La red de Sevilla sobre la que se ejecuta el algoritmo tiene una estructura diferente a la de la red de prueba. Esta variación lleva consigo la obligatoriedad de modificar la programación del algoritmo para adaptarlo a la nueva red. Está compuesta por un grafo con nodos y arcos definidos simulando la geografía de la ciudad de Sevilla. En la figura 15 se ilustra la red de Sevilla utilizada. 73 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Figura 15: Red de Sevilla La red de Sevilla se compone de una matriz de distancias y otra matriz de localización de nodos. La matriz de distancias contiene las distancias existentes entre cada nodo mediante el uso de los arcos del grafo y la matriz de localización contiene la posición de cada nodo en coordenadas cartesianas. 8.2. Imposiciones sobre el problema Existen ciertas imposiciones de diseño que se han de mencionar, referentes a la ventana temporal, velocidad de los vehículos, tiempo de entrega, localización del nodo origen, etc. Uno de los aspectos de la red de Sevilla que será fijo a lo largo de los diferentes escenarios es la localización del nodo origen (depósito o almacén), el cual siempre se situará fuera de la zona restringida por defecto. Esta localización siempre externa a la zona restringida se debe a la suposición de que se sitúa el almacén o deposito en un polígono industrial de la ciudad. La ventana temporal se situara en el medio del horizonte temporal, y será de diferentes tamaños (como ya se comentó anteriormente). Así siempre se tendrá 74 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 el mismo tiempo sin restricción de acceso a la zona restringida antes y después de la ventana temporal. La velocidad de los vehículos de reparto será constante. Se estima en este tipo de problemas que la velocidad media durante el trayecto de estos vehículos por la ciudad es de 20 km/h. Esto se debe a la aparición de semáforos, atascos típicos de las zonas céntricas de las ciudades, etc. El tiempo de entrega será también fijo, de valor 20 minutos. Debido a que se ha hecho coincidir la zona restringida, con el centro del mapa de la red de Sevilla, el centro de la zona restringida está situada en el centro la red, siendo ésta de forma circular y de radio variable. Esto se ha modelado de esta forma ya que este tipo de restricciones se suelen imponer en los centros históricos de las ciudades, como en el caso de Sevilla, donde durante ciertos años se impuso la restricción de acceso al casco antiguo durante determinadas franjas horarias del día. 8.3. Parámetros del problema Como ya se comentó anteriormente existen 3 parámetros del problema que variarán para ir creando los diferentes escenarios. El radio de la zona restringida será uno de los parámetros que variarán a la hora de realizar los experimentos. Se tendrán en cuenta un total de 3 valores diferentes del radio: 1,59 km 3,96 km 7,14 km El efecto que tiene este valor sobre la solución final es muy importante ya que delimita la zona de actuación de los vehículos, obligando a realizar paradas que suponen un incremento sustancial en la función objetivo. La ventana temporal es el parámetro temporal del problema y varía entre 3 valores: 2, 4 y 6 horas. Cabe destacar que si el valor de la ventana temporal fuera 0, la zona restringida nunca estaría restringida al acceso. Es decir, tendría el mismo efecto decir que no hay ventana temporal o que no hay zona restringida. 75 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 El parámetro base del problema, el que determina el tamaño de éste, es el número de nodos destino. Toma 3 posibles valores: 50, 100 y 150 nodos. Las distintas distribuciones de nodos (escenarios diferentes) son las mismas que las que se usaron en los experimentos realizados con el algoritmo Genético con los que se van a comparar los resultados. Son 10 distribuciones diferentes de nodos. 8.4. Resultados obtenidos Se han generado 2 tablas de resultados, una por cada algoritmo búsqueda tabú diseñado. Las dos tienen la misma estructura y a continuación en la tabla 2 se muestra una de ellas, concretamente la referente al algoritmo complejo. Tabla 2: Resultados algoritmo Búsqueda Tabú Complejo En esta tabla a cada experimento le corresponden dos celdas, una indica el valor del tiempo ya comentado y la de su derecha indica el número de vehículos empleados. Están representados los resultados obtenidos de los experimentos expresados en horas, es decir, cada celda de resultado indica el tiempo que han empleado el total de los vehículos de ese experimento en completar las entregas. De estas tablas se puede obtener mucha información. En general se va a realizar el análisis desde el punto de vista temporal, pero sin dejar de lado el aspecto económico, como es la evaluación de los sobrecostes, el cual también es parte de los objetivos de este proyecto. 76 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Se ha decidido estudiar las medias de los incrementos de los resultados respecto al escenario con las condiciones más favorables, este es el escenario 2, cuyas condiciones son: 50 nodos destino, ventana temporal de 2 horas y zona restringida de radio 1,59 km. En cada una de las dos siguientes tablas (tabla 3 y tabla 4) se muestran dos columnas con datos calculados a partir de los resultados de los experimentos. Las celdas de la columna “Media” indican el valor medio de los experimentos del mismo escenario. Las celdas de la columna de su derecha indican el incremento porcentual de los valores de la columna “Media” respecto a los escenarios con las condiciones más favorables (se han omitido los resultados de los escenarios que corresponden a situaciones sin ventana temporal y sin radio de zona restringida). Además se incluyen dos graficas donde se exponen los incrementos calculados en cada tabla (gráfica 1 y gráfica 2). Cada línea de cada grafica representa la evolución del incremento de tiempo empleado medio total (suma de los tiempos empleados por todos los vehículos para realizar todas las entregas) manteniendo fijado el número de nodos destino y el radio de la zona restringida, es decir, la evolución del tiempo empleado total con respecto a la variación del tamaño de la Ventana Temporal. Se van a realizar dos análisis referentes al comportamiento del tiempo total empleado medio en satisfacer la demanda de los clientes. El primer análisis será en función de la variación de la longitud de la ventana temporal mientras que el segundo será en función de la variación del radio de la Zona Restringida. 1. Para el primer análisis se desarrollan dos tablas (tabla 3 y tabla 4) con sus dos gráficas correspondientes (gráfica 1 y gráfica 2). Para cada algoritmo se representan 1 tabla y 1 gráfica con 9 líneas. Para cada línea de cada grafica se encuentran fijados dos de los tres parámetros de la tabla, el número de Nodos Destino del escenario y el valor del radio de la Zona Restringida. Así, queda reflejado el incremento del tiempo total empleado en satisfacer a los clientes en función del aumento de la longitud de la Ventana Temporal. 77 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Búsqueda Tabú Simple: Tabla 3: Incrementos de tiempo medio respecto a la variación de la longitud de la ventana temporal en el algoritmo Búsqueda Tabú Simple. 78 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Gráfica 1: Incrementos de tiempo medio respecto a la variación de la longitud de la ventana temporal en el algoritmo Búsqueda Tabú Simple - La penalización sobre el resultado final es mayor a medida que el valor de la longitud de la ventana temporal aumenta. Aunque se puede observar que esta penalización no es lineal para cada línea del grafico (cada línea corresponde a un tamaño diferente de radio de zona restringida). Se observa un comportamiento análogo entre las líneas correspondientes a los radios mayores. Donde el incremento es más pronunciado a medida que el radio de la Zona Restringida es mayor. De hecho, para los casos en los que el radio de la Zona Restringida es el menor, el incremento se observa que tiende a la linealidad en comparación con los otros casos. 79 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Búsqueda Tabú Complejo Tabla 4: Incrementos de tiempo respecto a la variación de la longitud de la ventana temporal en el algoritmo Búsqueda Tabú Complejo. 80 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Gráfica 2: Incrementos de tiempo medio respecto a la variación de la longitud de la ventana temporal en el algoritmo Búsqueda Tabú Simple - Respecto al comportamiento de las gráficas se observa un comportamiento similar de ambos algoritmos, la diferencia radica en los tiempos medios empleados. A continuación se muestra la tabla 5, donde se realiza una comparación de los tiempos medios empleados en cada escenario por cada algoritmo, además de la gráfica 3 donde se observan las tendencias producidas: 81 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Tabla 5: Comparativa de los tiempos medios obtenidos por los algoritmos Búsqueda Tabú Gráfica 3: Gráfica de tiempos medios obtenidos 82 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Como puede observarse en la tabla 5 y en la gráfica 3 originada a partir de los datos de la tabla 5, existe un beneficio temporal evidente al aplicar el algoritmo Búsqueda Tabú Complejo en lugar del algoritmo Búsqueda Tabú Simple. Esta reducción del tiempo se ve disminuida a medida que el radio de la zona restringida aumenta, llegando simplemente a mejorar en torno al 5 % en el escenario con las condiciones más desfavorables, independientemente del número de Nodos Destino del problema. Sin embargo para un radio de la Zona Restringida relativamente pequeño, la mejoría es mayor llegando a obtener un 46.3% de reducción del tiempo en el caso más favorable, que corresponde a unas condiciones de 50 Nodos Destino, radio de la Zona Restringida de 1.59 km y 2 horas de Ventana Temporal. 2. En el segundo análisis se expone (de forma análoga al primer análisis) la tabla 6 y la gráfica 4 donde se observan los incrementos de tiempo total empleado en función de la variación del radio de la Zona Restringida. 83 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Algoritmo Búsqueda Tabú Simple Tabla 6: Incrementos de tiempo respecto a la variación del radio de la Zona Restringida en el algoritmo Búsqueda Tabú Simple. 84 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Gráfica 4: Incrementos de tiempo respecto a la variación del radio de la Zona Restringida en el algoritmo Búsqueda Tabú Simple. 85 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Algoritmo Búsqueda Tabú Complejo Tabla 7: Incrementos de tiempo respecto a la variación del radio de la Zona Restringida en el algoritmo Búsqueda Tabú Complejo. 86 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Gráfica 5: Incrementos de tiempo respecto a la variación del radio de la Zona Restringida en el algoritmo Búsqueda Tabú Complejo. - Se observa como el comportamiento a media que aumenta el radio de Zona Restringida es similar en ambos algoritmos, con la salvedad del valor de los incrementos. Es decir, proporcionalmente se producen las mismas variaciones ambos algoritmos, pero el valor absoluto de los incrementos es muy diferente entre ambos. - En valor absoluto, se producen incrementos porcentuales mayores en el algoritmo complejo, sin embargo el valor de los tiempos totales empleados son menores en éste que en el algoritmo Simple. - Se observa que el incremento en el resultado final producido por el aumento del radio de la Zona Restringida es mayor que el incremento producido por la variación de la longitud de la Ventana Temporal. Luego se concluye que el radio de la zona restringida es más influyente que la longitud de la Ventana Temporal. 87 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Para realizar la comparación de los resultados obtenidos por los algoritmos Búsqueda Tabú y el Algoritmo Genético primero se muestra en la tabla donde se comparan los resultados medios obtenidos para cada escenario por los tres algoritmos. Tabla 8: Comparación de tiempos medios de los algoritmos Búsqueda Tabú y el algoritmo Genético Los resultados obtenidos por el algoritmo Genético, a nivel de resultado numérico, están en el mismo orden de magnitud que los resultados obtenidos por los algoritmos Búsqueda Tabú. Es un hecho que el algoritmo Genético obtiene mejores resultados para escenarios con un número de nodos destino elevado. Pero la comparación más importante entre los tres algoritmos no 88 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 radica en el resultado numérico sino en el tiempo empleado para obtener los resultados. Mientras que para el caso del algoritmo Búsqueda Tabú Complejo, la ejecución del algoritmo para el escenario más desfavorable se realiza en 35-40 minutos, en el caso del algoritmo genético este tiempo es mucho mayor llegando a obtenerse tiempos del orden de días. En las siguientes gráficas (figura 17), obtenida a partir de los resultados de la tabla 8, se observa la evolución de los tiempos de reparto según el escenario y los Nodos Destino. Cabe destacar que coincide que en las tres gráficas, en escenarios más favorables, el algoritmo complejo obtiene los mejores resultados mientras que a medida que las condiciones empeoran, es el algoritmo Genético el que tiende a ser el mejor. Figura 16: Gráficas representativas de los tiempos medios de los tres algoritmos Respecto a la evaluación de los sobrecostes producidos al endurecer las restricciones, cabe destacar que el impacto producido por la utilización de un solo vehículo más es muchísimo más significante que las repercusiones 89 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 económicas producidas por las diferencias existentes entre el tiempo empleado en recorrer las rutas de los diferentes algoritmos. Esto se debe a que el coste de tener la posibilidad de poder utilizar un vehículo (disponibilidad del vehículo, compra de un vehículo más, salario del conductor, seguro del vehículo…) es mucho mayor que en el que se incurre por utilizarlo (recorrer distancias solo produce gasto de gasolina). Teniendo en cuenta esto, tendremos en cuenta para evaluar los sobrecostes el número de vehículos utilizado. Se toman los datos sobre los vehículos utilizados de la tabla 9 para los algoritmos Búsqueda Tabú Complejo y Genético. Estudiaremos el caso del escenario con 150 nodos destino. Se pueden sacar diversas conclusiones de la gráfica 6, que representa la evolución del uso de vehículos respecto a la variación de la longitud de la ventana temporal para el escenario de 150 nodos destino. Gráfica 6: Evolución y comparación del uso de vehículos respecto a la variación de la longitud de la ventana temporal para el escenario de 150 nodos destino. 90 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Tabla 9: Evolución del uso de vehículos respecto a la variación de la longitud de la ventana temporal para el escenario de 150 nodos destino. Puede observarse lo siguiente: El sobrecoste producido por aumentar la longitud de la ventana temporal es mayor cuando se pasa de una longitud de 4h. a 6h. que cuando se pasa de 2h. a 4h. De hecho, se llega a triplicar el coste en los escenarios con radios de la zona restringida de 3.96 km y 7.14 km. El sobrecoste producido al utilizar el algoritmo Búsqueda Tabú es ligeramente menor ((28%-24%)/24%=16.6% menos) en el caso de un radio de zona restringida de 1.59 km y ligeramente mayor ((177%166%)/166%=6.62% para RZ=3.96 km y (194%-170%)/170%=14.1% para RZ=7.14 km) en los otros dos casos. El sobrecoste ocasionado por aumentar el radio de la zona restringida es alto en el caso de pasar del radio menor al intermedio, y más pequeño al pasar del radio intermedio al radio mayor. A continuación se muestra en la tabla 10 la evolución de los incrementos de los tiempos totales empleados en cada escenario en función de la variación de la longitud de la Ventana Temporal incluyendo los datos del algoritmo Genético: 91 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Tabla 10: Incrementos medios de tiempo de los tres algoritmos en función de la variación de la Ventana Temporal Como puede observarse, el incremento de tiempo experimentado en el algoritmo Genético es más suave que en el algoritmo Búsqueda Tabú Complejo. Esto se debe a que en el caso del algoritmo Complejo el valor inicial sobre el que se mide es menor que en el caso del algoritmo Genético, sin embargo, el valor final es ligeramente mayor, por esta razón el incremento es más suave en uno y más brusco en otro. 92 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 9. CONCLUSIONES Tras exponer los datos recopilados de los experimentos realizados, se recopilan las conclusiones que se han ido detallando durante la presentación de los resultados y se añaden más conclusiones generales relacionadas con los objetivos del proyecto final de carrera. Cabe recordar que los objetivos del proyecto son realizar el estudio de sobrecostes de los resultados obtenidos de la ejecución de simulaciones de algoritmos basados en la Búsqueda Tabú en los diferentes escenarios propuestos, y realizar una comparación de metaheurísticas tomando los resultados obtenidos por un algoritmo Genético sobre los mismos escenarios que los usados en las simulaciones de los algoritmos Búsqueda Tabú implementados. Tras el análisis de los resultados, se puede decir que el Algoritmo Búsqueda Tabú es un método de búsqueda local que permite en un tiempo de ejecución aceptable obtener resultados cercanos al óptimo global sin hacer uso de recursos de computación altos. El algoritmo genético proporciona resultados cercanos al optimo ligeramente mejores en algunos escenarios pero con el hándicap de haberlos conseguido en tiempos de ejecución más de 30 veces mayores que el empleado por el algoritmo Búsqueda Tabú Complejo y más de 50 veces mayores si los comparamos con el algoritmo Búsqueda Tabú Simple. Desde el punto de vista puramente temporal, se pueden sacar las siguientes conclusiones dependiendo del tipo de escenario que se plantee. Para escenarios donde las condiciones de radio de la Zona Restringida y longitud de la Ventana Temporal no son fuertemente restrictivas, el algoritmo Búsqueda Tabú Complejo obtiene los mejores resultados, pero a medida que estas condiciones se endurecen, el algoritmo Genético es el que consigue los mejores resultados. En el caso de haber empleado el mismo tiempo de computación en los tres algoritmos es predecible que el algoritmo complejo obtendría los mejores resultados, sin embargo durante el diseño de los experimentos se concluyó que sería más factible limitar el número de iteraciones del algoritmo en lugar de obligar a continuar su ejecución durante un tiempo determinado. 93 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Desde el punto de vista de una empresa de reparto de mercancías a nivel local, donde los planes de reparto se hacen en la mayoría de los casos en el mismo día debido por un lado a la competencia y por otro lado al nivel de servicio exigido por los clientes, la utilización de un algoritmo búsqueda Tabú sería más beneficioso en términos temporales que la utilización de un algoritmo Genético para calcular sus rutas. Sin embargo, si el tiempo disponible para el cálculo de las rutas es mayor, quizás les beneficie más la utilización el algoritmo Genético cuyos resultados se muestran en este proyecto. Cabe destacar que los algoritmos Búsqueda Tabú presentados en este proyecto son mejorables desde el punto de vista del diseño de la programación computacional, lo que mejoraría considerablemente los tiempos de ejecución obtenidos. También, desde el punto de vista del diseño funcional, al algoritmo búsqueda Tabú se le pueden aplicar una cantidad muy diversa de estrategias tanto de intensificación como de diversificación que con toda seguridad podrían mejorar los resultados obtenidos en este proyecto. El estudio del algoritmo Búsqueda Tabú es relativamente moderno por lo que existen muchas vías abiertas para la mejora de éste. 94 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 10. BIBLIOGRAFÍA [1] Aarts, E. and Lenstra, J. 2003, “Local search in combinatorial optimization”, John Wiley & Sons. [2] Applegate, D. L.; Bixby, R. E.; Chvátal, V. and Cook, W. J. 2006, “The traveling salesman problem: a computational study”. Princeton University Press. [3] Bard, J. F.; Huang, L.; Dror, M. and Jaillet, P. 1997, “A branch and cut algorithm for the VRP with satellite facilities”, IIE Transactions, no. 30, pp. 821-834. [4] Clarke, G. and Wright, W. 1964, “Scheduling of vehicles from a central depot to a number of delivery points”. Operations Research, no. 12. [5] Cormen T. H., et al 1999, “Introduction to Algorithms”, pp. 180-204, Massachusett. [6] Díaz, A., Glover, F., Ghaziri, H.M., et al 1996, “Optimización Heurística y Redes Neuronales”, Paraninfo, Madrid. [7] ETH Zürich. 1996, “Operation Forms for the Network Modes IN-95SC.001”, Impulse European Commission, Bruxelles. [8] Faulin J. and Juan A. 2008, “The Algacea-1 method for the Capacitated Vehicle Routing Problem”, International Transactions in Operational Research. [9] Feo T.A. and Resende M.G.C. 1995, “Greedy randomized adaptive search procedures”, Journals of Global Optimization, no. 6, pp. 109–133. [10] Glover, F. and Laguna, M. (eds.) 1997, “Tabu search”, Kluwer Academic Publishers, Boston. [11] Glover, F. and Melian, B. 2003, “Tabu search”, Revista Iberoamericana de Inteligencia Artificial, no. 19, pp. 29-48. [12] Glover, F. 1989, “Tabu Search – Part I”, ORSA Journal on computing, vol. 1, no. 3, pp. 190-206. 95 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 [13] Glover, F. and Kochenberger G. A. (eds.) 2003, “Handbook of Metaheuristics”, Kluwer Academic Publishers, Boston. [14] Golden B., Raghavan S. and Wasil E.E. 2008, “The Vehicle Routing Problem: Latest Advances and New Challenges”, Springer. New York, USA. [15] Huschebeck, M. March 2001, “Best Urban Freight Solutions”, European Commission. [16] Johnson, D. S. and McGeoch, L. A. 1995, “The traveling salesman problem: a case study in local optimization”. [17] Koriath H. and Thetrich W. 1998, “Urban Goods Transport”, Final report of the action Office for Official Publications of the EC, Bruxelles, Luxembourg. [18] Laporte, G.; Gendreau, M.; Potvin, J. and Semet, F. 2000, “Classical and modern heuristics for the vehicle routing problem”, International Transaction in Operational Research, no. 7, pp. 285-300. [19] Martí, Rafael. “Procedimientos Metaheurísticos Combinatoria”, Matemàtiques, vol. 1, no. 1, pp. 3-62. en Optimización [20] Robusté, F. 1999, “Logística de la distribución urbana de mercancías”, I Congreso Internacional de Ingeniería de Tráfico Urbano, Madrid. [21] Schäffeler, U., Wichser, J. 2003, “Inner Urban Freight Transport and City Logistics”, written material, pp. 1-51. [22] Stadt Zürich. Umweltbericht 2001, Umwelt- und Gesundheitsschutz Zürich (UGZ) Umweltschutzfachstelle, Zürich. [23] Tan K.C., Lee L.H. and Zhu K.Q. 2000, “Heuristic Methods for Vehicle Routing Problem with Time Windows”, Proceedings of the 6th International Symposium on Artificial Intelligence and Mathematics, Ft. Lauderdale, Florida. [24] Toth P. and Vigo D. 2003, “The Granular Tabu Search and its Application to the Vehicle Routing Problem”, Informs Journal on Computing Fall. 96 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 [25] Toth P. and Vigo D. 2002, “The vehicle routing problem”, SIAM Monographs on Discrete Mathematics and Applications, vol. 9, 157-193, Philadelphia, PA. 97 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 11. ANEXOS A continuación se va a mostrar el código en lenguaje M de los algoritmos Búsqueda Tabú Complejo y Simple. Teniendo en cuenta las estructuras de los algoritmos, que ya se ha visto anteriormente, se van a presentar los diferentes bloques de los algoritmos por separado para una mejor visualización. Previamente se van a presentar ciertos vectores importantes para una mejor comprensión. Sol_inten: Vector de tamaño igual al número de nodos parada (nodos clientes). Es el vector que indica la solución al problema, es decir, la secuencia de nodos parada que debe seguirse por los vehículos de entrega. En él, los nodos no se identifican con su número real dentro de la red de nodos del mapa sino con índices que van desde el 1 al N (siendo N igual al número de nodos parada). Sol_inten_real: Indica lo mismo que el vector Sol_inten pero en este caso, los nodos si se indican con su número real. Lista tabú: Es una matriz de NxN (siendo N igual al número de nodos parada) donde los elementos (un elemento i,j) indican qué pareja de nodos (la pareja i,j por ejemplo) ha sufrido un intercambio o una inserción en las estrategias de intensificación. Un número mayor que cero de un elemento indica que han intervenido en alguna de las estrategias y serán considerados movimientos tabú. RutaMejor: Es la matriz de salida más importante de la función Fitness. Indica las rutas que deben seguir cada vehículo para completar las entregas además de indicar el valor de la función objetivo (también indicado por la variable “valorfitness”) del modelo. Longitudrutas: Matriz de orden NxN que indica la distancia mínima entre los “Nodos parada” del problema. 98 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 11.1. Algoritmo Búsqueda Tabú Simple El algoritmo se divide en dos bloques denominados Intensificación y Diversificación que se exponen a continuación. Antes del comienzo de la intensificación, se crean varias constantes y vectores de entrada así como ciertas variables necesarias para la ejecución correcta del algoritmo. Así, se expone el código a continuación: tic; format short conta=0; vecifitness=8; numelite=5; radio=3500; porcenmax=0.14; numeroiteracionesmax=150; Tiempoentregamax=5.2870; Costevehiculo=8000; num_iter_de_inten=40; % Número de iteraciones de intensificación como máximo Numerotabu=round(2*sqrt(Numparadas)); % número de iteraciones de intensificación que un movimiento es considerado tabú valorfitnessmejor=9000000000; nej=500; fallotiemponeg=0; num_intercambios=0; num_inserciones=0; num_iter_cambio=0;% Número de iteraciones a partir de las cuales tengo en cuenta el fitness completo. Sol_inten=Indicessolucioninicial;%Sol_inten está compuesto de las posiciones en la matriz Longitudrutas, de las soluciones Sol_inten_real=Solucioninicial;%Sol_inten_real está compuesto de los nodos reales. ListaTabu=zeros(Numparadas+1); ListaTabuContador=zeros(Numparadas+1); Matrizsolucionesintensificacion=zeros(1,num_iter_de_inten); problemafinal=0; numiter=0; iter_de_inten=0; 99 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 iguales=0; valorfitness=0; Matrizultimassoluciones=zeros(numelite,length(Indicesparadas)); I_previofitnessmio; [qw,qe]=size(RutaMejor); Vectorsolucionesfinales=RutaMejor(qw,1); while problemafinal==0; % WHILE DEL ALGORITMO COMPLETO Vectorsolucionesintensificacion=zeros(1,num_iter_de_inten); iter=1; 100 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 11.1.1. Bloque Intensificación Se muestra el bloque de Intensificación, el cual consta de una estrategia única de mejora. Se pueden diferenciar las diferentes etapas existentes dentro del bloque que se explican en capítulos anteriores. while (iter_de_inten<=40)&&(iguales==0) RutaMejorInicial=RutaMejor; valorfitnessinicial=valorfitness; for i=1:Numparadas [m,n]=find(RutaMejor==Sol_inten(i));% Localizo fila y columna en RutaMejor del nodo que estoy analizando if (IndicesparadasZR(Sol_inten_real(i))==1)% Pregunto si es interno if n==1 T_ac=MatriztiemposrutaSalida(m,n)-Tiempoentregamax-Longitudrutas(Numparadas+1,Sol_inten(i));%el T_ac = tiempo acumulado hasta hacer la entrega en el nodo anterior. if T_ac<TiempoVC Indicador2=0; else if T_ac>=TiempoVA Indicador2=2; else Indicador2=1; end end else T_ac=MatriztiemposrutaEntrada(m,n)-Longitudrutas(Sol_inten(i-1),Sol_inten(i)); if T_ac<TiempoVC Indicador2=0; else if T_ac>=TiempoVA Indicador2=2; 101 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 else a=n-1; b=0; while (a>0)&&(b==0) if (IndicesparadasZR(Sol_inten_real(a))==0) b=1; end a=a-1; end if b==1 Indicador2=2; else Indicador2=1; end end end end else if n==1 T_ac=MatriztiemposrutaSalida(m,n)-Tiempoentregamax-Longitudrutas(Numparadas+1,Sol_inten(i)); if T_ac<TiempoVC Indicador2=0; else if T_ac<TiempoVA Indicador2=1; else Indicador2=2; end end else T_ac=MatriztiemposrutaEntrada(m,n)-Longitudrutas(Sol_inten(i-1),Sol_inten(i)); if T_ac<TiempoVC Indicador2=2; else if T_ac<TiempoVA Indicador2=1; else 102 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Indicador2=2; end end end end % BUSQUEDA DE VECINOS Vecinosaux=zeros(1,Numparadas); for k=1:Numparadas %Calculo los vecinos que tengo para la parada i. if Indicador2==0 if (Distanciaentrenodos0(i,k)>0)&&(Distanciaentrenodos0(i,k)<radio) Vecinosaux(k)=1; end end if Indicador2==1 if (Distanciaentrenodos1(i,k)>0)&&(Distanciaentrenodos1(i,k)<radio) Vecinosaux(k)=1; end end if Indicador2==2 if (Distanciaentrenodos2(i,k)>0)&&(Distanciaentrenodos2(i,k)<radio) Vecinosaux(k)=1; end end end Vecinos=find(Vecinosaux); %vector de vecinos, ej: Vecinos={2 8 13 17 18 29...) son las posiciones en la matriz de longituderutas de los nodos que son vecinos. %HAY QUE TENER EN CUENTA QUE EL ORDENAMIENTO DE LOS NODOS EN LONGITUDRUTAS %ES EL MISMO QUE EN INDICESPARADAS %ESTRATEGIA DE INTERCAMBIO DURO DE VECINOS. %Cálculo de distancias entre la parada "(i-1)" y los vecinos y el "i" actual q=length(Vecinos); 103 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 distvecinal=zeros(1,q); if i==1 for k=1:q distvecinal(k)=Longitudrutas(Numparadas+1,Vecinos(k))+Longitudrutas(Vecinos(k),(i+1)); %vector de distancias desde el (i-1) a vecinos. end else if i==Numparadas for k=1:q distvecinal(k)=Longitudrutas((i-1),Vecinos(k))+Longitudrutas(Vecinos(k),(Numparadas+1)); %vector de distancias desde el (i-1) a vecinos. end else for k=1:q distvecinal(k)=Longitudrutas((i-1),Vecinos(k))+Longitudrutas(Vecinos(k),(i+1)); %vector de distancias desde el (i-1) a vecinos. end end end %por si acaso el tamaño del vector de vecinos es menor que %el número de vecinos a los que les quiero hacer el fitness if q<=vecifitness d=q; else d=vecifitness; end matrizdistvecinalorden=zeros(d,2); k=1; t=1; while t<=d [valor,posicion]=min(distvecinal); %calculo el menor valor que queda en el vector distvecinal if (ListaTabu(Vecinos(posicion),Sol_inten(i))>0)||(ListaTabu(Sol_inten(i),Vecinos(posicion))>0)%pregunto si es tabú su intercambio if k==1 %CRITERIO DE ASPIRACION matrizdistvecinalorden(k,1)=posicion; 104 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 matrizdistvecinalorden(k,2)=valor; distvecinal(posicion)=200000000000000; k=k+1; %indicador de rellenado de marizdistvecinalorden t=t+1; %indicador de recorrido del vector distvecinal end distvecinal(posicion)=20000000000000; t=t+1; % SI ES TABÚ, Y NO ES EL MÍNIMO, ENTONCES NOS LO SALTAMOS, % PONIENDO MUY ALTO SU VALOR EN EL VECTOR "distvecinal" else matrizdistvecinalorden(k,1)=posicion; matrizdistvecinalorden(k,2)=valor; distvecinal(posicion)=20000000000000; k=k+1; t=t+1; end end d=k-1;%ahora "d" pasa a ser el número de filas de matrizdistvecinalorden matrizdistvecinalorden=matrizdistvecinalorden(1:d,:); Vectorfitnessvecinos=zeros(1,d); Matriz_sol_inten_aux=zeros(d,Numparadas); Matriz_sol_inten_real_aux=zeros(d,Numparadas); for k=1:d %intercambio de nodos tanto en los índices como en los reales nodonuevo=Sol_inten(Vecinos(matrizdistvecinalorden(k,1)));% Sol_inten_aux=Sol_inten; Sol_inten_aux(i)=nodonuevo; Sol_inten_aux(Vecinos(matrizdistvecinalorden(k,1)))=Sol_inten(i); Matriz_sol_inten_aux(k,:)=Sol_inten_aux; nodonuevoreal=Sol_inten_real(Vecinos(matrizdistvecinalorden(k,1))); Sol_inten_real_aux=Sol_inten_real; Sol_inten_real_aux(i)=nodonuevoreal; Sol_inten_real_aux(Vecinos(matrizdistvecinalorden(k,1)))=Sol_inten_real(i); 105 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Matriz_sol_inten_real_aux(k,:)=Sol_inten_real_aux; %Sol_inten_aux y Sol_inten_real_aux ya tienen los nodos intercambiados % hacerle el ftnesspeq o el fitness normal depende del número de numiter fallotiemponeg=0; if numiter<num_iter_cambio [RutaMejoraux,r,valorfitness,MatriztiemposrutaEntrada,MatriztiemposrutaSalida]=fitnesspeq(Sol_inten_real_aux,Numpara das,TiempoVC,TiempoVA,IndicesparadasZR,Longitudrutasres,Longitudrutas,Indicesparadas,Sol_inten_aux,Costevehiculo,Tie mpoentregamax,Findia); else [RutaMejoraux,r,valorfitness,MatriztiemposrutaEntrada,MatriztiemposrutaSalida]=fitness(Sol_inten_real_aux,Numparadas ,TiempoVC,TiempoVA,IndicesparadasZR,LongitudDentro,Longitudrutasres,Longitudrutas,Indicesparadas,Sol_inten_aux,Coste vehiculo,Tiempoentregamax,Findia); end Vectorfitnessvecinos(k)=valorfitness; end [minfit1,lugar1]=min(Vectorfitnessvecinos); [m,n]=size(RutaMejor); % if RutaMejor(m,1)>minfit1 if minfit2>minfit1 num_intercabios=num_intercambios+1; % %intercambio definitivo de nodos tanto en los indices como en los nodonuevo=Sol_inten(Vecinos(matrizdistvecinalorden(lugar1,1)));% Sol_inten(Vecinos(matrizdistvecinalorden(lugar1,1)))=Sol_inten(i); Sol_inten(i)=nodonuevo; reales 106 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 nodonuevoreal=Sol_inten_real(Vecinos(matrizdistvecinalorden(lugar1,1))); Sol_inten_real(Vecinos(matrizdistvecinalorden(lugar1,1)))=Sol_inten_real(i); Sol_inten_real(i)=nodonuevoreal; % PENALIACIÓN EN LISTA TABÚ ListaTabu(Sol_inten(Vecinos(matrizdistvecinalorden(lugar1,1))),Sol_inten(i))=Numerotabu+1; ListaTabuContador(Sol_inten(Vecinos(matrizdistvecinalorden(lugar1,1))),Sol_inten(i))=ListaTabuContador(S ol_inten(Vecinos(matrizdistvecinalorden(lugar1,1))),Sol_inten(i))+1; % Calculo de tiempos, rutamejor... fallotiemponeg=0; if numiter<num_iter_cambio [RutaMejor,r,valorfitness,MatriztiemposrutaEntrada,MatriztiemposrutaSalida]=fitnesspeq(Sol_inten_real,Numparadas,Tie mpoVC,TiempoVA,IndicesparadasZR,Longitudrutasres,Longitudrutas,Indicesparadas,Sol_inten,Costevehiculo,Tiempoentregam ax,Findia); else [RutaMejor,r,valorfitness,MatriztiemposrutaEntrada,MatriztiemposrutaSalida]=fitness(Sol_inten_real,Numparadas,Tiempo VC,TiempoVA,IndicesparadasZR,LongitudDentro,Longitudrutasres,Longitudrutas,Indicesparadas,Sol_inten,Costevehiculo,Ti empoentregamax,Findia); end end if valorfitnessinicial==valorfitness iguales=1; end iter_de_inten=iter_de_inten+1; Vectorsolucionesintensificacion(iter)=valorfitness; iter=iter+1; end %FINAL DEL BUCLE WHILE DE INTENSIFICACIÓN iguales=0; 107 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 iter_de_inten=0; valorfitnessintensificacion=valorfitness; Matrizsolucionesintensificacion=[Matrizsolucionesintensificacion;Vectorsolucionesintensificacion]; Vectorsolucionesfinales=[Vectorsolucionesfinales;valorfitnessintensificacion]; [m,n]=size(RutaMejor); valorneg=0; %para no tener en cuenta posibles valores erróneos de matriztiempostrutaentrada. for k=1:(m-1) if MatriztiemposrutaEntrada(k,1)<Longitudrutas((Numparadas+1),RutaMejor(k,1)) valorneg=1; end end if ((((valorfitness<valorfitnessmejor)&&(n<=nej)))&& (valorneg==0)) sumarle un camión valorfitnessmejor=valorfitness; Mejor_Solucion=RutaMejor; Mejor_Solucion_tiemposrutaEntrada=MatriztiemposrutaEntrada; Mejor_Solucion_tiemposrutaSalida=MatriztiemposrutaSalida; %si es mejor el fitness pero no a costa de [mej,nej]=size(Mejor_Solucion); end % Actualización lista tabú for k=1:(Numparadas+1) for kp=1:(Numparadas+1) if ListaTabu(k,kp)>0 ListaTabu(k,kp)=ListaTabu(k,kp)-1; end end end 108 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 11.1.2. Bloque Diversificación El Bloque Diversificación actúa de manera totalmente aleatoria % SELECIÓN Y COLOCACIÓN DE ELEMENTOS diver=0; ListaTabu2=zeros(1,Numparadas); mov=0; %me cuenta el número de movimientos que hago en la diversificación conta=0; Sol_inten_aux=Sol_inten; Sol_inten_real_aux=Sol_inten_real; while diver==0; diver1=0; diver2=0; while diver2==0 % Sol_inten_aux=Sol_inten; % Sol_inten_real_aux=Sol_inten_real; diver3=0; diver4=0; diver5=0; aleat=rand; nodointer1=round(Numparadas*aleat); if nodointer1<1 nodointer1=1; end aleat2=rand; nodointer2=round(Numparadas*aleat2); if nodointer2<1 nodointer2=1; 109 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 end Sol_inten_aux(nodointer1)=Sol_inten(nodointer2); Sol_inten_aux(nodointer2)=Sol_inten(nodointer1); Sol_inten_real_aux(nodointer1)=Sol_inten_real(nodointer2); Sol_inten_real_aux(nodointer2)=Sol_inten_real(nodointer1); fallotiemponeg=0; if numiter<num_iter_cambio [RutaMejor,r,valorfitness,MatriztiemposrutaEntrada,MatriztiemposrutaSalida]=fitnesspeq(Sol_inten_real_aux,Numparadas ,TiempoVC,TiempoVA,IndicesparadasZR,Longitudrutasres,Longitudrutas,Indicesparadas,Sol_inten_aux,Costevehiculo,Tiempo entregamax,Findia); else [RutaMejor,r,valorfitness,MatriztiemposrutaEntrada,MatriztiemposrutaSalida]=fitness(Sol_inten_real_aux,Numparadas,Ti empoVC,TiempoVA,IndicesparadasZR,LongitudDentro,Longitudrutasres,Longitudrutas,Indicesparadas,Sol_inten_aux,Costeveh iculo,Tiempoentregamax,Findia); end porcen=1-(valorfitnessintensificacion/valorfitness); %para la condición de perdida de fitness if porcen<0.2 Sol_inten=Sol_inten_aux; Sol_inten_real=Sol_inten_real_aux; mov=mov+1; diver2=1; else Sol_inten_aux=Sol_inten; Sol_inten_real_aux=Sol_inten_real; end end 110 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 conta=conta+1; fallotiemponeg=0; if numiter<num_iter_cambio [RutaMejor,r,valorfitness,MatriztiemposrutaEntrada,MatriztiemposrutaSalida]=fitnesspeq(Sol_inten_real,Numparadas,Tie mpoVC,TiempoVA,IndicesparadasZR,Longitudrutasres,Longitudrutas,Indicesparadas,Sol_inten,Costevehiculo,Tiempoentregam ax,Findia); else [RutaMejor,r,valorfitness,MatriztiemposrutaEntrada,MatriztiemposrutaSalida]=fitness(Sol_inten_real,Numparadas,Tiempo VC,TiempoVA,IndicesparadasZR,LongitudDentro,Longitudrutasres,Longitudrutas,Indicesparadas,Sol_inten,Costevehiculo,Ti empoentregamax,Findia); end %CONDICIONES DE LA DIVERSIFICACIÓN porcen=1-(valorfitnessintensificacion/valorfitness); %para la condición de perdida de fitness porcen2=mov/Numparadas; if ((porcen2>0.1)||(porcen<0))||((porcen>porcenmax)||(conta==50)) que las ultimas soluciones finales no varían. diver=1; end end numiter=numiter+1 % CONDICIONES FINALES. %dándole un valor a conta alto me dice sol_totales=length(Vectorsolucionesfinales); porcen3=Vectorsolucionesfinales(sol_totales)/Vectorsolucionesfinales(sol_totales-1); if (numiter>numeroiteracionesmax)||(conta==50) problemafinal=1; end end tiempo_tabu=toc; Fin del algoritmo Búsqueda Tabú Simple 111 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 11.2. Algoritmo Búsqueda Tabú Complejo El algoritmo comienza definiendo ciertas constantes y vectores necesarios para la ejecución antes de comenzar a ejecutarse el bucle “while” de la intensificación. num_iter_de_inten=40; % Número de iteraciones de intensificación como máximo Numerotabu=round(2*sqrt(Numparadas)); % Número de penalización sufrida por una pareja de nodos denominada como tabú. valorfitnessmejor=9000000000; nej=500; fallotiemponeg=0; num_intercambios=0; num_inserciones=0; num_iter_cambio=0;% Número de iteraciones a partir de las cuales tengo en cuenta el fitness completo. Sol_inten=Indicessolucioninicial; %Sol_inten está compuesto de las posiciones en la matriz Longitudrutas, de las soluciones Sol_inten_real=Solucioninicial; %Sol_inten_real está compuesto de los nodos reales. ListaTabu=zeros(Numparadas+1); ListaTabuContador=zeros(Numparadas+1); Matrizsolucionesintensificacion=zeros(1,num_iter_de_inten); problemafinal=0; numiter=0; iter_de_inten=0; iguales=0; valorfitness=0; Matrizultimassoluciones=zeros(numelite,length(Indicesparadas)); I_previofitnessmio; %Fitness aplicado a la solución inicial de entrada. [qw,qe]=size(RutaMejor); Vectorsolucionesfinales=RutaMejor(qw,1); while problemafinal==0; % WHILE DEL PROBLEMA COMPLETO Vectorsolucionesintensificacion=zeros(1,num_iter_de_inten); iter=1; 112 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 11.2.1. Bloque Intensificación En este bloque se desarrolla un bucle “while” donde se ejecuta la intensificación, para posteriormente actualizar ciertos vectores y constantes también dentro de la intensificación, pero fuera del bucle “while”. A continuación se muestra el bloque completo. while (iter_de_inten<=40)&&(iguales==0) RutaMejorInicial=RutaMejor; valorfitnessinicial=valorfitness; for i=1:Numparadas [m,n]=find(RutaMejor==Sol_inten(i));% Localizo fila y columna en RutaMejor del nodo que estoy analizando %BLOQUE DONDE SE SELECCIONA EL TIPO DE NODO QUE SE TIENE QUE BUSCAR EN LA BÚSQUEDA DE VECINOS, DENTRO DE LA RZ, FUERA DE LA RZ, O DA IGUAL if (IndicesparadasZR(Sol_inten_real(i))==1)% Pregunto si es interno a la zona restringida if n==1 % caso afirmativo T_ac=MatriztiemposrutaSalida(m,n)-Tiempoentregamax-Longitudrutas(Numparadas+1,Sol_inten(i));%el T_ac = tiempo acumulado hasta hacer la entrega en el nodo anterior. if T_ac<TiempoVC Indicador2=0; else if T_ac>=TiempoVA Indicador2=2; else Indicador2=1; end end else T_ac=MatriztiemposrutaEntrada(m,n)-Longitudrutas(Sol_inten(i-1),Sol_inten(i)); 113 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 if T_ac<TiempoVC Indicador2=0; else if T_ac>=TiempoVA Indicador2=2; else a=n-1; b=0; while (a>0)&&(b==0) if (IndicesparadasZR(Sol_inten_real(a))==0) b=1; end a=a-1; end if b==1 Indicador2=2; else Indicador2=1; end end end end else if n==1 T_ac=MatriztiemposrutaSalida(m,n)-Tiempoentregamax-Longitudrutas(Numparadas+1,Sol_inten(i)); if T_ac<TiempoVC Indicador2=0; else if T_ac<TiempoVA Indicador2=1; else Indicador2=2; end end else T_ac=MatriztiemposrutaEntrada(m,n)-Longitudrutas(Sol_inten(i-1),Sol_inten(i)); if T_ac<TiempoVC 114 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Indicador2=2; else if T_ac<TiempoVA Indicador2=1; else Indicador2=2; end end end end %AHORA COMIENZA LA BUSQUEDA DE VECINOS Vecinosaux=zeros(1,Numparadas); for k=1:Numparadas %Calculo los vecinos que tengo para la parada i. if Indicador2==0 if (Distanciaentrenodos0(i,k)>0)&&(Distanciaentrenodos0(i,k)<radio) Vecinosaux(k)=1; end end if Indicador2==1 if (Distanciaentrenodos1(i,k)>0)&&(Distanciaentrenodos1(i,k)<radio) Vecinosaux(k)=1; end end if Indicador2==2 if (Distanciaentrenodos2(i,k)>0)&&(Distanciaentrenodos2(i,k)<radio) Vecinosaux(k)=1; end end end Vecinos=find(Vecinosaux); %vector de vecinos, ej: Vecinos={2 8 13 17 18 29...) son las posiciones en la matriz de longituderutas de los nodos que son vecinos. %HAY QUE TENER EN CUENTA QUE EL ORDENAMIENTO DE LOS NODOS EN LONGITUDRUTAS ES EL MISMO QUE EN INDICESPARADAS 115 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 % ESTRATEGIA DE INTERCAMBIO PURO DE VECINOS %Cálculo de distancias entre la parada "(i-1)" y los vecinos y el "i" actual q=length(Vecinos); distvecinal=zeros(1,q); if i==1 for k=1:q distvecinal(k)=Longitudrutas(Numparadas+1,Vecinos(k))+Longitudrutas(Vecinos(k),(i+1)); %vector de distancias desde el (i-1) a vecinos. end else if i==Numparadas for k=1:q distvecinal(k)=Longitudrutas((i-1),Vecinos(k))+Longitudrutas(Vecinos(k),(Numparadas+1)); %vector de distancias desde el (i-1) a vecinos. end else for k=1:q distvecinal(k)=Longitudrutas((i-1),Vecinos(k))+Longitudrutas(Vecinos(k),(i+1)); %vector de distancias desde el (i-1) a vecinos. end end end %por si acaso el tamaño del vector de vecinos es menor que %el número de vecinos a los que les quiero hacer el fitness if q<=vecifitness d=q; else d=vecifitness; end 116 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 matrizdistvecinalorden=zeros(d,2); k=1; t=1; while t<=d [valor,posicion]=min(distvecinal); %calculo el menor valor que queda en el vector distvecinal if (ListaTabu(Vecinos(posicion),Sol_inten(i))>0)||(ListaTabu(Sol_inten(i),Vecinos(posicion))>0)%pregunto si es tabú su intercambio if k==1 %CRITERIO DE ASPIRACIÓN matrizdistvecinalorden(k,1)=posicion; matrizdistvecinalorden(k,2)=valor; distvecinal(posicion)=200000000000000; k=k+1; %indicador de rellenado de marizdistvecinalorden t=t+1; %indicador de recorrido del vector distvecinal end distvecinal(posicion)=20000000000000; t=t+1; % SI ES TABÚ, Y NO ES EL MÍNIMO, ENTONCES NOS LO SALTAMOS, % PONIENDO MUY ALTO SU VALOR EN EL VECTOR "distvecinal" else matrizdistvecinalorden(k,1)=posicion; matrizdistvecinalorden(k,2)=valor; distvecinal(posicion)=20000000000000; k=k+1; t=t+1; end end d=k-1; %ahora "d" pasa a ser el número de filas de matrizdistvecinalorden matrizdistvecinalorden=matrizdistvecinalorden(1:d,:); Vectorfitnessvecinos=zeros(1,d); Matriz_sol_inten_aux=zeros(d,Numparadas); Matriz_sol_inten_real_aux=zeros(d,Numparadas); for k=1:d 117 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado %intercambio de nodos tanto en los índices como en los nodonuevo=Sol_inten(Vecinos(matrizdistvecinalorden(k,1)));% Sol_inten_aux=Sol_inten; Sol_inten_aux(i)=nodonuevo; Sol_inten_aux(Vecinos(matrizdistvecinalorden(k,1)))=Sol_inten(i); Matriz_sol_inten_aux(k,:)=Sol_inten_aux; 2012 reales nodonuevoreal=Sol_inten_real(Vecinos(matrizdistvecinalorden(k,1))); Sol_inten_real_aux=Sol_inten_real; Sol_inten_real_aux(i)=nodonuevoreal; Sol_inten_real_aux(Vecinos(matrizdistvecinalorden(k,1)))=Sol_inten_real(i); Matriz_sol_inten_real_aux(k,:)=Sol_inten_real_aux; %Sol_inten_aux y Sol_inten_real_aux ya tienen los nodos intercambiados % hacerle el ftnesspeq o el fitness normal depende del número de numiter fallotiemponeg=0; if numiter<num_iter_cambio % siempre se ejecutará el programa fitness, el fitnesspeq es otro más simple que al final se ha decidido que no se ejecute nunca [RutaMejoraux,r,valorfitness,MatriztiemposrutaEntrada,MatriztiemposrutaSalida]=fitnesspeq(Sol_inten_real_aux,Numpara das,TiempoVC,TiempoVA,IndicesparadasZR,Longitudrutasres,Longitudrutas,Indicesparadas,Sol_inten_aux,Costevehiculo,Tie mpoentregamax,Findia); else [RutaMejoraux,r,valorfitness,MatriztiemposrutaEntrada,MatriztiemposrutaSalida]=fitness(Sol_inten_real_aux,Numparadas ,TiempoVC,TiempoVA,IndicesparadasZR,LongitudDentro,Longitudrutasres,Longitudrutas,Indicesparadas,Sol_inten_aux,Coste vehiculo,Tiempoentregamax,Findia); end Vectorfitnessvecinos(k)=valorfitness; end 118 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 [minfit1,lugar1]=min(Vectorfitnessvecinos); % ESTRATEGIA DE INSERCIÓN DE VECINOS q=length(Vecinos); distvecinalinser=zeros(1,(2*q)); [m,n]=find(RutaMejor==Sol_inten(i)); if i==1 for k=1:q if Sol_inten(i+1)~=Vecinos(k) distvecinalinser((2*k)1)=Longitudrutas(Numparadas+1,Vecinos(k))+Longitudrutas(Vecinos(k),(i))+Longitudrutas(i,(i+1)); %vector de distancias desde el (i-1) a vecinos. distvecinalinser(2*k)=Longitudrutas(Numparadas+1,i)+Longitudrutas(i,Vecinos(k))+Longitudrutas(Vecinos(k),(i+1)); else distvecinalinser((2*k)-1)=20000000000000; distvecinalinser(2*k)=2000000000000000; end end else if i==Numparadas for k=1:q if Sol_inten(i-1)~=Vecinos(k) distvecinalinser((2*k)-1)=Longitudrutas((i1),Vecinos(k))+Longitudrutas(Vecinos(k),(i))+Longitudrutas(i,(Numparadas+1)); distvecinalinser(2*k)=Longitudrutas((i1),i)+Longitudrutas(i,Vecinos(k))+Longitudrutas(Vecinos(k),(Numparadas+1)); %vector de distancias desde el (i-1) a vecinos. else distvecinalinser((2*k)-1)=20000000000000; 119 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 distvecinalinser(2*k)=2000000000000000; end end else for k=1:q if (Sol_inten(i-1)~=Vecinos(k))&&(Sol_inten(i+1)~=Vecinos(k)) distvecinalinser((2*k)-1)=Longitudrutas((i1),Vecinos(k))+Longitudrutas(Vecinos(k),(i))+Longitudrutas(i,(i+1)); distvecinalinser(k)=Longitudrutas((i1),i)+Longitudrutas(i,Vecinos(k))+Longitudrutas(Vecinos(k),(i+1)); %vector de distancias desde el (i-1) a vecinos. else distvecinalinser((2*k)-1)=20000000000000; distvecinalinser(2*k)=2000000000000000; end end end end %por si acaso el tamaño del vector de vecinos es menor que %el número de vecinos a los que les quiero hacer el fitness if q<=vecifitness d=q; else d=vecifitness; end matrizdistvecinalordeninser=zeros(d,3); k=1; t=1; while t<=d [valor,posicion]=min(distvecinalinser); %calculo el menor valor que queda en el vector distvecinal if rem(posicion,2)~=0 posicionlista=(posicion+1)/2; %porque no es lo mismo la posicion en el vector distvecinales que en el vector Vecinos, porque cada vecino hay 2 elementos en distvecinales else posicionlista=posicion/2; end 120 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 if (ListaTabu(Vecinos(posicionlista),Sol_inten(i))>0)||(ListaTabu(Sol_inten(i),Vecinos(posicionlista))>0)%pregunto si es tabú su intercambio if k==1 %CRITERIO DE ASPIRACION matrizdistvecinalordeninser(k,1)=posicionlista; matrizdistvecinalordeninser(k,2)=valor; if rem(posicion,2)~=0 matrizdistvecinalordeninser(k,3)=1; % el 1 simboliza que va antes del nodo "i", porque no es lo mismo la posición en el vector distvecinales que en el vector Vecinos, porque cada vecino hay 2 elementos en distvecinales else matrizdistvecinalordeninser(k,3)=2; % el 2 simboliza que va después del nodo "i" end distvecinalinser(posicion)=200000000000000; k=k+1; %indicador de rellenado de marizdistvecinalorden t=t+1; %indicador de recorrido del vector distvecinal end distvecinalinser(posicion)=20000000000000; t=t+1; % SI ES TABÚ, Y NO ES EL MÍNIMO, ENTONCES NOS LO SALTAMOS, % PONIENDO MUY ALTO SU VALOR EN EL VECTOR "distvecinal" else matrizdistvecinalordeninser(k,1)=posicionlista; matrizdistvecinalordeninser(k,2)=valor; if rem(posicion,2)~=0 matrizdistvecinalordeninser(k,3)=1; % el 1 simboliza que va antes del nodo "i", porque no es lo mismo la posición en el vector distvecinales que en el vector Vecinos, porque cada vecino hay 2 elementos en distvecinales else matrizdistvecinalordeninser(k,3)=2; % el 2 simboliza que va después del nodo "i" end distvecinalinser(posicion)=20000000000000; 121 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 k=k+1; t=t+1; end end d=k-1; %ahora "d" pasa a ser el número de filas de matrizdistvecinalorden matrizdistvecinalordeninser=matrizdistvecinalordeninser(1:d,:); Vectorfitnessvecinosinser=zeros(1,d); Matriz_sol_inten_aux_inser=zeros(d,Numparadas); Matriz_sol_inten_real_aux_inser=zeros(d,Numparadas); % Hago la inserción de nodos tanto en los índices como en los reales for k=1:d Sol_inten_aux_inser=Sol_inten; Sol_inten_real_aux_inser=Sol_inten_real; if matrizdistvecinalordeninser(k,3)==1 %lo meto antes del nodo i if i<Vecinos(matrizdistvecinalordeninser(k,1)) %modificación de índices coloqaux=Sol_inten(Vecinos(matrizdistvecinalordeninser(k,1))); for kr=(Vecinos(matrizdistvecinalordeninser(k,1))):-1:(i+1) Sol_inten_aux_inser(kr)=Sol_inten_aux_inser(kr-1); end Sol_inten_aux_inser(i)=coloqaux; Matriz_sol_inten_aux_inser(k,:)=Sol_inten_aux_inser; %modificación de nodos reales coloqaux=Sol_inten_real(Vecinos(matrizdistvecinalordeninser(k,1))); for kr=(Vecinos(matrizdistvecinalordeninser(k,1))):-1:(i+1) Sol_inten_real_aux_inser(kr)=Sol_inten_real_aux_inser(kr-1); end Sol_inten_real_aux_inser(i)=coloqaux; Matriz_sol_inten_real_aux_inser(k,:)=Sol_inten_real_aux_inser; 122 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 else %modificación de índices coloqaux=Sol_inten(Vecinos(matrizdistvecinalordeninser(k,1))); for kr=(Vecinos(matrizdistvecinalordeninser(k,1))):(i-2) Sol_inten_aux_inser(kr)=Sol_inten_aux_inser(kr+1); end Sol_inten_aux_inser(i-1)=coloqaux; Matriz_sol_inten_aux_inser(k,:)=Sol_inten_aux_inser; %modificación de nodos reales coloqaux=Sol_inten_real(Vecinos(matrizdistvecinalordeninser(k,1))); for kr=(Vecinos(matrizdistvecinalordeninser(k,1))):(i-2) Sol_inten_real_aux_inser(kr)=Sol_inten_real_aux_inser(kr+1); end Sol_inten_real_aux_inser(i-1)=coloqaux; Matriz_sol_inten_real_aux_inser(k,:)=Sol_inten_real_aux_inser; end else %lo meto después del nodo i if i<Vecinos(matrizdistvecinalordeninser(k,1)) %modificación de índices coloqaux=Sol_inten(Vecinos(matrizdistvecinalordeninser(k,1))); for kr=(Vecinos(matrizdistvecinalordeninser(k,1))):-1:(i+2) Sol_inten_aux_inser(kr)=Sol_inten_aux_inser(kr-1); end Sol_inten_aux_inser(i+1)=coloqaux; Matriz_sol_inten_aux_inser(k,:)=Sol_inten_aux_inser; %modificación de nodos reales coloqaux=Sol_inten_real(Vecinos(matrizdistvecinalordeninser(k,1))); for kr=(Vecinos(matrizdistvecinalordeninser(k,1))):-1:(i+2) Sol_inten_real_aux_inser(kr)=Sol_inten_real_aux_inser(kr-1); 123 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 end Sol_inten_real_aux_inser(i+1)=coloqaux; Matriz_sol_inten_real_aux_inser(k,:)=Sol_inten_real_aux_inser; else %modificación de índices coloqaux=Sol_inten(Vecinos(matrizdistvecinalordeninser(k,1))); for kr=(Vecinos(matrizdistvecinalordeninser(k,1))):(i-1) Sol_inten_aux_inser(kr)=Sol_inten_aux_inser(kr+1); end Sol_inten_aux_inser(i)=coloqaux; Matriz_sol_inten_aux_inser(k,:)=Sol_inten_aux_inser; %modificación de nodos reales coloqaux=Sol_inten_real(Vecinos(matrizdistvecinalordeninser(k,1))); for kr=(Vecinos(matrizdistvecinalordeninser(k,1))):(i-1) Sol_inten_real_aux_inser(kr)=Sol_inten_real_aux_inser(kr+1); end Sol_inten_real_aux_inser(i)=coloqaux; Matriz_sol_inten_real_aux_inser(k,:)=Sol_inten_real_aux_inser; end end %Sol_inten_aux_inser y Sol_inten_real_aux_inser ya tienen los nodos intercambiados % hacerle el ftnesspeq o el fitness normal depende del número de numiter fallotiemponeg=0; if numiter<num_iter_cambio % siempre se ejecutará el programa fitness, el fitnesspeq es otro más simple que al final he decidido que no se ejecute nunca 124 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 [RutaMejoraux,r,valorfitness,MatriztiemposrutaEntrada,MatriztiemposrutaSalida]=fitnesspeq(Sol_inten_real_aux_inser,N umparadas,TiempoVC,TiempoVA,IndicesparadasZR,Longitudrutasres,Longitudrutas,Indicesparadas,Sol_inten_aux_inser,Coste vehiculo,Tiempoentregamax,Findia); else [RutaMejoraux,r,valorfitness,MatriztiemposrutaEntrada,MatriztiemposrutaSalida]=fitness(Sol_inten_real_aux_inser,Nump aradas,TiempoVC,TiempoVA,IndicesparadasZR,LongitudDentro,Longitudrutasres,Longitudrutas,Indicesparadas,Sol_inten_aux _inser,Costevehiculo,Tiempoentregamax,Findia); end Vectorfitnessvecinosinser(k)=valorfitness; end [minfit2,lugar2]=min(Vectorfitnessvecinosinser); % COMPARACIÓN DE LOS RESULTADOS OBTENIDOS DE LAS DOS ESTRATEGIAS [m,n]=size(RutaMejor); if RutaMejor(m,1)>minfit1 if minfit2>minfit1 num_intercabios=num_intercambios+1; %intercambio definitivo de nodos tanto en los indices como en los nodonuevo=Sol_inten(Vecinos(matrizdistvecinalorden(lugar1,1)));% Sol_inten(Vecinos(matrizdistvecinalorden(lugar1,1)))=Sol_inten(i); Sol_inten(i)=nodonuevo; reales nodonuevoreal=Sol_inten_real(Vecinos(matrizdistvecinalorden(lugar1,1))); Sol_inten_real(Vecinos(matrizdistvecinalorden(lugar1,1)))=Sol_inten_real(i); Sol_inten_real(i)=nodonuevoreal; 125 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 ListaTabu(Sol_inten(Vecinos(matrizdistvecinalorden(lugar1,1))),Sol_inten(i))=Numerotabu+1; ListaTabuContador(Sol_inten(Vecinos(matrizdistvecinalorden(lugar1,1))),Sol_inten(i))=ListaTabuContador(Sol_inten(Vec inos(matrizdistvecinalorden(lugar1,1))),Sol_inten(i))+1; else num_inserciones=num_inserciones+1; Sol_inten=Matriz_sol_inten_aux_inser(lugar2,:); Sol_inten_real=Matriz_sol_inten_real_aux_inser(lugar2,:); ListaTabu(Sol_inten(Vecinos(matrizdistvecinalordeninser(lugar2,1))),Sol_inten(i))=Numerotabu+1; ListaTabuContador(Sol_inten(Vecinos(matrizdistvecinalordeninser(lugar2,1))),Sol_inten(i))=ListaTabuContador(Sol_inte n(Vecinos(matrizdistvecinalordeninser(lugar2,1))),Sol_inten(i))+1; end end %si no se hace ningún intercambio, se actualiza también la lista tabú %al final pero no se agrega nada a la lista tabú como en 4 %líneas más arriba % Cálculo de tiempos, rutamejor... fallotiemponeg=0; if numiter<num_iter_cambio % siempre se ejecutará el programa fitness, el fitnesspeq es otro más simple que al final he decidido que no se ejecute nunca [RutaMejor,r,valorfitness,MatriztiemposrutaEntrada,MatriztiemposrutaSalida]=fitnesspeq(Sol_inten_real,Numparadas,Tie mpoVC,TiempoVA,IndicesparadasZR,Longitudrutasres,Longitudrutas,Indicesparadas,Sol_inten,Costevehiculo,Tiempoentregam ax,Findia); else [RutaMejor,r,valorfitness,MatriztiemposrutaEntrada,MatriztiemposrutaSalida]=fitness(Sol_inten_real,Numparadas,Tiempo VC,TiempoVA,IndicesparadasZR,LongitudDentro,Longitudrutasres,Longitudrutas,Indicesparadas,Sol_inten,Costevehiculo,Ti empoentregamax,Findia); 126 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 end end %FINAL DEL RECORRIDO POR TODO EL VECTOR SOLUCIÓN, ES EL END DEL FOR RECORRE EL VECTOR SOLUCIÓN if valorfitnessinicial==valorfitness iguales=1; end iter_de_inten=iter_de_inten+1; Vectorsolucionesintensificacion(iter)=valorfitness; iter=iter+1; end % FINAL DEL WHILE DE INTENSIFICACIÓN iguales=0; iter_de_inten=0; valorfitnessintensificacion=valorfitness; Matrizsolucionesintensificacion=[Matrizsolucionesintensificacion;Vectorsolucionesintensificacion]; Vectorsolucionesfinales=[Vectorsolucionesfinales;valorfitnessintensificacion]; [m,n]=size(RutaMejor); valorneg=0; %para no tener en cuenta posibles valores erroneos de matriztiempostrutaentrada. for k=1:(m-1) if MatriztiemposrutaEntrada(k,1)<Longitudrutas((Numparadas+1),RutaMejor(k,1)) valorneg=1; end end if ((((valorfitness<valorfitnessmejor)&&(n<=nej)))&& (valorneg==0)) sumarle un camión valorfitnessmejor=valorfitness; Mejor_Solucion=RutaMejor; %si es mejor el fitness pero no a costa de 127 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Mejor_Solucion_tiemposrutaEntrada=MatriztiemposrutaEntrada; Mejor_Solucion_tiemposrutaSalida=MatriztiemposrutaSalida; [mej,nej]=size(Mejor_Solucion); end % Actualización lista tabú for k=1:(Numparadas+1) for kp=1:(Numparadas+1) if ListaTabu(k,kp)>0 ListaTabu(k,kp)=ListaTabu(k,kp)-1; end end end 128 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 11.2.2. Bloque Pre-Diversificación. Es un bloque intermedio entre los dos más importantes donde el vector solución no sufre modificaciones, sino que se crea una matriz de trozos (cadenas de un mínimo 3 nodos) de soluciones anteriores que se consideran “élites”, a las cuales se las ha denominado “Cadenas élite”. A continuación se muestra el código: Matrizultimassoluciones=[Matrizultimassoluciones;Sol_inten]; %se agrega la última solución de la inten Matrizultimassoluciones=Matrizultimassoluciones(2:(numelite+1),:); %se elimina la más antigua if numiter>numelite Matrizcadenaselites=[0 0 0]; for k=1:(Numparadas-2) %voy comprobando de uno en uno cadena de 3 elementos hasta el final por=0; por1=1; cadenaaux=[Sol_inten(k) Sol_inten(k+1) Sol_inten(k+2)]; while por==0 por3=find(Matrizultimassoluciones(por1,:)==Sol_inten(k)); if por3<(Numparadas-1)%para asegurarnos que no esta al final del vector soluciona cadenaaux2=[Matrizultimassoluciones(por1,por3),Matrizultimassoluciones(por1,por3+1),Matrizultimassoluciones(por1,por 3+2)]; if cadenaaux(1)==cadenaaux2(1) if cadenaaux(2)==cadenaaux2(2) if cadenaaux(3)==cadenaaux2(3) por1=por1+1; %aqui se avanza en una fila de la matrizultimassoluciones else por=1; end else por=1; end else 129 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 por=1; end else por=1; end if por1==numelite Matrizcadenaselites=[Matrizcadenaselites;cadenaaux]; por=1; end end end [por4,por5]=size(Matrizcadenaselites); Matrizcadenaselites=Matrizcadenaselites(2:por4,:); else Matrizcadenaselites=[0 0 0;0 0 0;0 0 0]; por4=4; end 130 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 11.2.3. Bloque Diversificación En este último bloque del algoritmo se desarrolla la diversificación en la búsqueda de soluciones del problema. Se hace teniendo en cuenta a las cadenas elites creadas en el bloque anterior del modo que se explica en capítulos anteriores. % SELECIÓN Y COLOCACION DE ELEMENTOS diver=0; ListaTabu2=zeros(1,Numparadas); mov=0; %ME CUENTA EL NÚMERO DE MOVIMIENTOS QUE HAGO EN LA DIVERSIFICACIÓN conta=0; while diver==0; Sol_inten_aux=Sol_inten; Sol_inten_real_aux=Sol_inten_real; diver1=0; diver2=0; ty=0; while ty==0 ele=round(Numparadas*rand);%selecciono aleatoriamente un elemento del vector Sol_inten if ele<1 ele=1; end if ListaTabu2(Sol_inten(ele))==0 ty=1; end end if numiter>numelite % pregunto si pertenece a alguna cadena élite. for n=1:(por4-1) for m=1:3 131 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 if Matrizcadenaselites(n,m)==Sol_inten(ele) diver1=1; end end end end % lo inserto entre dos nodos if diver1==0 while diver2==0 Sol_inten_aux=Sol_inten; Sol_inten_real_aux=Sol_inten_real; diver3=0; diver4=0; diver5=0; aleat=rand; coloq=round(Numparadas*aleat); %elijo una posición aleatoria if coloq<1 coloq=1; end if coloq~=ele if coloq==1 %le pregunto si es el primer nodo if numiter>numelite for n=1:(por4-1) %si es el primero, compruebo si pertenece a una cadena if Matrizcadenaselites(n,1)==Sol_inten(coloq) diver3=1; end end end if diver3==0 %modificación de índices coloqaux=Sol_inten(ele); for k=ele:-1:coloq+2 Sol_inten_aux(k)=Sol_inten_aux(k-1); end Sol_inten_aux(coloq+1)=coloqaux; 132 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 %modificación de nodos reales coloqaux=Sol_inten_real(ele); for k=ele:-1:coloq+2 Sol_inten_real_aux(k)=Sol_inten_real_aux(k-1); end Sol_inten_real_aux(coloq+1)=coloqaux; end else if coloq==Numparadas %le pregunto si es la ultima if numiter>numelite for n=1:(por4-1) %si es la última, compruebo si pertenece a una cadena if Matrizcadenaselites(n,3)==Sol_inten(coloq) diver3=1; end end end if diver3==0 %modificación de índices coloqaux=Sol_inten(ele); for k=ele:Numparadas-2 Sol_inten_aux(k)=Sol_inten_aux(k+1); end Sol_inten_aux(coloq-1)=coloqaux; %modificación de nodos reales coloqaux=Sol_inten_real(ele); for k=ele:Numparadas-2 Sol_inten_real_aux(k)=Sol_inten_real_aux(k+1); end Sol_inten_real_aux(coloq-1)=coloqaux; end else % entonces es entre dos nodos intermedios donde lo voy a insertar if numiter>numelite for n=1:(por4-1) 133 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 for m=1:3 if Matrizcadenaselites(n,m)==Sol_inten(coloq) diver3=1; end end end end if diver3==1 for n=1:(por4-1) for m=1:3 if Matrizcadenaselites(n,m)==Sol_inten(coloq+1) diver4=1; end end end if diver4==0 if ele<coloq %modificación de índices coloqaux=Sol_inten(ele); for k=ele:(coloq-1) Sol_inten_aux(k)=Sol_inten_aux(k+1); end Sol_inten_aux(coloq)=coloqaux; %modificación de nodos reales coloqaux=Sol_inten_real(ele); for k=ele:(coloq-1) Sol_inten_real_aux(k)=Sol_inten_real_aux(k+1); end Sol_inten_real_aux(coloq)=coloqaux; else %modificación de índices coloqaux=Sol_inten(ele); for k=ele:-1:(coloq+2) 134 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 Sol_inten_aux(k)=Sol_inten_aux(k-1); end Sol_inten_aux(coloq+1)=coloqaux; %modificación de nodos reales coloqaux=Sol_inten_real(ele); for k=ele:-1:(coloq+2) Sol_inten_real_aux(k)=Sol_inten_real_aux(k-1); end Sol_inten_real_aux(coloq+1)=coloqaux; end else for n=1:(por4-1) for m=1:3 if Matrizcadenaselites(n,m)==Sol_inten(coloq-1) diver5=1; end end end if diver5==0 if ele<coloq %modificación de índices coloqaux=Sol_inten(ele); for k=ele:(coloq-2) Sol_inten_aux(k)=Sol_inten_aux(k+1); end Sol_inten_aux(coloq-1)=coloqaux; %modificación de nodos reales coloqaux=Sol_inten_real(ele); for k=ele:(coloq-2) Sol_inten_real_aux(k)=Sol_inten_real_aux(k+1); end Sol_inten_real_aux(coloq-1)=coloqaux; 135 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 else %modificación de índices coloqaux=Sol_inten(ele); for k=ele:-1:(coloq+1) Sol_inten_aux(k)=Sol_inten_aux(k-1); end Sol_inten_aux(coloq)=coloqaux; %modificación de nodos reales coloqaux=Sol_inten_real(ele); for k=ele:-1:(coloq+1) Sol_inten_real_aux(k)=Sol_inten_real_aux(k-1); end Sol_inten_real_aux(coloq)=coloqaux; end end end else if ele<coloq %modificación de índices coloqaux=Sol_inten(ele); for k=ele:(coloq-1) Sol_inten_aux(k)=Sol_inten_aux(k+1); end Sol_inten_aux(coloq)=coloqaux; %modificación de nodos reales coloqaux=Sol_inten_real(ele); for k=ele:(coloq-1) Sol_inten_real_aux(k)=Sol_inten_real_aux(k+1); end Sol_inten_real_aux(coloq)=coloqaux; else %modificación de índices 136 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 coloqaux=Sol_inten(ele); for k=ele:-1:(coloq+2) Sol_inten_aux(k)=Sol_inten_aux(k-1); end Sol_inten_aux(coloq+1)=coloqaux; %modificación de nodos reales coloqaux=Sol_inten_real(ele); for k=ele:-1:(coloq+2) Sol_inten_real_aux(k)=Sol_inten_real_aux(k-1); end Sol_inten_real_aux(coloq+1)=coloqaux; end end end end end fallotiemponeg=0; if numiter<num_iter_cambio % siempre se ejecutará el programa fitness, el fitnesspeq es otro más simple que al final he decidido que no se ejecute nunca [RutaMejor,r,valorfitness,MatriztiemposrutaEntrada,MatriztiemposrutaSalida]=fitnesspeq(Sol_inten_real_aux,Numparadas ,TiempoVC,TiempoVA,IndicesparadasZR,Longitudrutasres,Longitudrutas,Indicesparadas,Sol_inten_aux,Costevehiculo,Tiempo entregamax,Findia); else [RutaMejor,r,valorfitness,MatriztiemposrutaEntrada,MatriztiemposrutaSalida]=fitness(Sol_inten_real_aux,Numparadas,Ti empoVC,TiempoVA,IndicesparadasZR,LongitudDentro,Longitudrutasres,Longitudrutas,Indicesparadas,Sol_inten_aux,Costeveh iculo,Tiempoentregamax,Findia); end porcen=1-(valorfitnessintensificacion/valorfitness); %para la condición de perdida de fitness 137 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado 2012 if porcen<0.2 ListaTabu2(Sol_inten(ele))=1; Sol_inten=Sol_inten_aux; Sol_inten_real=Sol_inten_real_aux; mov=mov+1; diver2=1; end end end conta=conta+1; %contador de que no puede ni siquiera diversificar manteniendo las reglas de las cadenas elites. fallotiemponeg=0; if numiter<num_iter_cambio % siempre se ejecutará el programa fitness, el fitnesspeq es otro más simple que al final he decidido que no se ejecute nunca [RutaMejor,r,valorfitness,MatriztiemposrutaEntrada,MatriztiemposrutaSalida]=fitnesspeq(Sol_inten_real,Numparadas,Tie mpoVC,TiempoVA,IndicesparadasZR,Longitudrutasres,Longitudrutas,Indicesparadas,Sol_inten,Costevehiculo,Tiempoentregam ax,Findia); else [RutaMejor,r,valorfitness,MatriztiemposrutaEntrada,MatriztiemposrutaSalida]=fitness(Sol_inten_real,Numparadas,Tiempo VC,TiempoVA,IndicesparadasZR,LongitudDentro,Longitudrutasres,Longitudrutas,Indicesparadas,Sol_inten,Costevehiculo,Ti empoentregamax,Findia); end %CONDICIONES DE LA DIVERSIFICACION porcen=1-(valorfitnessintensificacion/valorfitness); %para la condición de perdida de fitness porcen2=mov/Numparadas; 138 Escuela Técnica Superior de Ingenieros Universidad de Sevilla Proyecto Final de Carrera - Francisco Vázquez Delgado if ((porcen2>0.1)||(porcen<0))||((porcen>porcenmax)||(conta==50)) que las últimas soluciones finales no varían. diver=1; end end numiter=numiter+1 2012 %dándole un valor a “conta” alto me dice % CONDICIONES FINALES. sol_totales=length(Vectorsolucionesfinales); porcen3=Vectorsolucionesfinales(sol_totales)/Vectorsolucionesfinales(sol_totales-1); if (numiter>numeroiteracionesmax)||(conta==50) problemafinal=1; end end tiempo_tabu=toc; Fin del algoritmo Búsqueda Tabú Complejo. 139 Escuela Técnica Superior de Ingenieros Universidad de Sevilla