O Problema do Caixeiro Viajante Maria do Socorro Nogueira Rangel DCCE Departamento de Ciências da Computação e Estatística e-mail: [email protected] Apoio : http://www.dcce.ibilce.unesp.br/~socorro/ O Problema do Caixeiro Viajante O Presidente, Antônio Castor, da Companhia Ramos de Carvalho quer fazer uma visita às reservas florestais situadas nos estados do Amazonas e Pará, aos depósitos situados nos estados de São Paulo, Bahia, Minas Gerais e Rio de Janeiro. É possível determinar um roteiro de viagem tal que cada reserva e cada depósito sejam visitados apenas uma vez, saindo e retornando à sede da empresa no Rio de Janeiro, e que minimize a distância total percorrida? Be Sal Circuito Hamiltoniano Ma RJ Go SP Figura 1 – Reservas e Depósitos a serem visitados Quantos roteiros existem? • Se o problema considerar n cidades teremos que o número total de roteiros é (n-1)! n n! Tempo 8 40320 1s 10 3628800 54s 11 39916800 12 min 12 479001600 1h 25 min 30 2 . 1032* 9 . 1021 milênios* *Da ordem de 50 3 . 1064* 9 . 1053 milênios* Assim, fica inviável analisar todos os circuitos manualmente! Construção do Modelo: Variáveis Índices i,j = 1,2,3, ...6 os locais onde as reservas (duas) e os depósitos (quatro) estão situados (RJ,SP,Go,Ma,Be e Sal) respectivamente. Variáveis de decisão: xij 1 se a cidade i é visitada antes da j 0 caso contrário. Construção do Modelo: Objetivo OBJETIVO Vamos chamar de cij a distância entre os locais i e j. O objetivo é encontrar o circuito hamiltonino de menor custo. 6 6 min z cij xij i 1 j 1 Construção do Modelo: Restrições Cada local deve ser visitado apenas uma vez. •Saídas da cidade i: xi1 xi 2 xi3 xi 4 xi5 xi6 1, i 1,..., 6 •Chegadas à cidade j x1 j x2 j x3 j x4 j x5 j x6 j 1, j 1,..., 6 Problema do Caixeiro Viajante: Modelo I Sintaxe MPL TITLE Caixeiro; INDEX no =(RJ,SP,Go,Ma,Be e Sal); origem = no; destino = no; DATA custo[origem, destino] := EXCELRANGE (“caixeiro.xls", custo); DECISION VARIABLES x[origem, destino] WHERE(origem <> destino); MODEL MIN T_Cost = SUM(origem, destino: custo * x); SUBJECT TO partida[no] : SUM(origem=no, destino: x) =1; chegada[no] : SUM(origem, destino=no: x) =1; BINARY x END Problema do Caixeiro Viajante: Modelo I Caixeiro2.lp \ Generated with the MPL Modeling System \ Constraints: 37, \ Variables: 36, Integers: 30 \ Nonzeros: 135 \ Density: 10 % MINIMIZE TotalCos: xRJAm + xRJPa + xRJBa + xRJGo + xRJSP + xAmRJ + xAmPa + xAmBa + xAmGo + xAmSP + xPaRJ + xPaAm + xPaBa + xPaGo + xPaSP + xBaRJ + xBaAm + xBaPa + xBaGo + xBaSP + xGoRJ + xGoAm + xGoPa + xGoBa + xGoSP + xSPRJ + xSPAm + xSPPa + xSPBa + xSPGo SUBJECT TO partidRJ: xRJAm + xRJPa + xRJBa + xRJGo + xRJSP = 1 partidAm: xAmRJ + xAmPa + xAmBa + xAmGo + xAmSP = 1 partidPa: xPaRJ + xPaAm + xPaBa + xPaGo + xPaSP = 1 partidBa: xBaRJ + xBaAm + xBaPa + xBaGo + xBaSP = 1 partidGo: xGoRJ + xGoAm + xGoPa + xGoBa + xGoSP = 1 partidSP: xSPRJ + xSPAm + xSPPa + xSPBa + xSPGo = 1 chegadRJ: xAmRJ + xPaRJ + xBaRJ + xGoRJ + xSPRJ = 1 chegadAm: xRJAm + xPaAm + xBaAm + xGoAm + xSPAm = 1 chegadPa: xRJPa + xAmPa + xBaPa + xGoPa + xSPPa = 1 chegadBa: xRJBa + xAmBa + xPaBa + xGoBa + xSPBa = 1 chegadGo: xRJGo + xAmGo + xPaGo + xBaGo + xSPGo = 1 chegadSP: xRJSP + xAmSP + xPaSP + xBaSP + xGoSP = 1 Optimal solution found MIN Z = 170.0000 MACROS Macro Name Values ----------------------------------------------Custo_Total 170.0000 ----------------------------------------------DECISION VARIABLES VARIABLE x[origem,destino] : origem destino Activity ----------------------------------------------------Rio SP 1.0000 SP Go 1.0000 Go Rio 1.0000 Ma Be 1.0000 Be Sal 1.0000 Sal Ma 1.0000 ----------------------------------------------------- Construção do Modelo: Restrições As restrições do problema da designação permitem a seguinte solução: Qual é o problema desta solução? Be Ba Subrotas!!!! Ma RJ Go SP Com este roteiro não conseguimos passar por todas as cidades apenas uma vez! Reformulação I - Eliminação de subrotas: Miller,Tucker e Zemlin Para eliminar as subrotas, vamos acrescentar as seguintes variáveis: u i = ordem em que a cidade i será visitada i 2,...n e as seguintes restrições: ui u j nxij n 1 i, j 2,...,6; i j. Existem (n 1) 2 restrições para eliminação de subrotas. Reformulação I : Modelo de otimização inteiro misto: 6 6 min z cij xij i 1 j 1 sujeito a xi1 xi 2 xi 3 xi 4 xi 5 xi 6 1, i 1,...,6 x1 j x2 j x3 j x4 j x5 j x6 j 1, j 1,...,6 ui u j 6 xij 5, i j; i 2,...,6; j 2,...,.6; xij 0 / 1, i, j 1 ui 5, i 2,...,6 Reformulação II - Eliminação de subrotas: Dantzig, Fulkerson e Johnson Vamos considerar o conjunto de cidades incluídas em uma das subrotas obtidas na solução do Modelo I: S={Ma, Be, Sal} Se limitarmos o número de variáveis associadas a essas cidades que podem receber valor diferente de zero a 2, temos a seguinte restrição: xMa,Be + xMa,Sal + xBe,Ma + xBe,Sal + xSal,Ma + xSal,Be <= 2 Se incluirmos esta restrição ao Modelo I, eliminamos a sub-rota que inclui as cidades acima, pois a solução anterior não é viável para o novo modelo. Reformulação II - Eliminação de subrotas: Dantzig, Fulkerson e Johnson Como fazer no caso geral? Dado um subconjunto de cidades S N . Podemos limitar o número de variáveis associadas a essas cidades que podem receber valor diferente de zero a: S 1 se incluirmos a seguinte restrição ao Modelo I: x iS jS ij S 1. Impedimos assim soluções associadas a sub-rotas. Reformulação II : Modelo de otimização binária min z c x n n i 1 j 1 ij ij sujeit o a n x j 1 ij n x i 1 ij 1 i 1,...,n 1 j 1,...,n x iS jS ij S 1 xij 0 / 1, i, j S {1...n} Existem (2n 2) restrições para eliminação de subrotas. Reformulação II : Modelo de otimização binária • Número exponencial de restrições para eliminação de subrotas. O que fazer? (2n 2) • Gerar apenas as que são estritamente necessárias! Algoritmo de Planos de Corte • Resolve o Problema da Designação associado(Relaxação) • Se a solução ótima é um circuito hamiltoniano (CH), PARE. • Enquanto (it <nmax) ou (solução é um CH) faça: • Gere inequações para eliminar sub-rotas e acrescente ao Problema Atual. • Resolva o novo Problema. Problema do Caixeiro Viajante Applegate, Bixby, Chvátal, Cook, 2003 (um milhão de Cidades) Branch and Cut Optima, v. 61, pg21 http://www.ise.ufl.edu/~optima/