O problema do caixeiro viajante com passageiros
Texto
(2) Zailton Sachas Amorim Calheiros. O Problema do Caixeiro Viajante com Passageiros. Dissertação de Mestrado apresentada ao Programa de Pós-Graduação em Sistemas e Computação da Universidade Federal do Rio Grande do Norte como requisito parcial para a obtenção do grau de mestre em Sistemas e Computação.. Orientador Prof. Dr. Marco César Goldbarg. Universidade Federal do Rio Grande do Norte – UFRN Departamento de Informática e Matemática Aplicada – DIMAp. Natal-RN Julho de 2017.
(3) Catalogação da Publicação na Fonte. UFRN / SISBI / Biblioteca Setorial Especializada do Centro de Ciências Exatas e da Terra – CCET. Calheiros, Zailton Sachas Amorim. O problema do caixeiro viajante com passageiros / Zailton Sachas Amorim Calheiros. – Natal, RN, 2017. 90f. : il. Orientador: Marco César Goldbarg. Dissertação (mestrado) – Universidade Federal do Rio Grande do Norte. Centro de Ciências Exatas e da Terra. Departamento de Informática e Matemática Aplicada. Programa de Pós-Graduação em Sistemas e Computação. 1. Algoritmos – Dissertação. 2. Caixeiro viajante – Dissertação. 3. Passageiros – Dissertação. 4. Algoritmos evolucionários – Dissertação. 5. Genético – Dissertação. 6. Memético – Dissertação. I. Goldbarg, Marco César. II. Título. RN/UF/BSE-CCET. CDU 004.021(043.3).
(4)
(5) Agradecimentos Agradeço à deus pelo dom da vida. Agradeço especialmente ao meu orientador professor Dr. Marco César Goldbarg por ter depositado confiança e esforços em meu trabalho, agradeço também pela contribuição obtida da professora Dra Sílvia Maria Diniz Monteiro Maia e pela professora Dra Elizabeth Ferreira Gouvêa Goldbarg durante minha trajetória em meu mestrado. Agradeço ao professor Dr. Matheus da Silva Menezes pela participação na banca e por suas contribuições em minha dissertação. Agradeço à minha namorada Paloma Vinaches Melguizo e aos meus pais por todo o apoio recebido. Dos meus amigos, eu agradeço, em especial, a Jean Silva e aos amigos José Filho, Ronildo Moura, Emerson Carvalho, Lucas Daniel, Juliano Cardoso, Augusto Lustosa, Romerito Campos e Argus da Rocha..
(6) Programação Dinâmica - “Aqueles que não podem lembrar o passado, estão condenados a repeti-lo.” George Santayana.
(7) O Problema do Caixeiro Viajante com Passageiros. Autor: Zailton Sachas Amorim Calheiros Orientador: Prof. Dr. Marco César Goldbarg. RESUMO Este trabalho apresenta um modelo de compartilhamento de assentos veicular de modo a reduzir os custos de viagem de motoristas e passageiros, contribuindo de maneira significativa ao meio ambiente e à sociedade. O problema também é descrito através de um modelo de programação linear e são discutidas algumas variantes de um subproblema importante para resolução do modelo proposto. Além disso, algumas abordagens computacionais são implementadas, compostas de algoritmos evolucionários (genético e memético) e construtivos (formigas e GRASP). Além da adaptação de algoritmos já existes para o problema do caixeiro viajante tradicional como o algoritmo de Lin-Kernighan. Após a realização de experimentos, o algoritmo baseado em formiga revela-se promissor para instâncias assimétricas enquanto que o algoritmo de Lin-Kernighan leva vantagem pela sua robustez através da implementação de Helsgaun que desempenha bons resultados para instâncias simétricas. Palavras-chave: Caixeiro Viajante. Passageiros. Algoritmos Evolucionários. Genético. Memético..
(8) Traveling Salesman with Passengers Problem. Author: Zailton Sachas Amorim Calheiros Advisor: Prof. Dr. Marco César Goldbarg. ABSTRACT This thesis presents a vehicle seat sharing model in order to reduce travel costs for drivers and passengers, contributing significantly to the environment and society. The problem is also described by a linear programming model and it is discussed in some variants of an important subproblem for solving the main problem. Besides, some computational approaches are implemented, composed by evolutionary (genetic and memetic) e constructive (ant optimization) algorithms. In addition to the adaptation of already existing algorithms for the travaling salesman problem as the Lin-Kernighan algorithm. After performing experiments, ant-based algorithms prove itself promising for asymmetric instances while the Lin-Kernighan algorithm takes advantage of its robustness through the implementation of Helsgaun and has a good performance for symmetric instances. Keywords: Travelling Salesman. Ridesharing. Evolutionary Algorithms. Genetic. Memetic..
(9) Lista de ilustrações Figura Figura Figura Figura Figura Figura Figura. 1 2 3 4 5 6 7. – – – – – – –. Exemplo de grafo original . . . . . . . . . . . . . . . . . . . . . . . Ilustração do grafo transformado . . . . . . . . . . . . . . . . . . . Exemplo de grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ilustração da redução do problema . . . . . . . . . . . . . . . . . . Representação do cromossomo para 9 vértices . . . . . . . . . . . . Boxplot das médias dos algoritmos para cada instância assimétrica Boxplot das médias dos algoritmos para cada instância simétrica . .. . . . . . . .. . . . . . . .. 21 21 31 32 40 63 64.
(10) Lista de tabelas Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela. 1 – 2 – 3 – 4 – 5 – 6 – 7 – 8 – 9 – 10 – 11 – 12 – 13 14 15 16. – – – –. Tabela 17 – Tabela 18 – Tabela 19 – Tabela 20 – Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela. 21 22 23 24 25 26 27 28 29 30. – – – – – – – – – –. Descrição das instâncias assimétricas . . . . . . . . . . . . . . . . . . . Descrição das instâncias simétricas . . . . . . . . . . . . . . . . . . . . Instâncias de treinamento assimétricas . . . . . . . . . . . . . . . . . . Instâncias de treinamento simétricas . . . . . . . . . . . . . . . . . . . Parâmetros dos algoritmos assimétricos . . . . . . . . . . . . . . . . . . Parâmetros dos algoritmos assimétricos . . . . . . . . . . . . . . . . . . Parâmetros dos algoritmos simétricos . . . . . . . . . . . . . . . . . . . Parâmetros dos algoritmos simétricos . . . . . . . . . . . . . . . . . . . Comparação entre médias (vitórias entre linha x coluna) . . . . . . . . Resultados do Conover . . . . . . . . . . . . . . . . . . . . . . . . . . . Resultados do Nemenyi . . . . . . . . . . . . . . . . . . . . . . . . . . Comparação das médias (vitórias entre linha x coluna) caso haja diferença no teste U . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Resultados do Conover . . . . . . . . . . . . . . . . . . . . . . . . . . . Resultados do Nemenyi . . . . . . . . . . . . . . . . . . . . . . . . . . Comparação entre médias (vitórias entre linha x coluna) . . . . . . . . Comparação das médias (vitórias entre linha x coluna) caso haja diferença no teste U . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Resultados do algoritmo genético para instâncias assimétricas . . . . . Resultados do algoritmo genético com carregamento exato para instâncias assimétricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Resultados do algoritmo memético para instâncias assimétricas . . . . Resultados do algoritmo memético com carregamento exato para instâncias assimétricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . Resultados do algoritmo GRASP para instâncias assimétricas . . . . . Resultados do algoritmo de Formigas para instâncias assimétricas . . . Resultados do algoritmo Helsgaun para instâncias assimétricas . . . . . Resultados do solver Gurobi para instâncias assimétricas . . . . . . . . Resultados do algoritmo genético com carregamento ótimo para instâncias simétricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Resultados do algoritmo memético para instâncias simétricas . . . . . . Resultados do algoritmo genético para instâncias simétricas . . . . . . Resultados do algoritmo formigas para instâncias simétricas . . . . . . Resultados do algoritmo GRASP para instâncias simétricas . . . . . . Resultados do algoritmo memético com carregamento ótimo para instâncias simétricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 56 57 58 58 60 60 60 60 61 62 62 62 63 63 64 65 73 74 75 76 77 78 79 80 82 83 84 85 86 87.
(11) Tabela 31 – Resultados do algoritmo Helsgaun com carregamento ótimo para instâncias simétricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Tabela 32 – Resultados do solver Gurobi para instâncias simétricas . . . . . . . . . 89.
(12) Lista de abreviaturas e siglas PCV. Problema do Caixeiro Viajante. PCV-P. Problema do Caixeiro Viajante com Passageiros. AG. Algoritmo Genético. AM. Algorítmo Memético.
(13) Lista de Algoritmos 1 2 3 4 5. Programação Dinâmica da Variante I . . . . . . . . . Algoritmo Guloso da Variante II . . . . . . . . . . . . Transformação . . . . . . . . . . . . . . . . . . . . . . . . Empurrando fluxo a partir de uma alocação válida Criando uma alocação a partir de um fluxo . . . . .. 6 7 8. Busca Local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2-opt Adaptado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Lin-Khernighan Adaptado . . . . . . . . . . . . . . . . . . . . . . . . . 38. 9 10 11 12 13 14 15 16 17. Reparação . . . . . . . . . . . . . . . . . . . . . . . . Davis’ Modified Crossover Adaptado . . . . . . . Order Crossover Adaptado . . . . . . . . . . . . . Edge Recombination Crossover Adaptado . . . Sequential Constructive Crossover Adaptado Operador de swap adaptado . . . . . . . . . . . . . Operador de Inversão . . . . . . . . . . . . . . . . Algoritmo Genético . . . . . . . . . . . . . . . . . . Algoritmo Memético . . . . . . . . . . . . . . . . .. 18. GRASP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . .. . . . . . . . . .. . . . . .. . . . . . . . . .. . . . . .. . . . . . . . . .. . . . . .. . . . . . . . . .. . . . . .. . . . . . . . . .. . . . . .. . . . . . . . . .. . . . . .. . . . . . . . . .. . . . . .. . . . . . . . . .. 28 29 31 32 33. 41 42 42 43 44 45 45 46 47.
(14) Sumário 1 1.1 1.2. INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Organização do Trabalho . . . . . . . . . . . . . . . . . . . . . . . . 16. 2 2.1 2.2 2.2.1 2.2.2. REFERENCIAL TEÓRICO . . . . . . . . . . Problema do Caixeiro Viajante . . . . . . . . . Problemas de Roteamento e Scheduling . . . Pickup and Delivery . . . . . . . . . . . . . . . . . Dial-a-Ride . . . . . . . . . . . . . . . . . . . . . . .. 3. PROBLEMA DO CAIXEIRO VIAJANTE COM ROS . . . . . . . . . . . . . . . . . . . . . . . . . . . O caso geral . . . . . . . . . . . . . . . . . . . . . . . Convertendo o caso geral para o mais específico . . . . Formulação Matemática . . . . . . . . . . . . . . . . Linearizando o modelo . . . . . . . . . . . . . . . . . Eliminando a divisão de variáveis . . . . . . . . . . . . Linearizando a função-objetivo e a restrição de tarifas Modelo linearizado . . . . . . . . . . . . . . . . . . . .. 3.1 3.1.1 3.2 3.3 3.3.1 3.3.2 3.3.3 4 4.1 4.2 4.3 4.3.1 4.3.2. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . . . . . .. 17 17 18 19 19. PASSAGEI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 20 20 21 22 24 24 24 25. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . . . . . . . . . . .. 27 27 28 30 31 32. 4.4 4.4.1. PROBLEMA DE ATRIBUIÇÃO DE PASSAGEIROS . . Variante I: Relaxação da Tarifa . . . . . . . . . . . . . . . . Variante II: Sem Tarifas e Maior Número de Passageiros Variante III: Sem Tarifas e Função-Objetivo linear . . . . Transformação . . . . . . . . . . . . . . . . . . . . . . . . . . . . Demonstração . . . . . . . . . . . . . . . . . . . . . . . . . . . . Toda alocação de custo R gera um fluxo máximo de custo -R . . . . Todo fluxo máximo de custo -R gera uma alocação de custo R . . . . Modelo Exato para Alocação de Passageiros . . . . . . . . Modelo Linearizado . . . . . . . . . . . . . . . . . . . . . . . . .. 5 5.1 5.1.1 5.2. BUSCAS LOCAIS 2-opt adaptado . . As variações . . . . . Lin-Kernighan . . .. . . . .. . . . .. . . . . . . .. 36 36 37 37. 6. ALGORITMOS EVOLUCIONÁRIOS PARA O PCV-P . . . .. 4.3.2.1 4.3.2.2. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. 32 33. 34 34. 39.
(15) 6.1 6.1.1 6.1.2 6.1.3. Algoritmo Genético . . . . Representação do cromossomo Método de reparação . . . . . Operadores de cruzamento . . Davis’ Modified Crossover . . . Order Crossover . . . . . . . . Edge Recombination Crossover .. 6.1.5 6.2 6.2.1 6.3 7 7.1 7.1.1 7.2 7.2.1. ALGORITMO GRASP PARA O GRASP . . . . . . . . . . . . . . . . Grasp para o PCVP . . . . . . . . . Path Relinking . . . . . . . . . . . Path Relinking para o PCVP . . . .. 8 8.1 8.1.1. ALGORITMO DE COLÔNIA DE FORMIGAS PARA O PCV-P 52 Ant Colony Optimization . . . . . . . . . . . . . . . . . . . . . . . . 52 ACO para o PCVP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54. 9 9.1 9.2 9.2.1 9.3 9.3.1 9.3.2. EXPERIMENTOS COMPUTACIONAIS Descrição das Instâncias . . . . . . . . . . . Metodologia . . . . . . . . . . . . . . . . . . Parametrização dos algoritmos . . . . . . . . . Resultados . . . . . . . . . . . . . . . . . . . Assimétricos . . . . . . . . . . . . . . . . . . . Simétricos . . . . . . . . . . . . . . . . . . . .. 10 10.1. CONSIDERAÇÕES FINAIS . . . . . . . . . . . . . . . . . . . . 66 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66. 6.1.3.2 6.1.3.3 6.1.3.4. 6.1.4 6.1.4.1 6.1.4.2. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. PCV-P . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. 39 40 40 40. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sequential Cronstructive Crossover . . . . . . Operadores de mutação . . . . . . . . . . . Mutação por swap . . . . . . . . . . . . . . Operador de inversão . . . . . . . . . . . . . Descrição do Algoritmo . . . . . . . . . . . Algoritmo Memético . . . . . . . . . . . Descrição do Algoritmo . . . . . . . . . . . Modelo matemático para passageiros. 6.1.3.1. . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .. 46 46 47 48. . . . . . . . . . . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . . . . . .. 49 49 50 50 51. . . . . . . . . . . . . . . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . . . . . . . .. REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . .. 41 41 43 44. 44 45 45. 55 55 55 58 60 61 62. 67.
(16) APÊNDICES. 71. APÊNDICE A – TABELAS DE RESULTADOS EXPERIMENTAIS ASSIMÉTRICOS . . . . . . . . . . . . 72 APÊNDICE B – TABELAS DE RESULTADOS EXPERIMENTAIS SIMÉTRICOS . . . . . . . . . . . . . . 81.
(17) 16. 1 Introdução Na China, a emissão de poluentes de veículos automotivos contribuem com uma proporção significativa em cidades como Pequim, Cantão, Xangai e Tianjin, com taxas de 𝐶𝑂 e 𝑁 𝑂2 chegando à 80%, à exemplo de Pequim (FU et al., 2001). Um estudo realizado na cidade Jalgaon na Índia, entre 2003 e 2004, sobre os efeitos respiratórios da poluição veicular revelaram prejuízos respiratórios em fiscais de trânsito, devido à constante exposição aos poluentes dos automóveis (INGLE et al., 2005). Além de gerar sérios problemas ambientais e à saúde (PEREIRA; JÚNIOR; MORELLI, 2013), o excesso de veículos ocasiona transtornos em grandes cidades, incrementa os níveis de estresse de seus cidadãos e reduz a produtividade (BERTINI, 2006). Uma das estratégias afim de minimizar os danos ocasionados pela grande rotatividade de veículos é o compartilhamento de assentos nos meios de transporte. O compartilhamento de veículos também possui o potencial de aumentar a interação humana, que vem diminuindo de maneira significativa com o passar dos anos, devido ao crescimento dos adventos tecnológicos. Atualmente, sistemas computacionais têm sido disponibilizados para auxiliar a reunião de motoristas e passageiros de modo a aumentar a taxa de ocupação dos veículos. Tais sistemas de compartilhamento de assentos têm por objetivo reunir pessoas com itinerários e planejamento de tempo compatíveis. Dentre as categorias destes sistemas, existe o chamado ridesharing. De modo geral, ridesharing corresponde ao problema de reunir duas ou mais pessoas para partilhar uma viagem em um veículo sem levar em conta um acordo prévio ou histórico de cooperação (DAILEY; LOSEFF; MEYERS, 1999). O problema é tradicionalmente aplicado ao transporte privado. O compartilhamento de assentos em carros particulares tem potencial para impactar áreas como economia, meio ambiente e ciências sociais (KLEINER; NEBEL; ZIPARO, 2011). Os fundamentos do problema são a livre escolha do passageiro sobre a oferta de assentos em rotas previamente conhecidas. A importância do aspecto ocasional e oportunista da reunião de motoristas e passageiros é ressaltada em vários trabalhos da literatura. As versões “real-time” (GRUEBELE, 2008) ou “dinâmica” (DEAKIN; FRICK; SHIVELY, 2010) do Ridesharing ocupam grande atenção do esforço de pesquisa atual.. 1.1. Objetivos. O principal objetivo do trabalho é formular e apresentar algoritmos de solução para as questões relacionadas ao compartilhamento de veículos além de valida-los através de experimentos computacionais. Tal estudo também explora diversos tipos de rateamento entre motoristas e passageiros afim de encontrar relações equilibradas entre esses agentes e.
(18) Capítulo 1. Introdução. 17. ao mesmo tempo permita a proposta de soluções computacionalmente eficientes. Com este intuito, tem-se formulado um problema que relaciona em um único objetivo os interesses de passageiros e motoristas afim de criar um sistema equilibrado para que possa alcançar a maior quantidade de pessoas e ocasione benefícios à toda comunidade. O segundo aspecto é administrar soluções computacionais eficientes para lidar com estes problemas. Assim, é retratado o problema do Caixeiro Viajante com Passageiros (PCV-P) e soluções baseadas em computação evolucionária com interesse de assegurar bons resultados.. 1.2. Organização do Trabalho. A seção 2 discute sobre o estado da arte e relaciona alguns problemas com características similares ao problema proposto. Na seção 3, é apresentado o problema e formulado matematicamente. A seção 4 explora de forma extensiva o problema da seleção ótima de passageiros em um tour. Já na seções 6, 7 e 8 são descritas algumas técnicas de resolução para o PCV-P e a seção 9 apresenta os experimentos comparando estas abordagens. Por fim, na seção 10, é finalizado o trabalho com discussões finais e propostas para futuros trabalhos..
(19) 18. 2 Referencial teórico O PCV-P busca uma rota e um conjunto de embarques de passageiros que minimizem as despesas do caixeiro. O PCV-P compartilha elementos com o Traveling Salesman With Pickup and Delivery (PARRAGH; DOERNER; HARTL, 2006) por realizar embarques e desembarques. Contudo, distingue-se tanto pela função objetivo quanto em virtude de decisões a serem tomadas, não levando somente consideração o ponto de vista do caixeiro. No PCV-P, o atendimento da demanda é uma opção. Tão pouco o PCV-P pode ser reduzido a uma variante dos problemas de roteamento com coleta como Traveling Salesman with profits (FEILLET; DEJAX; GENDREAU, 2005), Prize Collecting Traveling Salesman (BALAS, 2007), Attractive Traveling Salesman (ERDOĞAN; CORDEAU; LAPORTE, 2010), Selective Travelling Salesman (GENDREAU; LAPORTE; SEMET, 1998), Orienteering Problems (VANSTEENWEGEN; SOUFFRIAU; OUDHEUSDEN, 2011) uma vez que o ganho associado ao embarque do passageiro é variável em função da rota adotada. O problema busca uma solução que divide o seu compromisso entre lotar o carro e trafegar por arestas de baixo custo.. 2.1. Problema do Caixeiro Viajante. O problema do caixeiro viajante é um dos problemas mais estudados na otimização combinatória e matemática computacional. Dentre alguns fatores que podem justificar tal notoriedade, destaca-se o fato de ser um problema com importantes propriedades para a teoria de complexidade computacional por ser um problema NP-Difícil, implicação direta da NP-Completude do problema do ciclo Hamiltoniano (KARP, 1972). Outro fator importante é o extenso número de aplicações, à exemplo da perfuração de placas de circuito impresso, revisão de motores de turbina à gás, cristalografia de raio-X, fiação de computadores, problema da ordem de coleta em armazéns, roteamento de veículos, dentre outros (MATAI; SINGH; MITTAL, 2010). Um ciclo Hamiltoniano é um circuito num grafo G = (V, E) que visita todos os vértices de V exatamente uma vez. Dito isso, o problema do Caixeiro Viajante se resume em encontrar um ciclo Hamiltoniano de custo mínimo, ou seja, um ciclo que atravesse cada vértice uma única vez e possua o somatório mínimo dos custos das arestas. Dantzig, Fulkerson e Johnson (1954) descrevem a seguinte formulação linear inteira para o PCV. Minimizar: ∑︁ 𝑖̸=𝑗. 𝑐𝑖𝑗 𝑥𝑖𝑗. (2.1).
(20) Capítulo 2. Referencial teórico. 19. Sujeito à: 𝑛 ∑︁. 𝑥𝑖𝑗 = 1. (1 ≤ 𝑖 ≤ 𝑛). (2.2). 𝑥𝑗𝑖 = 1. (1 ≤ 𝑖 ≤ 𝑛). (2.3). (𝑆 ⊂ 𝑉 | 2 ≤ |𝑆| ≤ 𝑛 − 2). (2.4). (1 ≤ 𝑖, 𝑗 ≤ 𝑛). (2.5). 𝑗=1 𝑛 ∑︁ 𝑗=1. ∑︁. 𝑥𝑖𝑗 ≤ |𝑆| − 1. 1≤𝑖,𝑗≤𝑛. 𝑥𝑖𝑗 ∈ {0, 1}. Onde 𝑥𝑖𝑗 é uma variável binária que associa a pertinência do arco (i, j) no circuito ótimo. Dentre as diversas soluções exatas para o problema, destacam-se aquelas baseadas na relaxação de restrições de eliminação de sub-tours, produzindo um problema linear inteiro relaxado ou reduzindo-o a outros problemas como o do Problema da Atribuição Modificada, e posteriormente, restaurando-se a sua integralidade com técnicas como a de Branch-and-Bound. Matai, Singh e Mittal (2010) realizam uma revisão interessante sobre o problema do caixeiro viajante, explicitando diversas aplicações para os principais modos do problema: simétrico, assimétrico e multi caixeiros. Descrevem formulações lineares para o problema e estudam técnicas exatas baseadas em programação linear, como citado acima, e métodos aproximativos e heurísticos, à exemplo do algoritmo aproximativo para o PCV Euclidiano disponibilizado por Arora (1998), da heurística de Christofides (1976), 2-opt, k-opt, Lin-Kernighan, Busca Tabu, Algoritmos Genéticos, Otimização por formigas, dentre outras técnicas. Applegate et al. (2011) realiza um extenso estudo sobre o problema, onde apresenta a história do problema, aplicações e diversos tipos de soluções.. 2.2. Problemas de Roteamento e Scheduling. Dentre os problemas de roteamento, como o Pickup and Delivery, existem classificações que dependem da forma em que os veículos interagem com as suas cargas. Alguns problemas podem ser considerados como “one-to-many” quando existe somente uma origem (depósito) e vários destinos, por outro lado, outros problemas são classificados como “many-to-one” quando o destino é único mas existem múltiplas origens, à exemplo do caso em que múltiplas demandas devem ser entregues em um único depósito. Da mesma maneira, os problemas também podem ser classificados em “many-to-many”, onde há várias origens e destinos que é o caso do Pickup and Delivery tradicional. Existem também outras denominações caso haja mais de um depósito de origem (“few-to-many”) ou mais de um depósito de destino (“many-to-few”)..
(21) Capítulo 2. Referencial teórico. 2.2.1. 20. Pickup and Delivery. No problema do Pickup and Delivery, um conjunto de rotas que serão associadas a um conjunto de veículos tem que ser construído, onde cada um destes possui uma capacidade máxima de transporte e possuem suas respectivas origens e destinos em um depósito central. Assim, o objetivo das rotas é atender um conjunto de requisições de transporte que possuem origem, destino e o tamanho do carregamento, cada pedido deve ser carregado em sua origem e descarregado em seu destino. Parragh, Doerner e Hartl (2008) realiza um estudo sobre o estado da arte, apresentando formulações dos diferente problemas de Pickup and Delivery e dando uma visão geral sobre diferentes algoritmos propostos, e divide o problema do Pickup and Delivery em duas grandes classes. A primeira classe se refere as situações em que todos os bens entregues tem de ser carregados em um ou mais depósitos e todos os bens carregados tem de ser transportados para um ou mais depósitos. Já a segunda classe, agrupa os problemas onde passageiros (bens) são transportados entre pontos de Pickup and Delivery.. 2.2.2. Dial-a-Ride. Pode ser visto como uma especialização do problema de Pickup and Delivery, onde o tamanho da carga (passageiro) é igual a um, na maioria dos casos. Possui uma semelhança clara com o problema do Caixeiro Viajante com Passageiros, dado em que ambos tratam sobre a temática do transporte de passageiros, porém a sua principal diferença encontra-se na obrigatoriedade do atendimento de todas as demandas de transporte. Enquanto que o foco do PCVP é buscar um equilíbrio entre a satisfação do motorista e a satisfação dos passageiros. Dentre as diversas variações existentes, destacam-se as classes de problemas com janela de tempo e com múltiplos motoristas. Por ser um problema com aplicações bastante específicas, é difícil encontrar na literatura uma definição uniforme que esteja presente na linguagem da maior parte dos autores, essa não-uniformidade varia desde a definição da função-objetivo, à exemplo de Bodin e Sexton (1986) que tentam minimizar a inconveniência dos passageiros, até restrições que tentam garantir um desvio máximo à precedência dos atendimentos às requisições, de modo que requisições mais antigas sejam atendidas o mais breve possível (PSARAFTIS, 1980). Outro aspecto importante em relação ao problema é se este se configura estático ou dinâmico. No caso estático, todas as requisições são conhecidas previamente, enquanto que na versão dinâmica, as requisições dos clientes são recebidas durante a execução do trajeto, e possivelmente alterando o trecho da solução ótima do problema que ainda não foi percorrido. Psaraftis (1980) realiza um estudo e propõe soluções para ambos os casos. Cordeau e Laporte (2007) apresenta um resumo recente sobre os modelos e algoritmos mais importantes..
(22) 21. 3 Problema do Caixeiro Viajante com Passageiros Diferente dos problemas Pickup and Delivery, Dial-a-Ride e outros relacionados, o motorista do PCV-P não possui a obrigatoriedade de cumprir as demandas realizadas pelos passageiros, dando ao condutor uma liberdade maior para a otimização de seus custos. Ao mesmo tempo em que o modelo não permite a exploração financeira de seus passageiros, já que os custos de qualquer trecho devem ser repartidos igualitariamente entre os ocupantes do veículo além do que o custo a ser pago por qualquer indivíduo é previamente limitado de acordo com seu interesse. Particularmente, tais aspectos evitam problemas de regulamentação em grande parte dos países. O problema é definido da seguinte maneira, dado um grafo 𝐺 = (𝑉, 𝐸), tal que 𝑉 representa o conjunto de vértices e 𝐸, o conjunto de arestas direcionadas com pesos, uma capacidade 𝑘, um conjunto de indivíduos representados pelo conjunto 𝑃 , onde cada elemento 𝑝𝑖 ∈ 𝑃 contém os valores de origem, destino e tarifa máxima associados ao indivíduo 𝑖. Origem corresponde ao vértice em que um determinado passageiro deve ser embarcado, e analogamente, destino corresponde ao único vértice em que um passageiro deve ser desembarcado. A origem de um passageiro deverá sempre ser diferente de seu destino e cada vértice corresponde exatamente à origem de um único passageiro. A tarifa máxima é um valor associado ao maior custo que pode ser pago por um determinado passageiro. O objetivo do problema é encontrar um circuito de custo mínimo, onde o custo é dado pelo somatório do custo dos arcos dividido pela quantidade de ocupantes do veículo, de modo que nenhuma aresta trafegue mais de 𝑘 passageiros e que o valor pago por passageiro é igual ao custo rateado das arestas utilizadas por ele, sem que este custo ultrapasse a tarifa máxima associada a tal passageiro.. 3.1. O caso geral. O PCV-P pode ser definido de forma geral em que mais de um passageiro possa ser embarcado em um mesmo vértice e assim, pode ser naturalmente adaptado para lidar com aplicações reais. Entretanto, tal generalização pode incorporar algumas dificuldades aos modelos de solução que serão apresentados posteriormente, desta forma, é apresentado a seguir um modelo de conversão da versão mais geral do problema para a mais específica, apresentada anteriormente..
(23) Capítulo 3. Problema do Caixeiro Viajante com Passageiros. 3.1.1. 22. Convertendo o caso geral para o mais específico. Tal redução aumenta a quantidade de vértices, proporcionalmente ao número de passageiros. Deste modo, para cada vértice 𝑣𝑖 no grafo original, que possua 𝑃𝑖 passageiros e 𝑃𝑖 > 1, serão criados 𝑃𝑖 − 1 novos vértices. Cada um destes novos vértices estarão associados a um dos passageiros do vértice original. Para transformar o problema onde um conjunto de passageiros pode embarcar ao mesmo tempo em um mesmo vértice, pode-se artificialmente criar um vértice para cada passageiro deste conjunto. Para esclarecer melhor, pode-se fazer uma analogia com vários passageiros que querem embarcar em uma mesma cidade. Para o problema, estes passageiros estão no mesmo vértice, mas em termos práticos, cada um desses passageiros podem estar em pontos diferentes no espaço, porém, como a distancia entre esses pontos é desprezível, podemos encarar que a distância entre esses novos pontos, ou vértices, é irrelevante para o problema, ou seja, a distância entre esses pontos pode ser tratada como sendo zero. Dessa forma, para cada passageiro adicional podemos criar artificialmente um novo vértice (cidade) que tera distância nula entre o vértice original e os outros vértices artificiais da mesma cidade. Na Ilustração a seguir é apresentado um grafo com apenas 4 vértices, onde o vértice inicial é 𝑠1 :. Figura 1 – Exemplo de grafo original Considerando que o passageiro 𝑠1 possui 3 passageiros, o vértice 𝑠2 , 4 passageiros, o vértice 𝑠3 , 2 passageiros e o vértice 4, 1 passageiro, obtemos a seguinte transformação:. Figura 2 – Ilustração do grafo transformado As arestas não-pontilhadas representam as arestas originais do grafo enquanto que as arestas pontilhadas representam novas arestas entre os vértices gerados por cada passageiro, o custo destas arestas é nulo, dessa forma, o motorista pode percorrê-las sem se preocupar com o aumento do custo total do trajeto. Note que a ordem em que os passageiros são visitados dentro de um mesmo vértice é indiferente, portanto, qualquer.
(24) Capítulo 3. Problema do Caixeiro Viajante com Passageiros. 23. rota realizada não mudará o valor da solução final, à exemplo da rota lexicográfica. Por este motivo, as arestas que pertencem a rota lexicográfica são as únicas que possuem custo 0. Os novos vértices que representam os passageiros de um vértice no grafo original formam um cluster de vértices, como representado acima. O primeiro vértice do cluster, e somente ele, receberá todas as arestas incidentes no vértice original e da mesma maneira, somente o último vértice receberá todas as arestas que saem do vértice original.. 3.2. Formulação Matemática. Em um grafo 𝐺 = (𝑉, 𝐸) com custo das arestas 𝑐𝑖𝑗 , uma quantidade 𝑛 de vértices, uma capacidade veicular 𝑘 e uma coleção de passageiros 𝑃 ⊆ {(𝑥, 𝑦, 𝑡) | 𝑥, 𝑦 ∈ 𝑉 e 𝑡 ∈ R}, de modo que para todo 𝑝𝑎 , 𝑝𝑏 ∈ 𝑃 tal que 𝑝𝑎 = (𝑥1 , 𝑦1 , 𝑧1 ), 𝑝𝑏 = (𝑥2 , 𝑦2 , 𝑧2 ) e 𝑝𝑎 ̸= 𝑝𝑏 temos que 𝑥1 ̸= 𝑥2 , ou seja, todos os vértices possuem exatamente um passageiro com origem neste determinado vértice. O objetivo é encontrar um circuito ótimo satisfazendo as restrições do problema. Entretanto, o modelo matemático a ser apresentado pode esta generalizado para que haja mais de um passageiro por vértice. Define-se as seguintes notações: ∙ Para um inteiro 𝑛 > 0, denote Z𝑛 como sendo o conjunto dos primeiros inteiros não-negativos, i.e, {0, 1, ..., 𝑛 − 1}. ∙ Para uma um passageiro 𝑙 = (𝑥, 𝑦, 𝑡), defina org(𝑙) : Z → 𝑉 = 𝑥, ou seja, o vértice de origem do passageiro 𝑙. ∙ Para uma um passageiro 𝑙 = (𝑥, 𝑦, 𝑡), defina dst(𝑙) : Z → 𝑉 = 𝑦, ou seja, o vértice de destino do passageiro 𝑙. ∙ Para uma um passageiro 𝑙 = (𝑥, 𝑦, 𝑡), defina trf(𝑙) : Z → 𝑉 = 𝑡, ou seja, a tarifa máxima a ser paga pelo passageiro 𝑙. Define-se as seguintes variáveis: ∙ 𝑥𝑖𝑗 : a pertinência do arco (𝑖, 𝑗) na rota do motorista. ∙ 𝑢𝑖 : a ordem do vértice 𝑖 na rota do motorista. ∙ 𝑣𝑙𝑖𝑗 : a pertinência do arco (𝑖, 𝑗) no trajeto do passageiro 𝑙. ∙ 𝑠𝑖𝑗 : a quantidade de passageiros que atravessam o arco (𝑖, 𝑗) na solução. O modelo abaixo incorpora algumas restrições relativas ao embarque de passageiros à formulação desenvolvida por Miller, Tucker e Zemlin (1960) para o problema do Caixeiro Viajante..
(25) Capítulo 3. Problema do Caixeiro Viajante com Passageiros. 24. Minimize: 𝑐𝑖𝑗 𝑥𝑖𝑗. ∑︁ 1≤𝑖,𝑗≤𝑛. 1+. ∑︀𝑛. 𝑙=1. (3.1). 𝑣𝑙𝑖𝑗. Sujeito à: 𝑛 ∑︁ 𝑗=1 𝑛 ∑︁. 𝑥𝑖𝑗 = 1. (1 ≤ 𝑖 ≤ 𝑛). (3.2). 𝑥𝑗𝑖 = 1. (1 ≤ 𝑖 ≤ 𝑛). (3.3). (2 ≤ 𝑖, 𝑗 ≤ 𝑛). (3.4). (1 ≤ 𝑖, 𝑗 ≤ 𝑛). (3.5). 𝑣𝑙1𝑖 = 0. (1 ≤ 𝑙 ≤ 𝑛 | 𝑟 = org(𝑙), 𝑟 ̸= 1). (3.6). 𝑣𝑙𝑖1 = 0. (1 ≤ 𝑙 ≤ 𝑛 | 𝑠 = dst(𝑙), 𝑠 ̸= 1). (3.7). (1 ≤ 𝑖, 𝑙 ≤ 𝑛 | 𝑖 ̸= org(𝑙), 𝑖 ̸= dst(𝑙)). (3.8). (1 ≤ 𝑙 ≤ 𝑛 | 𝑡 = trf(𝑙)). (3.9). 𝑗=1. 𝑢𝑖 − 𝑢𝑗 + 1 ≤ 𝑛(1 − 𝑥𝑖𝑗 ) 𝑛 ∑︁ 𝑙=1 𝑛 ∑︁ 𝑖=1 𝑛 ∑︁ 𝑖=1 𝑛 ∑︁. 𝑣𝑙𝑖𝑗 ≤ 𝑘𝑥𝑖𝑗 𝑣𝑙𝑖𝑟 + 𝑣𝑙𝑠𝑖 + 𝑣𝑙𝑖𝑗 =. 𝑗=1. 𝑛 ∑︁ 𝑖=1 𝑛 ∑︁ 𝑖=1 𝑛 ∑︁. 𝑐𝑖𝑗 𝑣𝑙𝑖𝑗. ∑︁ 1≤𝑖,𝑗≤𝑛. 𝑣𝑙𝑗𝑖. 𝑗=1. 1+. ∑︀𝑛. 𝑤=1. 𝑣𝑤𝑖𝑗. ≤𝑡. Para. 𝑥𝑖𝑗 , 𝑣𝑙𝑖𝑗 ∈ {0, 1} 𝑢𝑖 ∈ R≥0. (1 ≤ 𝑖, 𝑗, 𝑙 ≤ 𝑛). (3.10). (2 ≤ 𝑖 ≤ 𝑛). (3.11) (3.12). As restrições 3.2 e 3.3 garantem que todo vértice possuirá apenas uma aresta entrando e saindo dele no circuito. A restrição 3.4 é a contribuição de Miller, Tucker e Zemlin (1960) no modelo tradicional do PCV, por meio da eliminação de sub-tours. Portanto, as restrições de 3.2 à 3.4 asseguram um ciclo Hamiltoniano para o motorista, representado pela variável 𝑥. A restrição 3.5 certifica que as arestas transpassadas pelos passageiros não sejam diferentes das arestas do motorista além de garantir que a capacidade do veículo não seja violada. A restrição 3.6 inviabiliza o retorno de qualquer passageiro à sua cidade de origem e a saída de qualquer passageiro de seu vértice de destino. A 3.7 obriga que passageiro algum irá atravessar o vértice inicial do motorista. E para garantir que as arestas ativas dos passageiros formem um caminho, é introduzida a restrição 3.8. Por fim, a restrição 3.9 incorpora os limites de tarifa máximo a ser pago por cada passageiro..
(26) Capítulo 3. Problema do Caixeiro Viajante com Passageiros. 3.3. 25. Linearizando o modelo. A linearização do modelo descrito na seção anterior consiste em duas etapas, uma delas é substituir as frações da função-objetivo e da restrição 3.9, incorporando algumas novas variáveis ao modelo. Tal transformação acarreta na produção de alguns produtos de variáveis. Em alguns casos como serão explorados a seguir, esses produtos podem ser simplesmente simplificados e em outros casos, algumas restrições serão inseridas para garantir o comportamento adequado do modelo.. 3.3.1. Eliminando a divisão de variáveis. Trata-se de reformular o modelo para que não ocorra divisão de variáveis. A transformação a seguir é restrita ao caso em que o denominador é inteiro e limitado, 1 ≤ 𝐷 ≤ 𝑈 , onde 𝐷 representa o denominador e 𝑈 , o limite superior, nos casos em que deseja-se minimizar a fração. Assim, onde houver uma expressão da seguinte maneira: 𝑁 𝐷. (3.13). Substitui-se por: 𝑁−. 𝑈 −1 ∑︁ 𝑖=1. 𝑧𝑖 𝑁 𝑖(𝑖 + 1). (3.14). tal que, 𝑈 −1 ∑︁. 𝑧𝑖 = 𝐷. (3.15). 𝑖=1. (3.16) onde,. 𝑧𝑖 ≤ 1, 𝑧𝑖 ∈ R≥0. (1 ≤ 𝑖 ≤ 𝑈 − 1). (3.17). Analisando a transformação proposta, verifica-se facilmente que 3.13 = 3.14 somente quando 3.14 atinge o seu menor valor possível, por isso, se faz necessário que 3.13 esteja sendo minimizado.. 3.3.2. Linearizando a função-objetivo e a restrição de tarifas. O primeiro passo para o ajuste do modelo é remover a divisão da função objetivo 3.1 e da restrição 3.9. Assim, essas fórmulas são convertidas, respectivamente, em:.
(27) Capítulo 3. Problema do Caixeiro Viajante com Passageiros. (︃. 𝑘 ∑︁. )︃. 𝑘 ∑︁. )︃. 𝑧𝑖𝑗𝑤 𝑐𝑖𝑗 𝑥𝑖𝑗 𝑐𝑖𝑗 𝑥𝑖𝑗 − 𝑤=1 𝑤(𝑤 + 1). ∑︁ 1≤𝑖,𝑗≤𝑛. (︃ ∑︁. 𝑐𝑖𝑗 𝑣𝑙𝑖𝑗. 1≤𝑖,𝑗≤𝑛. 𝑧𝑖𝑗𝑤 𝑐𝑖𝑗 𝑣𝑙𝑖𝑗 − 𝑤=1 𝑤(𝑤 + 1). 26. (3.18) ≤𝑡. (1 ≤ 𝑙 ≤ 𝑛 | 𝑡 = trf(𝑙)). (3.19) (3.20). Sujeito à: 𝑘 ∑︁. 𝑧𝑖𝑗𝑤 =. 𝑤=1. 𝑛 ∑︁. (1 ≤ 𝑖, 𝑗 ≤ 𝑛). 𝑣𝑙𝑖𝑗. (3.21). 𝑙=1. Contudo, a expressão 3.18 pode ser simplificada, dado que 𝑧𝑖𝑗𝑤 = 1 → 𝑥𝑖𝑗 = 1. Resultando a seguinte expressão: 𝑘 ∑︁. (︃ ∑︁ 1≤𝑖,𝑗≤𝑛. 𝑧𝑖𝑗𝑤 𝑐𝑖𝑗 𝑐𝑖𝑗 𝑥𝑖𝑗 − 𝑤=1 𝑤(𝑤 + 1). )︃. (3.22). A restrição 3.19 exige um pouco mais de esforço do que a restrição anterior, pois a variável 𝑣 não possui a mesma relação com 𝑧 que a variável 𝑥. Assim, se a for realizada a mesma simplificação pode ocorrer 2 situações, a primeira delas é quando 𝑣 = 1 e a restrição se comporta normalmente, entretanto, a segunda situação em que 𝑣 = 0 pode levar a uma situação indesejada, já que para um determinado par de índices 𝑖, 𝑗 fixos a soma dos termos internos do somatório pode resultar em um valor negativo, onde o valor esperado seria 0. Desta maneira, uma saída seria substituir esses sub-termos por variáveis que sejam maiores ou iguais que tais expressões e só podem assumir valores positivos. Assim, sua simplificação resultaria em:. ∑︁. 𝑞𝑙𝑖 ≤ 𝑡. (1 ≤ 𝑙 ≤ 𝑛 | 𝑡 = trf(𝑙)). (3.23). (1 ≤ 𝑙 ≤ 𝑛). (3.24). 1≤𝑖≤𝑛. (︃ ∑︁. 𝑐𝑖𝑗 𝑣𝑙𝑖𝑗. 1≤𝑗≤𝑛. 3.3.3. 𝑘 ∑︁. 𝑐𝑖𝑗 𝑧𝑖𝑗𝑤 − 𝑤=1 𝑤(𝑤 + 1). )︃. ≤ 𝑞𝑙𝑖. Modelo linearizado Minimize: (︃ ∑︁ 1≤𝑖,𝑗≤𝑛. Sujeito à:. 𝑘 ∑︁. 𝑧𝑖𝑗𝑤 𝑐𝑖𝑗 𝑐𝑖𝑗 𝑥𝑖𝑗 − 𝑤=1 𝑤(𝑤 + 1). )︃. (3.25).
(28) Capítulo 3. Problema do Caixeiro Viajante com Passageiros. 𝑛 ∑︁ 𝑗=1 𝑛 ∑︁. 27. 𝑥𝑖𝑗 = 1. (1 ≤ 𝑖 ≤ 𝑛). (3.26). 𝑥𝑗𝑖 = 1. (1 ≤ 𝑖 ≤ 𝑛). (3.27). (2 ≤ 𝑖, 𝑗 ≤ 𝑛). (3.28). (1 ≤ 𝑖, 𝑗 ≤ 𝑛). (3.29). 𝑣𝑙1𝑖 = 0. (1 ≤ 𝑙 ≤ 𝑛 | 𝑟 = org(𝑙), 𝑟 ̸= 1). (3.30). 𝑣𝑙𝑖1 = 0. (1 ≤ 𝑙 ≤ 𝑛 | 𝑠 = dst(𝑙), 𝑠 ̸= 1). (3.31). (1 ≤ 𝑖, 𝑙 ≤ 𝑛 | 𝑖 ̸= org(𝑙), 𝑖 ̸= dst(𝑙)). (3.32). (1 ≤ 𝑖, 𝑗 ≤ 𝑛). (3.33). (1 ≤ 𝑙 ≤ 𝑛 | 𝑡 = trf(𝑙)). (3.34). (1 ≤ 𝑖, 𝑙 ≤ 𝑛). (3.35). 𝑗=1. 𝑢𝑖 − 𝑢𝑗 + 1 ≤ 𝑛(1 − 𝑥𝑖𝑗 ) 𝑛 ∑︁ 𝑙=1 𝑛 ∑︁ 𝑖=1 𝑛 ∑︁ 𝑖=1 𝑛 ∑︁. 𝑣𝑙𝑖𝑗 ≤ 𝑘𝑥𝑖𝑗 𝑣𝑙𝑖𝑟 + 𝑣𝑙𝑠𝑖 + 𝑣𝑙𝑖𝑗 =. 𝑗=1 𝑘 ∑︁. 𝑛 ∑︁ 𝑖=1 𝑛 ∑︁ 𝑖=1 𝑛 ∑︁. 𝑣𝑙𝑗𝑖. 𝑗=1. 𝑧𝑖𝑗𝑤 =. 𝑤=1. 𝑛 ∑︁. 𝑣𝑙𝑖𝑗. 𝑙=1. ∑︁. 𝑞𝑙𝑖 ≤ 𝑡. 1≤𝑖≤𝑛. (︃ ∑︁. 𝑐𝑖𝑗 𝑣𝑙𝑖𝑗. 1≤𝑗≤𝑛. 𝑘 ∑︁. 𝑐𝑖𝑗 𝑧𝑖𝑗𝑤 − 𝑤=1 𝑤(𝑤 + 1). )︃. ≤ 𝑞𝑙𝑖. Para. 𝑥𝑖𝑗 , 𝑣𝑙𝑖𝑗 ∈ {0, 1}. (1 ≤ 𝑖, 𝑗, 𝑙 ≤ 𝑛). (3.36). 𝑢𝑖 ∈ R≥0. (2 ≤ 𝑖 ≤ 𝑛). (3.37). 𝑞𝑙𝑖 ∈ R≥0. (1 ≤ 𝑙, 𝑖 ≤ 𝑛). (3.38). (1 ≤ 𝑖, 𝑗 ≤ 𝑛, 1 ≤ 𝑤 ≤ 𝑘). (3.39). 𝑧𝑤𝑖𝑗 ≤ 1, 𝑧𝑤𝑖𝑗 ∈ R≥0.
(29) 28. 4 Problema de Atribuição de Passageiros O problema da Atribuição de Passageiros é um subproblema do Caixeiro Viajante com Passageiros e possui grande importância em diversas abordagens computacionais que visam solucionar o PCV-P, à exemplo de alguns algoritmos que serão apresentados nos próximos capítulos. Porém, Calheiros (2015) demonstra a NP-dificuldade deste problema, o que resulta em grande esforço para alcançar soluções exatas computacionalmente eficientes. Para um grafo 𝐺 = (𝑉, 𝐸) dirigido com arestas ponderadas, uma capacidade 𝑘, um conjunto de passageiros 𝑃 e um circuito ótimo 𝐶, o problema consiste em identificar um subconjunto de passageiros de forma que se embarcados no circuito 𝐶 resultam em uma solução de custo mínimo para o motorista sem extrapolar a capacidade máxima de passageiros por aresta, seguindo a mesma divisão de custos e restrições de embarque do problema PCV-P.. 4.1. Variante I: Relaxação da Tarifa. Trata-se de uma variante organizada do problema supracitado para a obtenção de limites inferiores para o PCV-P. Nesta variante, a restrição que limita a quantidade monetária a ser retribuída ao condutor é desprezada, criando-se um modelo com um espaço de solução menos restrito, todavia livre de uma restrição que possui natureza não linear. Para solucionar o problema original da atribuição, uma das soluções seria enumerar o espaço de busca a partir de um procedimento de backtracking, por exemplo. Entretanto, o menor limite superior conhecido para o espaço de busca é 𝒪(2𝑛 ), onde pode haver no máximo 2𝑛 configurações de passageiros. Porém, é possível construir um algoritmo de programação dinâmica pseudo-polinomial de complexidade temporal 𝒪(𝑘 × 𝑛𝑘+1 ), tal que para casos reais onde boa parte dos veículos domésticos possuem capacidades para 3 ou 4 passageiros, o algoritmo teria comportamento polinomial. O algoritmo 1, inicializado por VarianteI-PD(0, 𝑉 ) tal que 𝑉 = (𝑛𝑖𝑙, 𝑛𝑖𝑙, ..., 𝑛𝑖𝑙) e |𝑉 | = 𝑘, descreve o comportamento de um método de 𝑚𝑒𝑚𝑜𝑖𝑧𝑎𝑡𝑖𝑜𝑛 capaz de encontrar a solução, i.e, o custo da melhor configuração de embarque em 𝒪(𝑘 × 𝑛𝑘+1 ), tal complexidade se justifica pelo fato que há no máximo (𝑛 + 1)(𝑘+1) possíveis configurações de entrada e cada estado (configuração) possui um custo de 𝒪(𝑘), devido ao processamento realizado no vetor 𝑉 ..
(30) Capítulo 4. Problema de Atribuição de Passageiros. 29. Algoritmo 1: Programação Dinâmica da Variante I. 1 2 3 4 5 6 7 8 9 10 11 12. 13. 14 15. 16 17 18 19 20 21. Entrada: Último vértice 𝑥, vetor de inteiros 𝑉 com os vértices dos últimos embarques. VarianteI-PD : início se Memo (x, V) ainda não foi calculado então se x é último vértice do circuito então Memo(𝑥, 𝑉 ) ← 0. senão para todo vértice v ∈ V faça Desembarque todo passageiro com final em 𝑥, i.e, caso 𝑣 = 𝑥 faça: 𝑣 ← 𝑛𝑖𝑙. fim Defina 𝑤 ← primeiro 𝑣 ∈ 𝑉 tal que 𝑣 = 𝑛𝑖𝑙. Defina 𝑦 ← próximo vértice após 𝑥. Memo(𝑥, 𝑉 ) ← VarianteI-PD(𝑦, 𝑉 ) + custo do arco (𝑥, 𝑦) / (1 + número de passageiro em 𝑉 ). ⋀︀ se 𝑤 = ̸ 𝑛𝑖𝑙 passageiro 𝑝 com origem em 𝑥 tem destino após o vértice 𝑥 então 𝑤 ← 𝑥. Defina 𝑛𝑐𝑜𝑠𝑡 ← VarianteI-PD(𝑦, 𝑉 ) + custo do arco (𝑥, 𝑦) / (1 + número de passageiro em 𝑉 ). Memo(𝑥, 𝑉 ) ← menor dentre (Memo(𝑥, 𝑉 ), 𝑤). fim fim fim fim retorna Memo (x, V). 4.2. Variante II: Sem Tarifas e Maior Número de Passageiros. Tal variante remove a restrição de tarifa, restrição 3.9, como na variante I e altera a função objetivo para incorporar a maior quantidade de passageiros na solução. Deste modo, o objetivo do motorista deixa de ser minimizar os custos de viagem e passa a ser maximizar o número de embarques de passageiros. Esclarecendo, a função objetivo torna-se maximizar o tamanho do conjunto 𝑃𝑒 , onde 𝑃𝑒 contém todos os passageiros embarcados no trajeto. Apesar desta variante não parecer muito promissora para garantir bons resultados para o problema do PCV-P, este problema tem uma contribuição bem significativa no mundo real, assim como os problemas de carpooling, já que maximiza o compartilhamento do veículo. O algoritmo 2 detalha uma solução exata para o problema e pode ser implementado.
(31) Capítulo 4. Problema de Atribuição de Passageiros. 30. Algoritmo 2: Algoritmo Guloso da Variante II Entrada: Entrada do problema 1 início 2 Inicialize uma solução (atribuição de passageiros) 𝑠𝑜𝑙 vazia. 3 Inicialize um fila de prioridades de mínimo 𝑓 𝑝 com todos os passageiros, usando a posição do vértice de destino como critério de ordenação, ou seja, o passageiro com desembarque mais próximo tem maior prioridade. 4 enquanto fp não estiver vazia faça 5 Defina 𝑥 ← 𝑓 𝑝𝑚𝑖𝑛𝑖𝑚𝑜 . 6 𝑓 𝑝.𝑒𝑥𝑡𝑟𝑎𝑖𝑟𝑀 𝑖𝑛𝑖𝑚𝑜(). 7 se a inserção de 𝑥 for viável então 8 Insira 𝑥 à 𝑠𝑜𝑙. 9 fim 10 fim 11 fim 12 retorna sol. com complexidade temporal de 𝒪(𝑛 × log𝑛 ) utilizando estruturas de dados eficientes. Teorema 1. A inserção iterativa de passageiros viáveis com o menor final sempre gera uma solução ótima. Demonstração. Para demonstrar que a escolha do passageiro com menor final sempre gera uma solução ótima, suponha por absurdo que em uma determinada iteração 𝑖, a escolha do passageiro 𝑝𝑎 com o menor final não resulte em uma solução ótima. Entretanto, para qualquer solução ótima 𝑥* pertencente ao espaço de busca da 𝑖-ésima iteração, é possível construir uma solução 𝑥1 que contenha 𝑝𝑎 com custo melhor ou igual à 𝑥* , o que acarreta em uma contradição. A construção da solução 𝑥1 pode ser concebida através da modificação da solução 𝑥* , como pode ser verificado a seguir: defina 𝑝𝑏 sendo o passageiro pertencente a 𝑥* com final maior ou igual que 𝑝𝑎 .𝑓 𝑖𝑛𝑎𝑙 e começo menor que o 𝑝𝑎 .𝑓 𝑖𝑛𝑎𝑙 (i.e, 𝑝𝑏 é um dos passageiros viáveis da 𝑖-ésima iteração e possui interseção com 𝑝𝑎 ). 1. 𝑝𝑦 não existe: Dessa forma, 𝑝𝑥 possuía disponibilidade para embarque (já que era um passageiro viável da 𝑖-ésima iteração) que não foi utilizada por nenhum passageiro, portanto ele pode ser simplesmente adicionando, melhorando a qualidade da solução. 2. 𝑝𝑦 existe e 𝑝𝑦 .𝑐𝑜𝑚𝑒ç𝑜 é menor que 𝑝𝑥 .𝑐𝑜𝑚𝑒ç𝑜: Simplesmente substitua 𝑝𝑦 por 𝑝𝑥 e mantenha a qualidade da solução, já que 𝑝𝑥 esta incluso no trajeto de 𝑝𝑦 . 3. 𝑝𝑦 existe e 𝑝𝑦 .𝑐𝑜𝑚𝑒ç𝑜 é maior que 𝑝𝑥 .𝑐𝑜𝑚𝑒ç𝑜: É fácil observar que há disponibilidade entre o trajeto [𝑝𝑥 .𝑐𝑜𝑚𝑒ç𝑜, 𝑝𝑦 .𝑐𝑜𝑚𝑒ç𝑜], caso.
(32) Capítulo 4. Problema de Atribuição de Passageiros. 31. contrário, ela foi ocupada por algum passageiro com final menor que 𝑝𝑦 .𝑐𝑜𝑚𝑒ç𝑜, o que não é possível, pois esse passageiro só pode ter sido adicionado após a iteração 𝑖, devido ao pressuposto que existia disponibilidade para 𝑝𝑥 na iteração 𝑖, o que acarreta que o seu final é obrigatoriamente maior que 𝑝𝑥 .𝑓 𝑖𝑛𝑎𝑙, e assim inviabilizando sua existência. Dessa forma, existe disponibilidade nesse intervalo e removendo-se 𝑝𝑦 , permite-se a entrada de 𝑝𝑥 no intervalo [𝑝𝑥 .𝑐𝑜𝑚𝑒ç𝑜, 𝑝𝑥 .𝑓 𝑖𝑛𝑎𝑙], ocasionando novamente na manutenção da qualidade da solução.. 4.3. Variante III: Sem Tarifas e Função-Objetivo linear. Esta seção propõe uma versão do problema mais geral que a versão anterior e com solução polinomial. Da mesma forma que o problema da alocação (atribuição) de passageiros original, passageiros com origens e destinos predefinidos tem que ser atribuídos em uma rota definida pelo motorista de maneira em que não viole a capacidade máxima do veículo em nenhum trecho do trajeto. Assim como a variante que maximiza a quantidade de passageiros, este versão assume que não existe uma restrição que controle a tarifa que será paga por passageiro, a sua única diferença é a função objetivo. Seja 𝑥 ∈ {0, 1}𝑛 , o vetor que representa a presença de cada um dos passageiros na solução, e 𝑤 ∈ R𝑛 , os pesos associados a cada um dos passageiros. Portanto a função objetivo é minimizar 𝑧=. 𝑛 ∑︁ 𝑖=1. 𝑤𝑖 × 𝑥𝑖 .. Para o caso em que 𝑤 = {1}𝑛 , o problema resume-se à variante anterior. Logo, esta versão é mais geral que a anterior. Entretanto, a resolução do problema supracitado não soluciona o problema que esta sendo abordado. Para isso, é proposto uma redução de tal problema para um problema bastante abordado na literatura que é o problema do fluxo máximo com custo mínimo que possui solução polinomial. Contudo, a versão do problema do problema de fluxo a ser utilizada é uma especialização do problema mais geral, nesta, apenas soluções com fluxos inteiros serão aceitas. Para esse fim, existe um teorema que garante que se todas as arestas possuem capacidades inteiras, haverá uma solução inteira para o problema do fluxo máximo de custo mínimo (AHUJA; MAGNANTI; ORLIN, 1993). Para encontrar uma dessas soluções inteiras, pode-se utilizar, por exemplo, o algoritmo dos sucessivos caminhos mais curtos que tem complexidade pseudo-polinomial de 𝑂(𝑛𝑈 𝑆), onde 𝑈 representa um limite superior para o maior fornecimento de um vértice, que no caso é limitado pela soma das arestas do vértice inicial, S representa o tempo consumido pelo algoritmo de caminho mínimo utilizado, podendo ser, por exemplo, 𝑛2 em uma implementação simples do algoritmo de Dijkstra. Tal complexidade já é suficiente para garantir o tempo polinomial da redução a seguir, já que a capacidade da maior aresta da rede é de no máximo 𝑘..
(33) Capítulo 4. Problema de Atribuição de Passageiros. 4.3.1. 32. Transformação. Para cada passageiro que pode ser embarcado, defina o intervalo [𝑢𝑖 , 𝑣𝑖 ] que representa, respectivamente, o vértice de inicio e o vértice de destino do passageiro 𝑝𝑖 , defina também os vértices 𝑝𝑖 .𝑖𝑛𝑖𝑐𝑖𝑎𝑙 e 𝑝𝑖 .𝑓 𝑖𝑛𝑎𝑙 associados a esse passageiro. Os únicos passageiros que serão considerados nessa transformação são aqueles em que 𝑢𝑖 ≤ 𝑣𝑖 , caso contrário, esse passageiro pode ser desconsiderado, uma vez que ele não pode ser incorporado a solução. Algoritmo 3: Transformação 1 início 2 Adicione uma aresta do vértice 𝑠 para o vértice 𝑠′ com capacidade 𝑘 e custo 0. 3 para cada passageiro 𝑝𝑖 faça 4 Adicione uma aresta do vértice 𝑠′ para o vértice 𝑝𝑖.𝑖𝑛𝑖𝑐𝑖𝑎𝑙 com capacidade 1 com custo 0. 5 Adicione uma aresta do vértice 𝑝𝑖 .𝑖𝑛𝑖𝑐𝑖𝑎𝑙 para 𝑝𝑖 .𝑓 𝑖𝑛𝑎𝑙 com capacidade 1 e custo −𝑤𝑖 (custo do passageiro 𝑝𝑖 ). 6 para todo passageiro 𝑝𝑗 em que 𝑣𝑖 ≤ 𝑢𝑗 faça 7 Adicione uma aresta do vértice 𝑝𝑖 .𝑓 𝑖𝑛𝑎𝑙 para 𝑝𝑗 .𝑖𝑛𝑖𝑐𝑖𝑎𝑙 com capacidade 1 e custo 0. 8 fim 9 Adicione uma aresta do vértice 𝑝𝑖 .𝑓 𝑖𝑛𝑎𝑙 para 𝑡 com capacidade 1 e custo 0. 10 fim 11 Adicione uma aresta do vértice 𝑠′ para o vértice 𝑡 com capacidade 𝑘 e custo 0. 12 fim Deste modo, para alcançar a solução ótima para o problema da alocação basta encontrar o fluxo máximo de custo mínimo do vértice 𝑠 ao vértice 𝑡 no grafo descrito acima. Para exemplificar a redução, a figura 4 mostra como seria o grafo resultante da transformação da instância representada pelo grafo 3 com a seguinte configuração de passageiro: 𝑝1 : (1, 4); 𝑝2 : (2, 5); 𝑝3 : (3, 1); 𝑝4 : (4, 5); 𝑝5 : (5, 1), tal que, 𝑝𝑘 : (𝑥, 𝑦) significa que 𝑥 é o vértice de embarque do passageiro 𝑝𝑘 e 𝑦, o vértice de desembarque do passageiro 𝑝𝑘 .. 2. 3. 4. 1. 5. Figura 3 – Exemplo de grafo.
(34) Capítulo 4. Problema de Atribuição de Passageiros. 33. passageiro p2 p2.inicial. p2.final passageiro p5 p5.inicial. passageiro p1 p1.inicial s. p5.final. p1.final. s'. t. passageiro p4 p4.inicial. passageiro p3 p3.inicial. p4.final. p3.final. Figura 4 – Ilustração da redução do problema. 4.3.2. Demonstração. O objetivo é mostrar que para qualquer alocação de passageiros no problema original de custo 𝑅, existe uma configuração de fluxo máximo com custo −𝑅 para o problema transformado e vice-e-versa. 4.3.2.1. Toda alocação de custo R gera um fluxo máximo de custo -R. Supondo que exista uma alocação de passageiros com custo igual à 𝑅. Portanto, para uma determinada ordem de passageiros embarcados 𝑃 = {𝑝1 , 𝑝2 , ..., 𝑝𝑛 }, um fluxo viável máximo e com custo 𝑅 pode ser construído da seguinte maneira: Algoritmo 4: Empurrando fluxo a partir de uma alocação válida 1 início 2 para todo i de 1 até k faça 3 Empilhe o vértice 1. 4 fim 5 para todo i de 1 até k faça 6 Empilhe todo vértice 𝑝𝑗 .𝑓 𝑖𝑛𝑎𝑙 tal que o passageiro 𝑝𝑗 ∈ 𝑃 e 𝑝𝑗 possua desembarque em 𝑝𝑖 . 7 Passe uma unidade de fluxo de 𝑠.𝑡𝑜𝑝𝑜() para 𝑝𝑖 .𝑖𝑛𝑖𝑐𝑖𝑎𝑙. 8 Passe uma unidade de fluxo de 𝑝𝑖 .𝑖𝑛𝑖𝑐𝑖𝑎𝑙 para 𝑝𝑖 .𝑓 𝑖𝑛𝑎𝑙. 9 Desempilhe 𝑠.𝑡𝑜𝑝𝑜(). 10 fim 11 para todo i de 1 até k faça 12 Passe uma unidade de fluxo de 𝑠.𝑡𝑜𝑝𝑜() para vértice 𝑓 𝑖𝑛𝑎𝑙. 13 fim 14 fim Pode-se observar que é sempre possível transpassar fluxo pelo o algoritmo acima,.
(35) Capítulo 4. Problema de Atribuição de Passageiros. 34. uma vez que cada vértice só passará fluxo para vértices que possuem embarque após seu desembarque. Contudo, é necessário que a pilha nunca esteja vazia quando o topo da pilha for requisitado, entretanto, essa situação só ocorrerá quando 𝑘 passageiros embarcados ainda não tiverem sido desembarcados e for preciso embarcar algum passageiro, o que não é possível. É fácil perceber que 𝑘 é o maior fluxo que pode ser passado por esta rede, dado que o vértice inicial só possui uma aresta com capacidade máxima de 𝑘. Dessa forma, é possível construir uma solução viável com 𝑘 unidades de fluxo e com custo que equivale à soma dos custos de cada passageiro no fluxo, já que são os únicos ∑︁ que possuem custo diferente de zero, ou seja, o custo total é − 𝑐𝑢𝑠𝑡𝑜(𝑝𝑖 ) = −𝑅. 𝑝𝑖 ∈𝑃. 4.3.2.2. Todo fluxo máximo de custo -R gera uma alocação de custo R. Supondo que existe uma configuração de fluxo máximo com custo -R e com os fluxos de cada aresta sendo valores inteiros, pode-se construir uma alocação de passageiros válida com custo R. Como o fluxo máximo é de valor exatamente 𝑘, haverão exatamente 𝑘 caminhos do vértice de origem ao vértice de destino da rede com fluxo de uma unidade. Dessa maneira, a configuração de alocação pode ser construída da seguinte forma. Algoritmo 5: Criando uma alocação a partir de um fluxo 1 início 2 para todo i de 1 até k faça 3 Encontre um caminho 𝑠 − 𝑡 da origem ao destino de forma que cada uma das arestas possua pelo menos uma unidade de fluxo. 4 para toda aresta 𝑒 do caminho 𝑠 − 𝑡 faça 5 se 𝑒 representa uma aresta com custo diferente de 0 então 6 Inclua o passageiro associado a essa aresta na alocação do motorista. 7 fim 8 fim 9 Remova uma unidade de fluxo das arestas do caminho 𝑠 − 𝑡. 10 fim 11 fim Para verificar que o procedimento acima gera uma solução válida para o problema da alocação, primeiramente, observa-se que cada passageiro só será inserido no máximo uma vez, já que cada aresta de passageiro possui capacidade máxima de uma unidade. E, pode-se associar a cada aresta com custo do fluxo a um intervalo de vértices do grafo do problema original, assim cada passageiro 𝑝𝑖 representa um intervalo de vértices [𝑢𝑖 , 𝑣𝑖 ] e a solução só sera inválida caso haja alguma interseção não-vazia com mais de 𝑘 passageiros. Assim, pode-se mostrar que isso não é possível a partir do seguinte declaração: cada caminho acima possui apenas passageiros sem interseções entre passageiros do próprio caminho, de acordo com a definição da rede de fluxo, portanto, como haverá exatamente 𝑘.
(36) Capítulo 4. Problema de Atribuição de Passageiros. 35. caminhos, a maior interseção não-vazia terá no máximo 𝑘 passageiros. Como as únicas arestas com custos incorporadas ao fluxo são aquelas que estão associadas aos passageiros, portanto, o custo total da alocação é de 𝑅.. 4.4. Modelo Exato para Alocação de Passageiros. Apesar do esforço acima para encontrar soluções computacionalmente eficientes para o pior caso dos problemas relacionados, ainda é possível encontrar soluções para o problema original que sejam eficientes na prática. É o caso do modelo matemático para o problema de alocação, que apesar de haver um número potencialmente exponencial de decisões a serem tomadas, tem se mostrado eficiente para grande parte das instâncias desenvolvidas. As variáveis de decisões que controlam qual passageiro estará presente, ou não, no roteamento do motorista é dado pelo vetor 𝑣 ∈ {0, 1}𝑛 , que quando indexado pelo índice do passageiro, representa a condição de embarque de tal passageiro. Do mesmo modo, 𝑐 ∈ R𝑛 , quando indexado pelo índice da aresta pela ordem da rota, representa o custo de tal aresta. E 𝑡 ∈ R𝑛 , contem a informação de tarifa de cada indivíduo. O restante das notações utilizadas a seguir são as mesmas adotadas no capítulo anterior. Assim, o modelo resume-se a minimizar: 𝑐𝑖. ∑︁ 1≤𝑖≤𝑛. ∑︁. 1+. (4.1). 𝑣𝑗. 𝑜𝑟𝑔(𝑗)≤𝑖<𝑑𝑠𝑡(𝑗). De modo que: 𝑑𝑠𝑡(𝑗). 𝑐𝑖. ∑︁ 𝑖=𝑜𝑟𝑔(𝑗). ∑︁. 1+. 𝑣𝑘. ≤ 𝑡𝑗. (1 ≤ 𝑗 ≤ 𝑛). (4.2). 𝑜𝑟𝑔(𝑘)≤𝑖<𝑑𝑠𝑡(𝑘). 4.4.1. Modelo Linearizado. A metodologia utilizada na linearização é a mesma utilizada no capítulo anterior. Sendo assim, o modelo linearizado que é utilizado por alguns algoritmos nos próximos capítulos, é descrito a seguir. Minimizar: ∑︁ 1≤𝑖≤𝑛. 𝑐𝑖 −. 𝑧𝑖𝑗 2≤𝑗≤𝑘 𝑗(𝑗 − 1) ∑︁. (4.3). Sujeito à:. ∑︁ 𝑜𝑟𝑔(𝑗)≤𝑖<𝑑𝑠𝑡(𝑗). 𝑣𝑗 =. 𝑘 ∑︁ 𝑤=2. 𝑧𝑖𝑤. (1 ≤ 𝑖 ≤ 𝑛). (4.4).
(37) Capítulo 4. Problema de Atribuição de Passageiros 𝑛 ∑︁. 𝑞𝑙𝑖 ≤ 𝑡𝑙. 36. (1 ≤ 𝑙 ≤ 𝑛). (4.5). (1 ≤ 𝑖 ≤ 𝑛, 𝑜𝑟𝑔(𝑗) ≤ 𝑖 < 𝑑𝑠𝑡(𝑗)). (4.6). 𝑖=1. 𝑐𝑖 𝑣𝑗 −. 𝑘 ∑︁. 𝑐𝑖 𝑧𝑖𝑤 ≤ 𝑞𝑗𝑖 𝑤=2 𝑤(𝑤 − 1). Para. 𝑞𝑙𝑖 ∈ R≥0 𝑧𝑖𝑤 ≤ 1, 𝑧𝑖𝑤 ∈ R≥0. (1 ≤ 𝑙, 𝑖 ≤ 𝑛). (4.7). (1 ≤ 𝑖 ≤ 𝑛, 2 ≤ 𝑤 ≤ 𝑘). (4.8).
(38) 37. 5 Buscas Locais As buscas locais são procedimentos para resolver problemas de otimização. De forma geral, eles exploram o espaço de busca do problema a partir de uma solução inicial, movendo-se de uma solução atual para o melhor indivíduo de sua vizinhança até encontrar uma região onde não ocorra mais melhorias. A vizinhança de uma solução 𝑠 ∈ Ω é definida como um conjunto de soluções 𝑉𝑠 ⊆ Ω gerado por um operador ⊕ : Ω → 2|Ω| , tipicamente a soluções vizinhas são bastante similares a 𝑠, uma vez que as operações que são aplicadas à 𝑠 para gerar a vizinhança são geralmente modificações simples e locais, como a troca de uma aresta ou a permutação de dois vértices. Para esclarecer melhor o funcionamento das busca locais, o pseudo-código a seguir mostra o comportamento geral desses métodos. Algoritmo 6: Busca Local Entrada: solução 𝑠 1 início 2 𝑟←∅ 3 enquanto s for melhor que r faça 4 𝑟←𝑠 5 𝑉 ← ⊕(𝑠) 6 𝑠 ← 𝑎𝑟𝑔𝑚𝑖𝑛𝑥∈𝑉 (𝑓 (𝑥)) 7 fim 8 fim 9 retorna s Para o problema do PCVP, foram explorados algumas variações de 2 algoritmos clássicos de busca local para o problema do caixeiro viajante. A primeira variação é uma adaptação do algoritmo de Lin-Kernighan (LIN; KERNIGHAN, 1973) para o PCVP, as outras variações são adaptações do 2-opt (CROES, 1958) para o mesmo problema e modificando-se o tamanho da vizinhança.. 5.1. 2-opt adaptado. O algoritmo de busca local 2-opt é vastamente reconhecido na literatura como uma solução para o problema do caixeiro viajante, principalmente pela sua simplicidade. Ela foi introduzida inicialmente por Croes (1958). A ideia básica é construir uma vizinhança invertendo todos as sub-rotas de uma solução. Para realizar uma adequação ao problema do PCV-P possuindo a simplicidade do 2-opt, é invertido todas as configurações de embarque no intervalo da sub-rota a ser invertida. O pseudo-código 8 explicita tal comportamento..
(39) Capítulo 5. Buscas Locais. 38. Algoritmo 7: 2-opt Adaptado Entrada: Solução 𝐶 1 início 2 Inicialize 𝑠𝑜𝑙 com 𝐶. 3 enquanto existir melhora faça 4 Inicialize a solução temporária com 𝑠𝑜𝑙. 5 para todo (x, y) | 0 ≤ 𝑥, 𝑦 < 𝑁 faça 6 Inicialize a solução 𝑎𝑢𝑥𝑖𝑙𝑖𝑎𝑟 com temporária. 7 Inverta o intervalo de 𝑎𝑢𝑥𝑖𝑙𝑖𝑎𝑟.𝑟𝑜𝑡𝑎𝑥 até 𝑎𝑢𝑥𝑖𝑙𝑖𝑎𝑟.𝑟𝑜𝑡𝑎𝑦 . 8 Inverta o intervalo de 𝑎𝑢𝑥𝑖𝑙𝑖𝑎𝑟.𝑒𝑚𝑏𝑎𝑟𝑞𝑢𝑒𝑥 até 𝑎𝑢𝑥𝑖𝑙𝑖𝑎𝑟.𝑒𝑚𝑏𝑎𝑟𝑞𝑢𝑒𝑦 . 9 Aplique reparação em 𝑎𝑢𝑥𝑖𝑙𝑖𝑎𝑟. 10 se auxiliar é melhor que temporária então 11 Atribua 𝑎𝑢𝑥𝑖𝑙𝑖𝑎𝑟 à 𝑡𝑒𝑚𝑝𝑜𝑟á𝑟𝑖𝑎. 12 fim 13 fim 14 se temporária é melhor que sol então 15 Atribua 𝑡𝑒𝑚𝑝𝑜𝑟á𝑟𝑖𝑎 à 𝑠𝑜𝑙. 16 fim 17 fim 18 fim 19 retorna sol. A reparação citada no pseudo-código pode ser realizada de diversas formas. Entretanto, o método implementado simplesmente remove passageiros da solução de maneira determinística enquanto que a solução continue inviável, essa reparação é descrita com mais detalhes na seção dos algoritmos evolucionários.. 5.1.1. As variações. A primeira adaptação explora todas os possíveis movimentos do 2 − 𝑜𝑝𝑡, ou seja, todas as 𝑂(𝑛2 ) arestas. A segunda variação reduz a quantidade de movimentos a serem analisados, essa redução é feita através da escolha de um ponto de corte fixo aleatório e explorando todas as outras possíveis possibilidades de escolha do segundo ponto de corte, assim, diminui o número de escolhas para 𝑂(𝑛). A última versão seleciona apenas um número fixo de movimentos, que no caso se refere aos melhores movimentos com respeito à qualidade da rota.. 5.2. Lin-Kernighan. O algoritmo de Lin-Kernighan é um dos métodos mais sucedidos para geração de soluções ótimas ou sub-ótimas para o problema do caixeiro viajante para instâncias simétricas (HELSGAUN, 2000). Ele se baseia no conceito de 𝜆-opt, generalização do conceito aplicado ao 2-opt, o algoritmo 𝜆-opt a cada movimento troca 𝜆 arestas. E uma.
Documentos relacionados
Diferente das amostras contendo apenas vanádio como heteroátomo ou magadiita puro silício, que não produziram DEE, este resultado é mais uma evidên- cia que os sítios
O grupo com renda mensal entre dois e dez salários mínimos reúne 995.750 estabelecimentos, 22,6% do total, e o valor bruto anual total de sua produção é da ordem de R$ 16,7 bilhões..
Sendo assim, o Grupo A foi composto com as crianças que realizaram procedimento cirúrgico para tratamento de catarata até 06 meses de idade consideradas, em nosso estudo, de
Acerca da redução de percentual na interessante experiência do Estado do Rio de Janeiro, Santana526 lembra-nos que existem vários exemplos de extrafiscalidade ambiental no Brasil,
No Capítulo 2 são apresentados conceitos de processamento de imagens e visão computacional, operações básicas e filtros utilizados no pré-processamento a fim de melhorar a imagem
Para aperfeiçoar ainda mais o nosso dinâmico sistem a de controle de constitucionalidade das leis, ainda pouco meditado e menos ainda utilizado, com efeitos impactantes
Estágios da flutuação inversa com detalhes da adição de reagentes(Adaptado de Wills, 2016).. Resposta Teor As previsto versus Teor As observado. Representação das
é um espaço integrado à rede municipal de ensino, através dos serviços de suporte pedagógico, de ações e formações no campo da Educação Inclusiva, visando: a Socializar