Problema do Caixeiro Viajante 1 Introdução Minimizar o custo de um ciclo hamiltoniano em um grafo completo (William R. Hamilton,1857,Around The World); Solução por enumeração: R( n ) = ( n - 1 )! Um computador capaz de fazer um bilhão de adições por segundo, para n=20, vai precisar de 21.645.100.408.832.000/(10 9 /19=53 milhões) = 2,3 x 10 9 segundos. Assim: N Rotas/ s (n - 1)! Cálculo total 5 250 milhões 24 insignificante 10 110 milhões 362 880 0.003 seg 15 71 milhões 87 bilhões 20 min 20 53 milhões 1.2 x 10 17 73 anos 25 42 milhões 6.2 x 10 23 470 milhões de anos N Rotas/s n 5 Cálculo total 5 250 milhões 3 125 insignificante 10 110 milhões 100 000 insignificante 15 71 milhões 759 375 0.01 seg 20 53 milhões 3 200 000 0.06 seg 25 42 milhões 9 765 625 0.23 seg
2 Definições Problema TSP(G, c) : Dado um grafo G e um custo c e Q para cada aresta e, determinar um circuito hamiltoniano C que minimize c(c). Simétrico: se a dist(a,b) = dist(b,a) Completo: se existe um caminho direto entre todas as cidades (par de vértices). Suponha que o grafo G, ponderado, é completo. Diz-se que os pesos de suas arestas satisfazem a desigualdade triangular se o C ij C ik + C kj para quaisquer três vértices i,j,k. 3 Aplicações Programação de transporte entre células de manufatura Programação de operação em máquinas de manufatura Otimização de movimento de ferramentas de corte Fabricação de Chips VLSI Otimização de furos em placas de circuitos impressos Problemas de sequenciamento de tarefas e navios Problema de sequenciamento genético Roteamento de entrega postal Cortes de chapas de aço e vidro
4 Formulações o Dantzig-Fulkerson-Johnson: n(n-1) variáveis e O(2 n ) restrições o Miller-Tucker-Zemlin: n 2-1 variáveis e O(n 2 ) restrições min i j c ij x ij, De todas as cidades chega apenas um: i x ij = 1 for all j. Escolhe apenas uma cidade para partir: j x ij = 1 for all i. Subtour inviável: u i u j + 1 + n(1 x ij ), for i = 2,, n, i j, j = 2,,n, x ij {0, 1} for all i, j; u i 0 for all i, onde u i é ordem em que a cidade i é visitada. Assim, se existir uma aresta x ij (=1), então a ordem em que a cidade i é visitada, u i, é uma unidade a menos que a ordem em que a cidade j é visitada, u j. Caso contrário essa diferença é no máximo n. o Claus: (n 3 +n 2 +3n) variáveis e n 3 restrições
5 Formulação MTZ no LINDO min 500 x1,1 + 70.9 x1,2 + 41.6 x1,3 + 29.1 x1,4 + 17.1 x1,5 + 56.1 x1,6 + 55.6 x1,7 + 7.3 x1,8... + 104 x12,10 + 39.4 x12,11 + 500 x12,12 subject to 3] x2,1 + x3,1 + x4,1 + x5,1 + x6,1 + x7,1 + x8,1 + x9,1 + x10,1 + x11,1 + x12,1 = 1 4] x1,2 + x1,3 + x1,4 + x1,5 + x1,6 + x1,7 + x1,8 + x1,9 + x1,10 + x1,11 + x1,12 = 1... 25] x1,12 + x2,12 + x3,12 + x4,12 + x5,12 + x6,12 + x7,12 + x8,12 + x9,12 + x10,12 + x11,12 = 1 26] x12,1 + x12,2 + x12,3 + x12,4 + x12,5 + x12,6 + x12,7 + x12,8 + x12,9 + x12,10 + x12,11 = 1 27] 12 x2,2 <= 11 28] 12 x2,3 + u2 - u3 <= 11 29] 12 x2,4 + u2 - u4 <= 11 30] 12 x2,5 + u2 - u5 <= 11... 143] 12 x12,8 - u8 + u12 <= 11 144] 12 x12,9 - u9 + u12 <= 11 145] 12 x12,10 - u10 + u12 <= 11 146] 12 x12,11 - u11 + u12 <= 11 147] 12 x12,12 <= 11 end inte x1,1 inte x1,2...
6 Heurísticas Heurística do Vizinho Mais Próximo Dado um grafo G(V, E) completo e simétrico o Algoritmo do Vizinho Mais Próximo para construir um circuito hamiltoniano T(G): Escolha aleatoriamente um vértice v V(G) Inclua v em T Seja u o vizinho mais próximo de v que ainda não foi incluído em T Inclua u e a aresta (v,u) em T Faça v=u Se V(T) < V(G) então vá para o passo 3 Inclua a aresta entre o primeiro e o último vértices incluídos O tempo de computação O(n 2 ) para instâncias que satisfazem a desigualdade triangular Guloso em relação ao próximo vértice que será incluído na solução,
Heurística Gulosa Dado um grafo G(V, E) completo e simétrico e os custos c e de cada e E(G), o Algoritmo Guloso para construir um circuito hamiltoniano T de G é o seguinte: Faça V(T) = V(G) Seja e E(G) E(T) tal que c e é mínimo e que sua inclusão não implique na formação de um ciclo em T (minimal spanning tree) ou deixe algum vértice de T com grau maior que 2 Inclua e em E(T) Se E(T) < V(G) então vá para o passo 2 É guloso em relação à próxima aresta. O tempo de computação envolvido ao algoritmo guloso é de e(n 2 log(n), Solução encontrada geralmente é melhor que NN. As heurísticas de construção podem ser usadas para gerar pontos de partida usados por heurísticas de busca local.
Heurística de Busca Local Os algoritmos de busca local são baseados em modificaçãoes simples no circuito. Dado um circuito hamiltoniano, esses algoritmos tentam fazer trocas para que seu comprimento seja reduzido, até que seja impossível reduzi-lo mais (localmente ótimo). o 2-Opt: O movimento básico apaga duas arestas, quebrando o circuito em dois caminhos, e então reconectando esses caminhos da outra maneira possível se somente se a outra maneira possível reduzir o custo. o 3-Opt: O movimento básico apaga onde três arestas, quebrando o circuito em três caminhos, e reconectandoas, dentre as duas formas possíveis, naquela que reduzir mais o custo. As heurísticas k-opt (k>3) possuem custo computacional que não compensa os resultados obtidos.
7 Exemplos
8 Algoritmos genéticos Fuzzy Genetic Algorithm, 1998