View
213
Download
0
Category
Preview:
Citation preview
Universidade Estadual de Maringá Centro de Tecnologia Departamento de Informática Curso de Engenharia de Produção
Implementação de um Algoritmo Genético para uma Aplicação do Problema do Caixeiro Viajante
Everton Luiz de Melo
TCC-EP-33-2006
Maringá - Paraná Brasil
ii
Universidade Estadual de Maringá Centro de Tecnologia
Departamento de Informática Curso de Engenharia de Produção
Implementação de um Algoritmo Genético para uma Aplicação do Problema do Caixeiro Viajante
Everton Luiz de Melo
TCC-EP-33-2006
Trabalho de Conclusão de Curso apresentado ao Curso de Engenharia de Produção, do Centro de Tecnologia, da Universidade Estadual de Maringá – UEM. Orientadora: Profa. Dra. Márcia Marcondes Altimari Samed
Maringá - Paraná 2006
iii
Everton Luiz de Melo
Implementação de um Algoritmo Genético para uma Aplicação do Problema do Caixeiro Viajante
Este exemplar corresponde à redação final do Trabalho de Conclusão de Curso aprovado como requisito parcial para obtenção do grau de Bacharel em Engenharia de Produção da Universidade Estadual de Maringá, pela comissão formada pelos professores:
________________________________________ Orientadora: Profa. Dra. Márcia Marcondes Altimari Samed
Departamento de Informática, CTC
________________________________________ Prof. MSc. Daily Morales
Departamento de Informática, CTC
Maringá, novembro de 2006
v
AGRADECIMENTOS
A Deus, aos meus pais, Valdenir e Eliza, e a todos meus professores, citando Elza, Cleuza,
Rubens e Márcia.
vi
RESUMO
Este trabalho apresenta estudos relacionados ao clássico Problema do Caixeiro Viajante, um problema de grande importância na Pesquisa Operacional, uma das áreas da Engenharia de Produção. O problema se constitui na elaboração de rotas de custo mínimo que devem percorrer todo um conjunto de pontos, sem repetição dos mesmos, retornando ao ponto de partida, o que significa determinar um caminho. O objetivo das pesquisas de resolução deste problema é a redução de custos relacionados, principalmente, a transporte. O texto traz uma revisão da literatura relacionada ao tema onde apresenta conceitos, definições e fundamentos gerais e específicos da Pesquisa Operacional e deste problema, respectivamente. Os escritos utilizam também na sua elaboração os resultados obtidos por trabalhos realizados anteriormente que norteiam e servem como parâmetro para seu desenvolvimento. O presente trabalho apresenta a metodologia empregada na busca de se identificar o melhor método e a melhor ferramenta a se empregar na resolução do Problema do Caixeiro Viajante, a partir de um grupo de métodos e de ferramentas selecionados previamente. Os estudos abordam a utilização de ferramentas disponíveis no mercado e a implementação de um método heurístico. Por fim, este trabalho apresenta os resultados obtidos durante seu desenvolvimento bem como considerações a respeito dos mesmos, identificando as melhores opções a serem aplicadas em casos similares. Palavras-chave: Problema do Caixeiro Viajante, Otimização, Heurísticas, Algoritmos
Genéticos.
vii
SUMÁRIO
DEDICATÓRIA................................................................................................................................... iv
AGRADECIMENTOS...........................................................................................................................v
LISTA DE ILUSTRAÇÕES................................................................................................................ ix
LISTA DE ABREVIATURAS E SIGLAS ...........................................................................................x
1 INTRODUÇÃO .............................................................................................................................1 1.1 Apresentação...........................................................................................................................1 1.2 Objetivos.................................................................................................................................2
1.2.1 Objetivo geral.....................................................................................................................2 1.2.2 Objetivos específicos ..........................................................................................................2
1.3 Justificativas ...........................................................................................................................3 2 REVISÃO DA LITERATURA.....................................................................................................4
2.1 Tomada de Decisão e Otimização...........................................................................................4 2.1.1 Modelagem .........................................................................................................................6 2.1.2 Programação matemática ..................................................................................................8 2.1.3 Grafos...............................................................................................................................11
2.2 Heurísticas ............................................................................................................................15 2.2.1 Algoritmos Genéticos .......................................................................................................16 2.2.2 Busca Tabu .......................................................................................................................20 2.2.3 Simulated Annealing.........................................................................................................21 2.2.4 Algoritmos Híbridos .........................................................................................................22
2.3 O Problema do Caixeiro Viajante .........................................................................................22 2.3.1 Equacionamentos .............................................................................................................24 2.3.2 Variações..........................................................................................................................26 2.3.3 Aplicações ........................................................................................................................27
2.4 Ferramentas...........................................................................................................................28 2.4.1 Solver................................................................................................................................28 2.4.2 Lingo.................................................................................................................................28 2.4.3 GAMS ...............................................................................................................................29
3 METODOLOGIA........................................................................................................................30 3.1 A Empresa ............................................................................................................................30 3.2 O Problema Estudado ...........................................................................................................30 3.3 Modelagem do Problema ......................................................................................................32 3.4 Validação do Modelo............................................................................................................33 3.5 Desenvolvimento da ferramenta ...........................................................................................34
3.5.1 População inicial .............................................................................................................35 3.5.2 Cruzamentos .....................................................................................................................36 3.5.3 Mutações ..........................................................................................................................38 3.5.4 Gerações...........................................................................................................................39 3.5.5 Execuções .........................................................................................................................39 3.5.6 Validação do algoritmo....................................................................................................40
3.6 Coleta de dados.....................................................................................................................41 3.7 Máquina utilizada .................................................................................................................41
4 RESULTADOS............................................................................................................................42
5 CONCLUSÕES............................................................................................................................53
viii
REFERÊNCIAS ...................................................................................................................................55
APÊNDICE A.......................................................................................................................................59
APÊNDICE B .......................................................................................................................................61
APÊNDICE C.......................................................................................................................................63
ANEXO A .............................................................................................................................................65
ix
LISTA DE ILUSTRAÇÕES
FIGURA 1: MODELAGEM E TOMADA DE DECISÃO....................................................................................7 FIGURA 2: EXEMPLO DE GRAFO.............................................................................................................12 FIGURA 3: GRAFO NÃO ORIENTADO E GRAFO ORIENTADO. ...................................................................12 FIGURA 4: GRAFO DESCONEXO..............................................................................................................13 FIGURA 5: GRAFO COM PONTO DE ARTICULAÇÃO.................................................................................13 FIGURA 6: GRAFO E UM PERCURSO HAMILTONIANO. ............................................................................14 FIGURA 7: GRAFO E LISTA ENCADEADA EQUIVALENTE.........................................................................14 FIGURA 8: GRAFO E MATRIZ DE ADJACÊNCIA CORRESPONDENTE.........................................................15 FIGURA 9: GRAFO E MATRIZ DE INCIDÊNCIA EQUIVALENTE. ................................................................15 FIGURA 10: CRUZAMENTO. ...................................................................................................................18 FIGURA 11: MUTAÇÃO. .........................................................................................................................19 FIGURA 12: PASSOS DE UM AG. ............................................................................................................20 FIGURA 13: EVOLUÇÃO DA POPULAÇÃO...............................................................................................20 FIGURA 14: SUPERINTENDÊNCIA NOROESTE E SUAS GERÊNCIAS..........................................................30 FIGURA 15: MATRIZ DE ADJACÊNCIAS DO PROBLEMA..........................................................................32 FIGURA 16: INDIVÍDUO REPRESENTANDO UMA SOLUÇÃO DO PCVS. ...................................................36 FIGURA 17: PRIMEIRA PARTE DO CRUZAMENTO. ..................................................................................36 FIGURA 18: SEGUNDA ETAPA DO CRUZAMENTO...................................................................................37 FIGURA 19: CRUZAMENTO CONCLUÍDO. ...............................................................................................37 FIGURA 20: MUTAÇÃO EFETUADA. .......................................................................................................38 FIGURA 21: FUNCIONAMENTO DO ALGORITMO. ...................................................................................40 FIGURA 22: DADOS SOBRE A RESOLUÇÃO DO MODELO ALTERADO......................................................42 FIGURA 23: SOLUÇÃO E TEMPO DE EXECUÇÃO. ....................................................................................43 FIGURA 24: TELA EXIBIDA PELO ALGORITMO APÓS EXECUÇÃO. ..........................................................51 FIGURA 25: MELHOR SEQÜÊNCIA ENCONTRADA. .................................................................................52 GRÁFICO 1: ÓTIMOS LOCAIS E ÓTIMO GLOBAL. ......................................................................................6 GRÁFICO 2: EVOLUÇÃO DOS CUSTOS EM RELAÇÃO AO NÚMERO DE FILHOS. .......................................45 GRÁFICO 3: MELHORA DO CUSTO NO DECORRER DAS GERAÇÕES. .......................................................47 GRÁFICO 4: CUSTOS DE DEZ EXECUÇÕES..............................................................................................48 QUADRO 1: RESULTADOS DA RESOLUÇÃO DO PROBLEMA APRESENTADO PELO GAMS. 47 QUADRO 2: RESOLUÇÃO DO PROBLEMA DA EMPRESA ENVOLVENDO 42 CIDADES. 49 QUADRO 3: RESOLUÇÃO DO PROBLEMA DA EMPRESA ENVOLVENDO 42 CIDADES. 50
x
LISTA DE ABREVIATURAS E SIGLAS AG Algoritmos Genéticos
GAMS General Algebraic Modeling System
PCV Problema do Caixeiro Viajante
PCVB Problema do Caixeiro Viajante com Backhauls
PCVCP Problema do Caixeiro Viajante com Coleta de Prêmios
PCVG Problema do Caixeiro Viajante Generalizado
PCVJT Problema do Caixeiro Viajante com Janelas de Tempo
PCVS Problema do Caixeiro Viajante Simétrico
PL Programação Linear
PO Pesquisa Operacional
PPL Problema de Programação Linear
SOBRAPO Sociedade Brasileira de Pesquisa Operacional
TSP Travelling Salesman Problem
1
1 INTRODUÇÃO
1.1 Apresentação
O mercado cada vez mais competitivo exige das empresas e instituições decisões eficazes
frente aos problemas que surgem no decorrer do processo de gerenciamento das atividades.
Determinar o caminho a se seguir para que melhores resultados sejam alcançados se constitui
no papel principal da Engenharia de Produção. Para auxiliar a busca das melhores soluções os
engenheiros de produção utilizam diversas ferramentas, dentre elas a Pesquisa Operacional
(PO), também conhecida como Operational Research.
A PO, impulsionada e difundida pelo avanço da tecnologia dos microcomputadores, se faz
importante devido à eficiência dos resultados que apresenta em tempo economicamente
viável. Através de modelos matemáticos, como mostram Hillier e Lieberman (2001), os
problemas são estudados e soluções ótimas ou próximas de um valor ótimo são encontradas
em prazo aceitável, minimizando perdas e custos ou maximizando rendimentos e lucros. Entre
os problemas estudados podem ser citados os que envolvem corte, empacotamento,
dimensionamento de lotes, mistura e roteamento, sendo este último objeto de estudo deste
trabalho.
Atualmente, as margens de lucro do setor produtivo são mínimas e o tratamento dado aos
problemas relacionados ao transporte é fator determinante para a permanência ou não de uma
companhia no mercado. A escolha adequada de sua localização geográfica, considerando
clientes e fornecedores, abordada por Martins e Laugeni (2005) e a elaboração de um plano
racional de distribuição de seus produtos, estabelecendo rotas de custo mínimo, são
imprescindíveis para que os ganhos obtidos nas linhas de produção não sejam absorvidos
pelos gastos com transporte. Como mencionam Caixeta et al. (apud Iannoni e Morabito,
2005) estes valores representam grande parte dos custos operacionais. Além disso, como
citam Campos (1992) e Werkema (1995), a entrega no tempo certo é um dos fatores que
aumenta a satisfação dos clientes e, por conseguinte, gera fidelidade.
Dentre os problemas abordados pela PO que envolvem transporte e roteamento, um dos mais
tradicionais é o Problema do Caixeiro Viajante (PCV) ou Travelling Salesman Problem
(TSP). Tal problema se resume em encontrar a melhor seqüência a ser executada, na tarefa de
2
visitar um determinado conjunto de pontos e retornar à origem, de modo a minimizar o
caminho percorrido e, por conseguinte, o custo.
Dessa forma, a minimização dos custos relativos a transporte tem sido um dos pontos mais
atacados pela Engenharia de Produção, que procura a maximização global dos resultados ao
estudar como melhorar cada uma das etapas do processo produtivo. Assim, estudando
problemas relacionados a roteamento, este trabalho espera gerar contribuições às atividades
produtivas.
1.2 Objetivos
1.2.1 Objetivo geral
O trabalho a ser desenvolvido tem como objetivo geral pesquisar soluções para o PCV através
da análise dos resultados de métodos previamente selecionados.
1.2.2 Objetivos específicos
Além do objetivo geral, o trabalho tem o objetivo de efetuar comparações entre os métodos
estudados. Assim, os objetivos específicos se constituem em:
a) realizar uma revisão bibliográfica dos problemas relacionados a transporte e suas
soluções;
b) selecionar e comparar métodos de solução desses problemas;
c) identificar os programas, ou seja, as ferramentas e os métodos a serem utilizados na
resolução do problema, assim como as abordagens mais adequadas;
d) definir uma aplicação prática e propor uma solução eficaz para o PCV.
1.3 Justificativas
As justificativas deste trabalho se embasam na imperativa necessidade das empresas,
principalmente do setor industrial, precisarem de ferramentas que as auxiliem a tomar
decisões racionais de forma rápida e eficiente, sob pena de colocar em risco sua
sobrevivência. Assim, este trabalho poderá servir como referência para a escolha da
ferramenta ou do método a ser empregado na resolução de problemas semelhantes.
A organização do trabalho se fez em capítulos, da seguinte maneira:
Capítulo 1 – Neste capítulo o trabalho é descrito e são apresentados seus objetivos, suas
justificativas, seus limites e sua estruturação.
Capítulo 2 – Traz os conceitos básicos e aplicações pesquisadas na literatura que
fundamentam este trabalho.
Capítulo 3 – É apresentada a metodologia aplicada durante o desenvolvimento do trabalho.
Capítulo 4 – Contém os resultados obtidos a partir do emprego da metodologia, constante no
capítulo anterior.
Capítulo 5 – São apresentadas as considerações finais a respeito do trabalho desenvolvido.
4
2 REVISÃO DA LITERATURA
Ao contrário do ponteiro de uma bússola, o caminho a ser seguido por uma organização sofre
redirecionamentos constantes. Para cada contexto uma direção ou outra pode ser, ou parecer,
mais viável. Independente da opção escolhida, o objetivo de quem opta por ela é o de obter os
melhores resultados possíveis. Porém, por mais experiente e preparado que seja o decisor, a
incerteza sobre o sucesso da sua escolha existe e, quando possível, deve ser minimizada ou até
mesmo eliminada.
Assim, uma forma de se diminuir as chances de que uma escolha incorra em insucesso ou que
suas conseqüências não atinjam as expectativas é utilizar a PO. Tendo sua origem nos anos
quarenta, durante a segunda guerra mundial, foi utilizada inicialmente pelos aliados para
resolver problemas militares de natureza logística, tática e estratégica, conforme explica a
Sociedade Brasileira de Pesquisa Operacional (SOBRAPO). Sendo uma ferramenta que pode
ser extremamente útil nos processos decisórios, minimizando riscos e incertezas acerca das
decisões, ela se firma como uma ciência fundamental para empresas de diversas áreas.
2.1 Tomada de Decisão e Otimização
A tomada de decisão, conforme afirma Lachtermacher (2004), pode ser definida como um
processo no qual se identifica um problema ou uma oportunidade e se define uma linha de
ação a seguir. Comumente este processo implica em situações complexas, pois envolve
incertezas sobre a escolha a ser feita, sobre seus impactos e sobre os objetivos a serem
alcançados. Também podem existir conflitos entre os decisores devido a seus valores e
objetivos. Além disso, a presença de múltiplos critérios e a possível falta de qualidade das
informações são fatores complicadores. Assim, existem diferentes abordagens que buscam
facilitar a escolha correta.
A PO oferece meios pelos quais o processo de se tomar uma decisão pode ser feito de maneira
racional, onde são alcançados resultados ótimos, ou próximos de um valor ótimo. Para isso
modelos matemáticos são criados a partir do problema real e com eles se obtém os resultados
que são aplicados no problema real. Dessa maneira, os recursos podem ser empregados com
extrema eficiência e os resultados alcançados podem ser os melhores possíveis, conseguindo-
5
se alcançar a otimização. Tal abordagem trabalha com total objetivismo e por isso recebe o
nome de paradigma racionalista, conforme Ensslin et al. (2001).
Justamente pelo extremo objetivismo e racionalismo da PO é defendida a idéia de que uma
outra abordagem, onde aspectos subjetivos são considerados, pode ser mais adequada,
especialmente quando se trabalha com múltiplos critérios e com informações difíceis de se
mensurar numericamente. A abordagem proposta seria a do construtivismo, advinda do
paradigma construtivista, em contraste com o paradigma racionalista. A abordagem
construtivista é aplicada a problemas complexos e envolve diversas pessoas, denominadas
atores. Através de mapas cognitivos os envolvidos chegam a uma solução que é considerada
um apoio à tomada de decisão, e não é necessariamente uma solução ótima.
Embora seja evidente que determinados critérios e problemas são de difícil tradução para
modelos matemáticos, os resultados oferecidos pela abordagem racionalista mostram que sua
eficiência é inquestionável. Assim, como mostram Goldbarg e Luna (2000), quando possível,
a aplicação da PO é um caminho pelo qual a tomada de decisão pode ser conduzida a
resultados otimizados.
Seguindo o paradigma racionalista, segundo Papadimitriou e Steiglitz (1982), uma instância
de um problema de otimização consiste em um par (F, c), representado conforme segue:
1: RFc → (1)
O problema consiste em encontrar uma solução f ∈ F, para o qual:
Fyycfc ∈∀≤ )()( (2)
Onde se considera:
F Um conjunto qualquer dos pontos viáveis;
c A função de custo;
R1 Reta dos números reais, a qual pertence à região de factibilidade;
f Um conjunto solução para o problema;
y Um conjunto qualquer pertencente a F.
Papadimitriou e Steiglitz (1982) também escrevem sobre a vizinhança, que é a região na qual
a solução é procurada. Os autores apresentam os conceitos de ótimo local e global. Um ótimo
6
local ocorre quando se encontra em um determinado ponto uma solução melhor que as
soluções encontradas nos pontos adjacentes a ele. Um ótimo global, ou seja, um valor ótimo
de fato para um problema, é aquele que apresenta a melhor solução dentro de toda a região
factível. O Gráfico 1 apresenta, através de uma curva, uma dada região factível com ótimos
locais, pontos A e C, e ótimo global, ponto B.
Gráfico 1: Ótimos locais e ótimo global.
Fonte: Adaptado de Papadimitriou e Steiglitz (1982).
2.1.1 Modelagem
Modelar significa representar, com menor ou maior fidelidade, uma situação real. Segundo
Lachtermacher (2004), existem basicamente três tipos de modelos, sendo, os modelos físicos,
os modelos análogos e os modelos matemáticos ou simbólicos. Na PO a construção de um
modelo matemático é um passo fundamental no processo de busca da solução de um
problema.
Modelos de maior complexidade, segundo Goldbarg e Luna (2000), devem ser elaborados em
etapas. Em primeiro lugar deve ser feita a formulação ou tradução do problema real para o
ambiente de modelagem, onde são definidas as variáveis envolvidas, a função objetivo e as
restrições do problema. Depois vem a etapa de construção do modelo que envolve a
elaboração da estrutura de entrada e saída de dados, as fórmulas de inter-relação e os tempos.
A terceira parte envolve a execução das análises e engloba a análise da sensibilidade da
solução, a verificação da precisão dos dados, a verificação da estabilidade computacional e o
levantamento de outros detalhes do modelo. Finalmente, vem a etapa de implementação dos
resultados e atualização do modelo. A Figura 1 ilustra este processo em uma organização.
1
c
F 0
CB
A
7
Situação Gerencial Modelo Resultado Decisão
Mundo Simbólico
Mundo Real
Figura 1:Modelagem e tomada de decisão.
Fonte: Adaptado de Lachtermacher (2004).
A ilustração mostra que dados reais são inseridos no modelo que, após o processamento,
chega a resultados que são aplicados a uma situação real. Deste modo, quanto mais próximo o
modelo estiver da realidade e quanto mais precisos forem os dados de entrada, mais eficientes
serão seus resultados. Da mesma forma, quanto mais próximo da realidade estiver, mais
complexo será o modelo. Assim o equilíbrio entre o nível de detalhamento e a complexidade
do modelo é fundamental para se chegar a resultados viáveis, em tempos de processamento
aceitávies.
As equações a seguir, conforme Lachtermacher (2004), formam um modelo matemático
chamado de problema de otimização linear:
Maximizar/Minimizar nn xcxcxcZ +++= K2211 (3)
Sujeito a 11212111 bxaxaxa nn =+++ K
22222121 bxaxaxa nn =+++ K (4)
MMMM mnmnmm bxaxaxa =+++ K2211
0,,, 21 ≥nxxx K (5)
Onde se considera:
aij, i=1,...,m, j=1,...,n Números conhecidos, relacionados a restrições;
bi, i=1,...,m Números conhecidos, relacionados a restrições;
cj, j=1,...,n Números conhecidos, relacionados a algum critério;
x1, x2,..., xn As variáveis do problema.
O mesmo problema pode ser representado na forma reduzida:
8
Maximizar/Minimizar ∑=
=n
jjj xcZ
1 (6)
Sujeito a i
n
jjij bxa ≤∑
=1 mi ,,2,1 K= (7)
0,,, 21 ≥nxxx K (8)
A Equação (3) tem como equivalente à Equação (6), representando a função objetivo do
modelo. A Equação (4) tem a Equação (7) como equivalente, representando as restrições do
problema. A Equação (5) se equivale a Equação (8) e representa as condições de não-
negatividade ou restrições de sinal.
2.1.2 Programação matemática
Formulado o modelo matemático de um problema de otimização linear, a Programação Linear
(PL) constitui, de acordo com Caixeta-Filho (2004), na aplicação de técnicas aprimoradas de
resolução de sistemas de equações lineares, onde são feitas sucessões sucessivas de matrizes,
e onde é considerada uma equação linear adicional que representa o comportamento a ser
otimizado.
Para a PL, Lachtermacher (2004) apresenta quatro teoremas. O primeiro diz que o conjunto
formado por todas as soluções viáveis de um modelo de PL é convexo, ou seja, qualquer reta
traçada entre duas soluções está contida nesse conjunto. O segundo afirma que toda solução
compatível básica do sistema é um ponto extremo do conjunto de soluções viáveis. O terceiro
assegura que se uma função objetivo possui um ponto ótimo finito, este ponto é um ponto
extremo do conjunto das soluções viáveis. O último garante que se uma função objetivo
assume valor ótimo em dois pontos do conjunto de soluções viáveis, ela o assume sobre
qualquer ponto do segmento de reta no qual os pontos estão, ou seja, sobre toda a aresta do
polígono.
Dessa maneira, para que se alcance um resultado, Caixeta-Filho (2004) demonstra alguns
métodos que podem ser empregados. Um método usado para sistemas com duas equações
lineares é o método algébrico por adição onde, após uma das equações ser multiplicada por
um escalar real e ser somada a outra, resta somente uma incógnita. Outro é o método
9
algébrico por substituição, no qual depois de isolar uma variável, ela é substituída na outra
equação pela relação obtida. Também é possível traçar as duas retas representadas pelas
equações num plano cartesiano e, no ponto em que se cruzam, encontrar a solução.
Para problemas que possuam mais de duas equações Caixeta-Filho (2004) mostra que se pode
usar a Regra de Cramer ou o Método de Gauss-Jordan. Neste, após derivações das equações e
de combinações lineares das equações originais, se chega a um sistema com formato de matriz
identidade e, através das operações com matrizes, se encontra a solução.
Uma outra forma de se obter os resultados é através do método gráfico. Lachtermacher (2004)
explana que nesse método as retas representadas pelas equações das restrições e pelas
condições de não negatividade são traçadas em um plano cartesiano. Depois, a partir de
valores estimados, se traça a reta que representa a função objetivo. A solução ótima é a que se
encontra no ponto, ou segmento de reta, em que a reta da função objetivo toca primeiramente
a área de solução viável. O Gráfico 2 ilustra a região de soluções viáveis, delimitada à
esquerda e abaixo pelas condições de não-negatividade. À direita e acima existem três retas
representando restrições que delimitam a área de solução viável. A reta da função objetivo se
encontra acima e à direita da área de soluções viáveis e se desloca em sua direção. O primeiro
ponto dessa região a ser alcançado pela reta da função objetivo é onde se encontra a solução
ótima, neste caso de um problema de maximização.
Gráfico 2: Resolução pelo método gráfico.
Fonte: Adaptado de Goldbarg e Luna (2000). Como afirmam Goldbarg e Luna (2000), um outro método que se destaca como umas das
grandes contribuições à programação matemática do século XX, por ser um método
extremamente eficiente para a solução de sistemas lineares, é o algoritmo Simplex. O método
Soluções viáveis
x1
x2
Restrição 2 Restrição 1
Restrição 3
Condição de não-negatividade de x2
Condição de não-negatividade de x1
Função objetivo de maximização
1 2 3 4 5 6 7 8 9 10 11
Solução ótima
0
1
2
3
4
5
6
10
utiliza ferramentas da álgebra linear para, através de iterações, encontrar a solução ótima de
um Problema de Programação Linear (PPL). Segundo Caixeta-Filho (2004) o método tem
como base as premissas de Gauss-Jordan.
Para encontrar a solução ótima, conforme Goldbarg e Luna (2000), o algoritmo parte de uma
solução viável do sistema de equações do PPL, geralmente localizada em um extremo do
conjunto formado pelas soluções viáveis, ou seja, de um vértice. A partir desse ponto, o
método procura soluções viáveis melhores ou iguais nos demais vértices, até que chega à
solução ótima. Papadimitriou e Steiglitz (1982) descrevem o algoritmo Simplex e
demonstram que através do processo de pivoteamento, utilizando o formato tabular, o método
pode conduzir à solução ótima.
A programação matemática, como cita Caixeta-Filho (2004), também envolve problemas que
possuem características não-lineares. Essas características pode estar presentes na função
objetivo ou fazer parte desde uma até muitas das restrições. Dessa maneira, cada problema
assume características bastante particulares. Por esse motivo na programação não-linear não
existe um algoritmo universal que encontre soluções, como ocorre com o algoritmo Simplex
na PPL.
Para a resolução de problemas de programação não-linear Caixeta-Filho (2004) apresenta o
método do multiplicador de Lagrange. Esse multiplicador, associado à função objetivo e à
função de restrição, forma o Lagrangeano. O processo permite se chegar a expressões
alternativas às expressões originais do problema com resolução mais simples. Lanchtermacher
(2004) apresenta diversos exemplos de problemas de otimização com características não-
lineares resolvidos com o auxílio de planilha eletrônica.
Um outro conjunto de problemas de programação matemática apresentado por Papadimitriou
e Steiglitz (1982) se difere da PL apresentada por possuir uma ou mais variáveis de decisão
representadas apenas por valores inteiros. Está é a programação inteira. Ela é dita
programação inteira total se todas as variáveis de decisão são do tipo inteiro e mista se
possuem variáveis de decisão do tipo inteiro e do tipo real.
11
Lachtermacher (2004) afirma que, para problemas de grande porte, uma solução aceitável é
efetuar a sua resolução como se fosse um PPL e truncar o valor encontrado para o inteiro mais
próximo. Porém, para problemas menores, este procedimento normalmente leva a resultados
inaceitáveis. O PPL que se associa a cada problema de programação inteira é chamado de
problema relaxado. Recebe esta denominação por ter as mesmas características do problema
original com a diferença de trabalhar com valores fracionados.
Para a resolução de problemas de programação inteira, Caixeta-Filho (2004) apresenta o
método Branch-and-Bound, um algoritmo de bifurcação e limite. A partir da solução do
problema relaxado é determinado um limite para a solução ótima do problema de
programação inteira. Papadimitriou e Steiglitz (1982) demonstram que o método executa
sucessivas divisões da área formada pelo conjunto das soluções do problema relaxado e, para
cada uma delas, encontra seu limite. O processo segue até que cada divisão tenha como limite
da solução um ponto de valor ou valores inteiros ou então até que a divisão não compreenda
nenhuma solução viável ao problema original.
Além do método Branch-and-Bound, Goldbarg e Luna (2000) apresentam a técnica de
programação dinâmica que é utilizada para processos de decisão multiestágios. Os autores
mostram que problemas como o de elaboração de um caminho pode ser tratado em estágios,
do fim do trajeto para o início, sendo que a cada estágio o trecho mais eficiente é escolhido, se
obtendo, ao final do processo, um caminho ótimo.
2.1.3 Grafos
Em inúmeros problemas, a otimização está associada às alternativas de conexão entre diversos
pontos. Estes pontos podem representar localidades de uma rota, facilidades de clientes,
máquinas a serem seqüenciadas, ou seja, podem estar envolvidos em diversas situações, como
mostram Goldbarg e Luna (2000). Nesses tipos de problema uma topologia adequada ao
modelo precisa ser usada, assim como formas de organizar as configurações dessa topologia e
critérios de escolha dessas configurações. Tais situações podem ser representadas com
sucesso através de grafos já que estes facilitam a organização e a compreensão do problema,
possibilitando maior entendimento por parte do decisor.
12
Como explicam Papadimitriou e Steiglitz (1982), um grafo G é um par G=(V, E), no qual V é
um conjunto discreto finito de nós ou vértices e E possui elementos denominados como
arestas que são determinados a partir dos elementos de V, os ligando dois a dois, havendo um
em cada extremidade. A Figura 2 apresenta o grafo G=({v1,v2,v3,v4},{[v1,v2], [v2,v3], [v3,v4],
[v4,v2], [v3,v1]}).
Figura 2:Exemplo de grafo.
Como aborda Boaventura Netto (1996), a cada aresta pode ser atribuído um valor que
represente custo, distância, capacidade ou outra informação, formando um grafo valorado. O
autor também afirma que grafos podem ser orientados, o mesmo que direcionados, ou não
orientados. Nos grafos orientados cada aresta, também chamada de arco, possui um sentido
determinado, o que, graficamente, é representado pelo uso de setas como arcos. A Figura 3
apresenta dois grafos, um não orientado e outro orientado, respectivamente.
Figura 3:Grafo não orientado e grafo orientado.
Boaventura Netto (1996) afirma que um grafo é dito completo se todos seus vértices estão
associados dois a dois através de arestas. Ele é dito não conexo ou desconexo se possuir ao
menos um par de vértices não unidos por uma cadeia. Goldbarg e Luna (2000) escrevem que
um grafo é conexo se, para todo par de vértices, há ao menos uma cadeia entre eles. A Figura
4 apresenta um grafo desconexo.
v1 v2
v3 v4
13
Figura 4:Grafo desconexo. Goldbarg e Luna (2000) definem ponto de articulação como um vértice que, se removido,
transforma um grafo conexo em desconexo. A Figura 5 apresenta um grafo com um ponto de
articulação, o vértice d. Um grafo sem pontos de articulação é dito não separável ou biconexo.
Figura 5:Grafo com ponto de articulação. Boaventura Netto (1996) define diversos termos relacionados a percursos em grafos,
conforme segue:
a) percurso, itinerário ou cadeia, é uma família de ligações sucessivas adjacentes, com
exceção da primeira e da última extremidade;
b) um percurso é dito fechado se a última ligação é adjacente à primeira;
c) um percurso é dito aberto se a última ligação não é adjacente à primeira;
d) um percurso é dito simples se não repete ligações e elementar se não repete vértices;
e) ciclo é uma cadeia simples e fechada;
f) corda é uma aresta que une dois vértices não consecutivos de um ciclo;
g) caminho é uma cadeia em um grafo orientado onde a orientação dos arcos é a
mesma, a partir do vértice inicial;
h) circuito é um caminho simples e fechado em um grafo direcionado;
i) um percurso é euleriano quando percorre todas as arestas do grafo;
j) um percurso é hamiltoniano quando passa por todos os vértices do grafo.
Goldbarg e Luna (2000) ainda definem circuito hamiltoniano como um circuito que passa por
todos os nós do grafo G. Tal nome se deriva de um jogo denominado Around the World que
f b
d e g
c
a
v1 v2
v3 v4
v5
v6
14
foi proposto em 1857 por Willian Rowan Hamilton. A cada vértice de um dodecaedro se
associava uma cidade importante da época e o desafio do jogo consistia em, partindo de uma
cidade, visitar todas as demais e retornar a origem. Na PO, a otimização da elaboração de um
circuito hamiltoniano se constitui no PCV. A Figura 6 ilustra um grafo e um percurso
hamiltoniano.
Figura 6:Grafo e um percurso hamiltoniano.
Fonte: Skiena apud Simas(2004). A representação esquemática facilita a visualização, mas não é adequada para fornecer dados
a um computador. Por isso, existem outras maneiras de se representar um grafo, como
explanam Boaventura Netto (1996) e Goldbarg e Luna (2000), e a escolha de qual
representação deve ser usada depende do problema e também do esforço computacional que
será empregado.
Uma representação é a chamada lista de adjacência. Também conhecida como lista encadeada
ou dicionário, é conveniente para a entrada de dados, para a economia de memória e de
armazenamento e para a eficiência computacional de alguns algoritmos. Nela, é construída
uma lista a partir dos vértices do grafo e, ao lado de cada um, são lançados seus vértices
adjacentes. A Figura 7 mostra um grafo representado esquematicamente e a lista de
adjacência equivalente.
Figura 7:Grafo e lista encadeada equivalente.
Matriz de adjacência é uma outra forma de se representar um grafo que é expresso em uma
matriz quadrada A=[aij] onde linhas e colunas representam os vértices do grafo. Por não ser a
3 4
1 2 1
2
3
4
2
1
1
3
3
3
2 4
15
representação mais econômica, do ponto de vista de memória, é mais indicada para estruturas
simples. Na matriz, aij=1 se existe aresta (i,j) e aij=0, caso contrário. A Figura 8 ilustra um
grafo e sua matriz de adjacência correspondente.
Figura 8:Grafo e matriz de adjacência correspondente.
A matriz de incidência possui como desvantagem a esparsidade crescente. É muito utilizada
na programação matemática, especialmente na programação inteira. Possui dimensões m x n,
onde cada linha corresponde a um vértice e cada coluna a uma ligação. A matriz A=[aij]
representa o grafo G=(N, M) se, para todo arco j que liga o vértice k ao vértice l, se tem
aij=+1 se i=k, aij=-1 se i=1 e aij=0 nos demais casos. A Figura 9 mostra um exemplo de um
grafo e sua representação através de matriz de incidência.
Figura 9:Grafo e matriz de incidência equivalente.
2.2 Heurísticas
Diferentemente dos problemas que envolvem PL, os problemas que trabalham com valores
inteiros, em geral, não possuem um algoritmo que conduza à solução ótima com a mesma
eficácia. Conforme Goldbarg e Luna (2000), a principal dificuldade está relacionada à
implementação prática através de instrumentos computacionais, pois na explosão
combinatória dos métodos enumerativos, como o Branch-and-Bound, o tempo de
processamento sobe rapidamente quando se aumenta o número de variáveis. Dessa maneira, a
3
4
1
2
5
6
1
2
4
3
5
6
0
0
0
0
1
0
1
0
0
0
1
2
0
1
0
1
0
0
3
0
1
0
0
0
0
4
1
1
0
0
1
0
5
0
1
1
1
1
1
6
1
0
1
2
4
3
5
+1
0
0
-1
a
0
0
-1
0
+1
b
0
0
0
+1
-1
c
0
0
0
0
+1
d
-1
0
0
-1
0
e
+1 4
1 2
5
3
e
b
c d
a
16
resolução computacional de problemas que, possuindo menos de uma dezena de variáveis,
tem resposta praticamente instantânea, pode chegar a levar milhões de anos se a quantidade de
variáveis atingir a casa das centenas. Por esse motivo, são pesquisados caminhos alternativos
que buscam encontrar uma solução em tempo viável. Assim surgiram as heurísticas.
O termo heuriskein vem do grego e significa descobrir ou achar. Em PO, uma heurística pode
ser definida como um método de busca de soluções, utilizando um esforço computacional
razoável, capaz de garantir a viabilidade ou a otimalidade da solução encontrada. Assim, pela
utilização de heurísticas, a não garantia de obtenção da solução ótima é o ônus para se obter
uma resposta em tempo viável. Também existem as metaheurísticas que se constituem de
procedimentos heurísticos básicos em um nível mais elevado de busca por soluções, entre elas
Algoritmos Genéticos, Busca Tabu, e Simulated Annealing.
2.2.1 Algoritmos Genéticos
Os Algoritmos Genéticos (AG) ou Genetic Algorithms constituem métodos de busca que se
baseiam na teoria da evolução das espécies e na genética. Conforme Samed (2004), os
trabalhos de Lamarck, Darwin, Mendel, entre outros, são a base para aos AG.
No século XIX Lamarck publicou uma teoria baseada em duas leis. A primeira, a Lei do Uso
e Desuso, afirma que o uso de determinadas partes do organismo provoca o desenvolvimento
delas, enquanto o desuso, provoca seu atrofiamento. A segunda, a Lei da Transmissão dos
Caracteres Adquiridos, afirma que as modificações provocadas pela lei anterior são
repassadas à descendência do indivíduo, o que já não é considerado válido.
No mesmo ano da publicação da teoria de Lamarck, nasce Charles Darwin. Este elaborou a
chamada teoria da seleção natural na qual, em linhas gerais, Darwin afirma que os indivíduos
mais adaptados ao meio têm mais chance de sobreviver.
Mendel procurou explicar, através de leis, como ocorrem as trocas de material genético
através de cruzamentos e mutações. Sua teoria de hereditariedade e dominância se baseia em
fatores encontrados nos genes. Posteriormente, através de corantes, foram identificados
filamentos chamados de cromossomos que, mais tarde, Morgan descobriu serem formados por
subgrupos, mais precisamente, genes.
17
Os primeiros trabalhos utilizando os princípios da genética em sistemas artificiais foram de
John Holland. Segundo Goldbarg e Luna (2000), Holland utilizou uma lista de símbolos
binários para representar as cadeias do ácido nucléico com o intuito de fundamentar uma
teoria geral de adaptação robusta, mas encontrou um caminho de grande e imediata aplicação
prática na determinação de máximos e mínimos de funções matemáticas. De forma simples,
AG são uma parte da computação evolucionária que encontrou outras aplicações e que tem as
seguintes características:
a) operam em um conjunto de pontos e não em pontos isolados;
b) operam em um espaço das soluções codificadas e não de forma direta no espaço de
busca;
c) precisam somente do valor de uma função objetivo;
d) usam transições probabilísticas e não regras determinísticas.
Seguem definições de termos usados pelos AG:
a) população é o conjunto de indivíduos ou soluções do problema;
b) cromossomo é um vetor de componentes que representa um indivíduo ou
configuração de solução;
c) fitness é a medida de aptidão do indivíduo ao meio, normalmente relacionada à
função objetivo;
d) gene é uma componente do cromossomo, ou seja, uma variável do problema;
e) alelo ou allele é o que descreve os possíveis estados de um atributo do indivíduo ou
valores de uma variável;
f) locus é a posição do atributo no cromossomo ou a posição da componente no vetor;
g) operadores genéticos são as regras que permitem a manipulação dos cromossomos e
podem ser de crossover, ou de cruzamento, quando permite a geração de filhos a
partir dos cromossomos pais, ou de mutação, quando um novo indivíduo é gerado a
partir de alterações no cromossomo pai;
h) fenótipo é o que denota o cromossomo codificado;
i) genótipo é o que representa a estrutura do cromossomo codificado;
j) schema é um modelo de representação para uma família de cromossomos;
k) número de gerações significa o número de iterações do algoritmo.
18
Os indivíduos, representados por cromossomos, podem ser formados por codificação binária,
através de 0 e 1, ou por representação inteira. Conforme Samed (2004), a codificação
utilizando números reais é a escolha mais adequada a problemas que envolvem a elaboração
de percursos, como o PCV, pois, devido às combinações possíveis dos valores binários, a
quantidade de dígitos para representar cada nó cresceria com o número de vértices. Assim, o
tamanho do vetor binário de cada rota seria a multiplicação entre a quantidade de dígitos
necessários para representar uma cidade pela quantidade de cidades. Adotando tal codificação
são necessários alguns cuidados específicos com os operadores, pois, geralmente, não pode
haver repetição de indivíduos em uma mesma solução, entre outros.
Como explicam Goldbarg e Luna (2000), os indivíduos competem por recursos e
possibilidade de reprodução. Após uma população inicial ser formada, através de um método
específico ou randomicamente, os indivíduos são avaliados através da função fitness e os que
têm melhor desempenho têm também maior chance de se reproduzir. O método roulette
wheel, ou roleta, escolhe um genitor com probabilidade igual a sua adequação normalizada. O
método tournament, ou torneio, sorteia membros aleatoriamente e, dentre os sorteados,
seleciona o indivíduo mais apto. Essa característica probabilística dos métodos visa manter a
diversidade da população. No processo de cruzamento, a partir de cromossomos pais, um
cromossomo filho é gerado. O crossover pode ser feito em uma posição fixa, aleatória ou em
trechos específicos. A Figura 10 apresenta o processo de cruzamento.
Figura 10:Cruzamento.
Fonte: Adaptado de Goldbarg e Luna (2000). Uma outra possibilidade de se manipular os cromossomos, que pode ser usada após os
cruzamentos, é utilizar o processo de mutação. Nesta, um indivíduo pai sofre uma alteração e
gera um filho diferente de si. A Figura 11 ilustra esse processo.
Indivíduos Pais Indivíduos Filhos
1 0 0 1 1 1 0 1
1 1 0 0 0 1 1 0
1 0 0 0 0 1 1 0
1 1 0 1 1 1 0 1
19
Figura 11:Mutação.
Fonte: Adaptado de Goldbarg e Luna (2000). Um AG, de acordo com Goldbarg e Luna (2000), pode ser definido da seguinte maneira:
AG = (N, P, F,Θ,Ω,Ψ ) (9)
Onde se representa:
P A população de indivíduos, P ={S1, S2,..., SN} na qual cada indivíduo Si, i=1,2,...,N, é
formado por uma cadeia de valores de comprimento n;
F A função fitness que retorna valor positivo e real da avaliação de cada indivíduo, onde:
F:Si → R+, i=1,...,N; (10)
Θ Operador de seleção de pais que escolhe r indivíduos de P, onde:
Θ:P→ {p1, p2,..., pr}; (11)
Ω Conjunto de operadores que inclui operador de cruzamento, denominado ΩC, operador
de mutação, denominado ΩM, ou outro operador que produza s filhos de r pais, onde:
Ω={ΩC ,ΩM,...,}:{p1, p2,..., pr}→{f1, f2,..., fs}; (12)
Ψ Operador que retira s indivíduos da população P permitindo a adição de s filhos à
população nova, Pt+1, onde:
Pt+1= Pt -Ψ( Pt) + {f1, f2,..., fs}; (13)
τ Critério de parada, onde τ: Pt→ {verdadeiro, falso}.
As etapas básicas de um AG, conforme Samed (2004), são apresentadas, através de diagrama,
na Figura 12.
Além de se verifica a adaptação dos indivíduos, Samed (2004) cita que é necessário que seja
verificado se os indivíduos não ferem as restrições, sendo soluções infactíveis. Caso existam,
esses indivíduos podem ser descartados, ser transformados em factíveis através de mutação,
receber uma penalização, continuar evoluindo, entre outras. A escolha deve considerar fatores
como a potencial perda de diversidade, no caso da eliminação.
Indivíduo Pai Indivíduo Filho
1 0 0 0 1 1 0 1 1 0 1 1 0 0 0 1
20
Figura 12:Passos de um AG.
Fonte: Adaptado de Samed (2004).
No decorrer das iterações do AG, a esperada evolução da população em direção à solução
ótima é representada na Figura 13.
Figura 13:Evolução da população.
Fonte: Adaptado de Fonte: Rebello e Hamacher (2000).
2.2.2 Busca Tabu
A estratégia da Busca Tabu, ou Taboo Search, como escreve Pidd (1998), consiste em
desenvolver procedimentos que guiem o processo de busca, através de regiões críticas, com o
objetivo de alcançar valores ótimos. Para isso utiliza princípios que tornam a busca mais
inteligente.
Gerar População Inicial
Selecionar Indivíduos e Efetuar Cruzamento
Avaliar o fitness da População Inicial
Avaliar o fitness da Nova População
Selecionar Indivíduos e Efetuar Mutação
Verificar o Critério de Parada
Fim
Solução ótima
*
**
**
*
**
*
* População
Solução ótima *
****
**** * População
21
Durante esse processo, o algoritmo da Busca Tabu armazena informações sobre as soluções
passadas e sobre os movimentos já realizados. A partir da execução e do armazenamento de
um movimento, o próprio é considerado esquecido por um determinado número de iterações,
mesmo que ele seja parte da vizinhança pesquisada no passo atual. Na Busca Tabu a
vizinhança é delimitada pela declaração de alguns de seus membros como tabu. As regras
para isso são ditadas pelo modelador. A idéia é que os movimentos não levem a soluções
piores que a corrente e que não resultem em tentativas sem valor para o aperfeiçoamento da
solução.
O modelador, na fase de implementação do algoritmo, precisa definir o número de iterações
durante as quais um elemento de uma solução já executado deve ser considerado tabu, não
podendo ser escolhido novamente. O objetivo desse procedimento é restringir a busca,
evitando trocas realizadas de forma contínua e rapidamente revertidas, ou seja, evitando
movimentos sem valor.
Da mesma forma, deve ser considerada a freqüência dos movimentos. A execução de um
determinado movimento deve ser registrada. O objetivo desse controle é o de possibilitar
diversidade na busca, se dando preferência aos passos que ocorreram com menor freqüência.
Apesar do algoritmo, a cada iteração, considerar determinados movimentos como tabu, sendo
então não permitidos, o modelador pode estabelecer critérios que permitam a escolha de um
desses passos. Isso deve ser permitido quando um movimento considerado tabu possibilita
uma melhora muito grande da solução atual.
O trabalho de Simas (2004) utiliza a Busca Tabu para a resolução do problema de roteamento.
2.2.3 Simulated Annealing
O termo Annealing é o nome que se dá a um processo ao qual materiais, como o metal e o
vidro, são submetidos afim de que se obtenha uma modificação de sua estrutura física,
possibilitando que sejam trabalhados sem se quebrar ou rachar. Como explicam Pidd (1998) e
Fleischfresser et al. (2001), tal processo se constitui no resfriamento gradual e cuidadoso,
22
depois do material ser aquecido após seu ponto de fusão. Isso é necessário pois se houver um
resfriamento brusco, o material se cristaliza de forma inadequada. Assim, durante o processo
de resfriamento, quando o material se aproxima de um ponto no qual ocorreria falha em sua
estrutura, é fornecido calor, se mantendo o controle necessário.
Assim, na metaheurística, um ótimo local é considerado como um ponto de falha. Para ser
evitado, é feito um reaquecimento, permitindo que a busca pelo ótimo global continue. Dessa
forma, no início do processo o algoritmo do Simulated Annealing permite uma busca bastante
ampla, e, seguindo a probabilidade distribuída sobre uma curva de uma função exponencial,
essa busca se restringe no decorrer do processo. A mesma distribuição de probabilidade
determina as chances de uma solução pior que a atual ser adotada.
Fleischfresser et al. (2001) apresentam estudos nos quais aplicam Simulated Annealing na
distribuição de jornais.
2.2.4 Algoritmos Híbridos
Na busca de soluções, além do emprego isolado de determinada heurística ou metaheurística,
podem ser implementados algoritmos híbridos que trabalham com duas ou mais abordagens.
Geralmente, esses algoritmos trabalham em fases, aplicando em cada uma delas, uma
heurística ou uma heurística e um método determinístico.
Sousa et al. (2002) apresentam uma metaheurística híbrida envolvendo Busca Tabu e
Simulated Annealing na resolução do problema de alocação de salas. Também envolvendo
Busca Tabu e Simulated Annealing, Sousa et al. (2003) apresentam uma hibridização que é
utilizada na programação de tripulações de ônibus. As abordagens híbridas, em muitos casos,
têm possibilitado encontrar bons resultados.
2.3 O Problema do Caixeiro Viajante
No setor produtivo, segundo Ballou (1998), os custos relacionados a transporte somente não
são superiores aos custos do próprio produto. Como explicam Slack et al (2002), tais
dispêndios devem ser considerados desde antes da construção da fábrica, muitas vezes,
23
definindo sua localização. A partir do momento em que a empresa começa a operar, o
planejamento das atividades relacionadas a transporte passa a ser muito importante, pois ele
envolve muitos fatores. Além dos custos com frota, combustível e pessoal, a execução de um
planejamento mal feito que necessite ser socorrido, por exemplo, com horas extraordinárias,
pode acarretar em mais gastos.
Conforme a Consolidação das Leis do Trabalho, o valor que o trabalhador deve receber pelo
tempo que trabalha além da jornada normal tem um acréscimo considerável. A mesma
legislação limita a quantidade de horas extraordinárias dos trabalhadores e regulariza os
períodos de descanso. Do ponto de vista jurídico, a não obediência a estas disposições pode
acarretar ações trabalhistas. Além disso, conforme aborda Iida (1990), estender a jornada
excessivamente pode comprometer a saúde do trabalhador, gerar insatisfação, afastamentos e
diminuir seu rendimento. Estas são preocupações inclusive de sistemas de gestão da
qualidade, como menciona Mello et al. (2002). Por tudo isso, racionalizar o transporte,
evitando conseqüências indesejáveis é fundamental. Dessa maneira diversas variações dos
problemas de transporte e roteamento são estudadas objetivando reduzir tais despesas. Dentre
elas se destaca o PCV.
O PCV é um dos mais tradicionais problemas de programação matemática. Assim como os
demais problemas de roteamento ele se resume na elaboração de uma rota que deve cobrir
pontos nos quais se encontra determinada oferta ou demanda. Para o PCV, a rota deve se
iniciar por determinado ponto que pode ser uma cidade, um posto de trabalho ou depósito,
percorrer todos os demais pontos, passando por cada um deles uma única vez, e retornar ao
ponto inicial, formando o chamado ciclo hamiltoniano.
Como é conhecido nos dias de hoje, sendo traduzido em um problema de otimização no
processo de determinação de um ciclo hamiltoniano, o PCV foi exposto modernamente pela
primeira vez por Hassler Whitney, em 1934, conforme Goldbarg e Luna (2000). De um modo
geral para a resolução do problema são utilizados grafos nos quais se busca o caminho de
menor custo.
O PCV se faz importante porque possui grande aplicação prática, por uma enorme relação
com outros modelos, e pela dificuldade de se obter a solução exata, como escrito por
24
Papadimitriou e Steiglitz (1982). O número de combinações possíveis é igual a (n-1)!, onde n
representa o número de vértices. Além disso, o problema foi classificado como intratável por
Garey e Jonhson (apud Goldbarg e Luna, 2000) e classificado por Karp (apud Goldbarg e
Luna, 2000) como NP-árduo.
2.3.1 Equacionamentos
Para o PVC existem vários equacionamentos elaborados consagrados na literatura
especializada por serem bastante difundidos e por desenvolverem modos particulares de
caracterização do problema.
Dantzing et al. (apud Goldbarg e Luna, 2000) formularam o PCV como um problema de
programação 0-1 sobre um grafo G=(n, A), da seguinte forma:
Minimizar ∑∑==
=n
iijij
n
jxcz
11 (14)
Sujeito a: 11
=∑=
n
i
ijx Nj∈∀ (15)
11
=∑=
n
jijx Ni∈∀ (16)
1,
−=≤∑∈
SxSji
ij NS ∈∀ (17)
}{ 1,0∈ijx Nji ∈∀ , (18)
Onde se considera:
cij Custo de se percorrer o arco (i, j);
xij Escolha ou não do arco (i, j) para a solução, assumindo 0 ou 1, respectivamente;
n Número de vértices do grafo G;
S Um subgrafo de G;
| S | Número de vértices do subgrafo S.
A restrição (17) determina a eliminação de ciclos pré-hamiltonianos. O número de restrições é
de O(2n). Esse equacionamento destaca o caráter combinatório do PCV. Ele também auxilia
25
no entendimento de problemas de seqüenciamento de operações em máquinas sob abordagem
semelhando a do PCV.
Denominada Folha de Cravo e apresentada por Miller et al. (apud Goldbarg e Luna, 2000)
uma outra abordagem exige que, a partir de determinado ponto, um conjunto de n-1 cidades
sejam visitadas uma única vez sendo que se deve retornar à cidade origem t vezes, incluindo o
fechamento do ciclo final, de forma que um máximo de p pontos sejam visitados por ciclo. O
número de restrições é de O(n2). O equacionamento segue:
Minimizar ∑∑==
=n
iijij
n
jxcz
11
Sujeito a: txn
i
i =∑=2
1 Nj∈∀ (19)
11
=∑=
n
ijix j=2, ..., n (20)
11
=∑=
n
jjix j=2, ..., n (21)
1−≤+− ppxuu ijji nji ≤≠≤2 (22)
0≥iu ni ≤≤2 (23)
}{ 1,0∈ijx Nji ∈∀ , (24)
Onde se considera:
cij Custo de se percorrer o arco (i, j);
xij Escolha ou não do arco (i, j) para a solução, assumindo 0 ou 1, respectivamente;
n Número de vértices do grafo G;
t Número de vezes a se retornar ao vértice inicial;
p Máximo de vértices a se visitar em um único tour;
ui Ordem do vértice i;
uj Ordem do vértice j.
Apresentada por Fox et al. (apud Goldbarg e Luna, 2000), a formulação denominada time
dependent onde o custo de se percorrer o caminho i-j depende da posição t do arco (i, j) em
um tour, sob a formulação:
26
Minimizar ∑∑∑===
=n
tijtijt
n
j
n
izcz
111 (25)
Sujeito a: nzn
t
ijt
n
j
n
i
=∑∑∑=== 111
(26)
11121
=− ∑∑∑∑====
n
t
ijt
n
j
n
t
ijt
n
jtztz i=2, ..., n (27)
}{ 1,0∈ijtz tji ,,∀ (28)
Onde se considera:
cijt Custo de se alocar o arco (i, j) na t-ésima posição;
zijt Escolha ou não do arco (i, j) na t-ésima posição, assumindo 0 ou 1, respectivamente;
n Número de vértices do grafo G;
t Posição do arco.
2.3.2 Variações
Dentre as várias versões do PCV algumas merecem maior destaque, como apresentam
Goldbarg e Luna (2000). O PCV Simétrico (PCVS) que tem aplicação em casos onde, por
exemplo, um determinado conjunto de pontos deve ser percorrido em uma seqüência
obrigatória. Tal conjunto de pontos recebe o nome de cluster.
O PCV Generalizado (PCVG) possui semelhança com o PCVS, mas neste problema existem
vários conjuntos de pontos onde o caminho a ser encontrado não necessariamente precisa
percorrer todos os pontos, mas ao menos um ponto de cada conjunto.
Um caso especial do PCVG é o PCV com Backhauls (PCVB) onde os nós do grafo são
divididos em dois grupos, sendo que todos os pontos do primeiro grupo devem ser visitados
para, posteriormente, os pontos do outro grupo serem percorridos. Tal problema tem utilidade
em aplicações que envolvem carregamento e descarregamento.
Também podem ser considerados intervalos de tempo associando uma variável tij a cada arco
do grafo G=(N, A). Tal abordagem se resume no PCV com Janelas de Tempo (PCVJT) no
27
qual a chegada a cada ponto está associada a um dado intervalo de tempo que, se não
atendido, implica em determinado custo.
Outras variações podem considerar o caso em que diversos ciclos devem ser gerados a partir
de um mesmo ponto inicial, como no PCV Múltiplo, ou, como é o caso do PCV com Bônus,
onde os custos das arestas se contrabalançam com os diferentes bônus obtidos nos vértices.
Também existem problemas que envolvem, por exemplo, a probabilidade de em um
determinado ponto haver uma demanda ou não. Este último seria o PCV Estocástico.
Diversos métodos foram implementados para a resolução do PCV e suas diversas versões,
desde métodos determinísticos, passando por métodos heurísticos e metaheurísticos. Devido
ao aumento exponencial da complexidade como o aumento do número de pontos a serem
visitados e com o aumento das restrições, cada vez mais métodos metaheurísticos são
empregados, dentre eles, Algoritmos Genéticos, Simulated Annealing e Busca Tabu, como
mostra Pidd (1998).
2.3.3 Aplicações
Rebello e Hamacher (2000) apresentam uma solução baseada em AG para um problema de
roteamento. A partir de um conjunto de locais onde deverão ser feitas coletas e de uma frota
conhecida, o algoritmo de duas fases executa o zoneamento e posteriormente o roteamento de
cada zona, observando intervalos de tempo e capacidade dos veículos. A fase de roteamento
do problema pode ser considerada um PCVJT. Os resultados são considerados validados na
comparação com um sistema de informação geográfica de transporte.
Melo e Martinhon (2004) demonstram a resolução do PCVCP através de um método híbrido
que envolve as metaheurísticas Greedy Randomized Adaptive Search Procedure (GRASP) e
Variable Neighborhood Search (VNS). Os resultados médios obtidos são considerados
promissores.
Pureza (2001) apresenta uma solução do PCV através de Busca Tabu. O autor trabalha com a
adaptabilidade a níveis de restrições. São apresentados estudos realizados com problemas
clássicos e com problemas de corte de chapas a laser onde o seqüenciamento dos cortes foi
28
tratado como um PCV. Os resultados mostram que o algoritmo apresenta benefícios quando
comparado com o algoritmo sem recursos de adaptabilidade.
Arroyo e Armentano (2001) utilizam AG em problemas de otimização multiobjetivo
envolvendo seqüenciamento de tarefas. Assim, é proposto um AG multiobjetivo. A validação
dos resultados é feita pela comparação dos resultados da metaheurística proposta com a
metaheurística Strength Pareto Evolutionary Algorithm (SPEA).
2.4 Ferramentas
Para possibilitar a resolução de forma eficiente dos diversos problemas compreendidos pela
PO, muitas ferramentas foram desenvolvidas. Além da alternativa de se implementar um
algoritmo, gerando uma nova ferramenta, existe a possibilidade de se utilizar um dos
softwares disponíveis no mercado para a resolução de problemas de otimização. Entre eles
estão Solver, Lingo e GAMS.
2.4.1 Solver
A ferramenta Solver é parte integrante do software Microsoft Excel. Tal ferramenta, segundo
Lachtermacher (2004), pode ser utilizada na resolução de PPL, problemas de programação
não-linear e problemas de programação inteira.
A partir da definição do problema, os dados são lançados na planilha. Depois disso, se acessa
o menu de ferramentas do Microsoft Excel e se seleciona a ferramenta Solver. Os parâmetros
do problema são definidos e a solução pode ser encontrada.
Lachtermacher (2004) demonstra a utilização da ferramenta através de diversos exemplos.
2.4.2 Lingo
Segundo Lucena (2005), a ferramenta Lingo utiliza linguagem simples que permite a
construção de modelos matemáticos de forma direta e intuitiva. Possui extensa biblioteca de
funções matemáticas, probabilísticas e financeiras. Esse software interage com diversos
outros programas do mercado como planilhas eletrônicas e bancos de dados.
29
O problema é modelado no software que, posteriormente, traz a solução. Lucena (2005)
apresenta exemplos de problemas solucionados com a utilização dessa ferramenta.
2.4.3 GAMS
A ferramenta General Algebraic Modeling System (GAMS), segundo sua empresa
desenvolvedora, permite uma modelagem de alto nível para resolver problemas de
programação matemática. O software permite uma representação compacta de modelos
grandes e complexos, permite alterações nas especificações do modelo de forma segura,
trabalha com outras ferramentas do mercado e possui uma ampla biblioteca de modelos.
Lucena (2005) ilustra a utilização da ferramenta através de vários exemplos.
30
3 METODOLOGIA
3.1 A Empresa
A companhia na qual foi encontrado o problema apresentado neste trabalho pertence ao setor
elétrico, atuando nas áreas de geração, transmissão e distribuição de energia elétrica. Com
mais de cinco décadas de história é responsável por quase a totalidade do fornecimento de
energia do estado onde se encontra. Tendo um quadro próprio de aproximadamente sete mil
funcionários, além de terceirizados, a empresa se organiza de forma hierarquicamente rígida
para que cada uma de suas áreas apresente os resultados desejados.
Assim, a corporação divide suas áreas de atuação em diretorias subordinadas à presidência e
dentro dessas diretorias existem subdivisões. Na diretoria responsável pela distribuição de
energia elétrica existem cinco subdivisões denominadas superintendências, uma para cada
região do estado. Por sua vez, dentro de cada superintendência, se encontram gerências, as
quais são responsáveis pelos municípios contidos em seu território de trabalho. A abrangência
de estudo do problema apresentado se limita a área coberta pela superintendência da região
noroeste do estado do Paraná, sediada em Maringá, que engloba as gerências de Campo
Mourão, Paranavaí e Umuarama. A Figura 14 apresenta tal área.
Figura 14:Superintendência noroeste e suas gerências.
Fonte: Adaptado do site do Ministério do Trabalho e Emprego.
3.2 O Problema Estudado
Diversas atividades são desenvolvidas na área de abrangência de cada uma das cinco
superintendências. O deslocamento de recursos materiais e de pessoal é necessário para
garantir o andamento das mais diversas tarefas. Tais tarefas podem ser constituídas da
31
participação de gerentes em reuniões administrativas, de visitas às agências e aos plantões, de
levantamentos de dados e de vistorias em campo, de transporte de equipamentos e
suprimentos utilizados nas atividades de campo, entre outras.
Cada uma das tarefas citadas tem características particulares e por isso as rotas a serem
elaboradas podem variar desde poucos locais a se percorrer até dezenas de pontos a se visitar.
No caso das visitas às agências e aos plantões, um gerente de área, o superintendente ou outro
colaborador da empresa, regularmente tem a necessidade de, saindo da sede da
superintendência em Maringá, visitar diversas cidades de diferentes gerências, e retornar ao
ponto de partida. Hoje a seqüência das visitas é planejada pela pessoa que as executa, sem o
auxílio de qualquer ferramenta.
Outra situação freqüente ocorre quando é preciso que um técnico envolvido com projetos faça
levantamentos em campo para analisar as condições da rede de distribuição e as obras
necessárias. Neste caso, ele parte da cidade onde está sediada a sua gerência, percorre os
pontos especificados e retorna à sua cidade de origem. Atualmente a elaboração de tal
percurso também é feita sem a utilização de um sistema que garanta o melhor trajeto.
A distribuição de recursos materiais às diversas agências e plantões é feita de modo que,
havendo necessidade dos mesmos, é providenciado o seu transporte da sede da gerência até a
cidade onde ele será usado. Neste caso, a elaboração de rotas mais abrangentes que
considerem todas as localidades que solicitam materiais em determinado instante pode ser um
caminho interessante de se otimizar tal processo.
Assim, fica claro que a falta de uma ferramenta que auxilie a elaboração de tais percursos
implica em altos custos, envolvendo gastos excessivos com combustível, manutenção dos
veículos e horas de trabalho perdidas na estrada. Além de tais custos, existe o grave problema
do risco inerente a qualquer deslocamento com veículo. Um percurso mal elaborado pode
exigir, desnecessariamente, que um colaborador se exponha a grandes riscos, se comparados
aos riscos de uma rota de custo ótimo.
Dessa forma, é necessário que as distâncias percorridas sejam minimizadas, se elaborando
rotas de custo ótimo, ou de custo próximo do ótimo. Com isso, se diminuem os gastos
financeiros, a perda de tempo com deslocamentos e o risco para os funcionários.
32
3.3 Modelagem do Problema
O problema apresentado pode ser modelado como um PCVS, pois o custo de se percorrer o
trecho entre duas cidades é o mesmo, independente do sentido. Dessa maneira, as cidades a
serem incluídas no circuito e as distâncias entre elas podem ser representadas através de uma
matriz de adjacências. Nesta matriz, onde está representado o grafo do problema, as linhas e
colunas representam as cidades, ou vértices envolvidos, e cada interseção entre uma linha e
uma coluna, cij, traz a distância entre as cidades, ou valores dos arcos, correspondentes. Na
Figura 15 é apresenta a generalização de tal matriz.
Figura 15:Matriz de adjacências do problema. A partir da matriz apresentada, o modelo matemático para a otimização pode ser definido
partindo do modelo proposto por Dantzing et al. (apud Goldbarg e Luna, 2000):
Minimizar ∑∑==
=n
i
ijij
n
j
xcz11
(29)
Sujeito a: 11
=∑=
n
i
ijx Nj∈∀ (30)
11
=∑=
n
j
ijx Ni∈∀ (31)
1,
−=≤∑∈
SxSji
ij NS ∈∀ (32)
}{ 1,0∈ijx Nji ∈∀ , (33)
Onde se considera:
cij Distância entre as cidades i e j;
xij Escolha ou não do trecho entre as cidades i e j para compor a solução, assumindo 0 ou
1, respectivamente;
1
2
4
3
n
c11
c21
c41
c31
1
cn1
c12
c22
c42
c32
2
cn2
c13
c23
c43
c33
3
cn3
c14
c24
c44
c34
4
cn4
...
...
...
...
...
...
c1n
c2n
c4n
c3n
n
cnn
M M M M M M
33
n Número de cidades a se visitar;
S Um subconjunto de cidades;
| S | Número de vértices do subconjunto S.
A função objetivo, Equação (29), busca minimizar o custo do circuito a ser elaborado ao
procurar a solução com menor distância a ser percorrida. As restrições representadas pelas
Equações (30) e (31) exigem que cada cidade seja visitada uma única vez. A não existência de
ciclos pré-hamiltonianos é garantida pela restrição representada pela Equação (32). A
Equação (33) determina que cada arco seja desconsiderado ou faça parte da solução,
assumindo valores binários 0 e 1, respectivamente.
3.4 Validação do Modelo
Conforme demonstrado no Capítulo 2 deste trabalho, existem diversas opções de ferramentas
que podem ser empregadas na resolução de problemas da PO. A seleção depende das
características do problema a ser estudado, do tempo disponível para familiarização com a
ferramenta, além de outros fatores. Devido à facilidade de utilização e a proximidade que a
programação no sistema apresenta dos modelos matemáticos, foi escolhido o software GAMS
IDE, versão 2.0.33.5, da GAMS Development Corporation como instrumento a ser
empregado neste trabalho afim de validar o modelo apresentado.
Esta ferramenta faz uso de uma linguagem de alto nível, facilitando a representação de
modelos complexos. As mudanças nas especificações podem ser realizadas de forma fácil e
segura possibilitando que, partindo de um conjunto de condições simples, se chegue a
modelos mais complexos. Ao executar o modelo, o software gera relatórios de fácil
compreensão onde são apresentados os passos da resolução e solução encontrada.
Além destas características, o GAMS traz consigo bibliotecas com modelos de diferentes
problemas que fazem uso de vários pacotes para resolver problemas matemáticos. Estes
pacotes são denominados solvers. Os modelos trabalham com programação linear, não-linear
e inteira. Para a resolução de muitos problemas eles podem ser utilizados como ponto de
partida, sendo necessárias, muitas vezes, poucas adaptações.
34
Para o PCV a biblioteca do software traz um modelo que encontra a solução ótima para um
PCVS com até 42 cidades que é similar ao problema descrito. O algoritmo soma cortes e
exclui os subciclos encontrados nas soluções anteriores. Internamente, neste modelo, o
GAMS trabalha com uma relaxação e utiliza o solver Cplex que é projetado para resolver com
rapidez problemas grandes e difíceis, com mínima intervenção do usuário. Dessa maneira o
software, através de um método exato, garante o alcance da solução ótima. A biblioteca do
programa não traz todos os detalhes relativos ao método utilizado. O Anexo A deste trabalho
expõe a relação das cidades envolvidas nesse modelo e a matriz com os custos dos caminhos
entre elas. O modelo não informa de que maneira tais custos foram obtidos e tampouco sua
unidade de medida.
A versão de demonstração do software, disponibilizada via internet pelo fabricante, impõe
limitações. Para o modelo citado, considerando os 42 vértices, a resolução do problema exige
que sejam instanciadas 861 variáveis discretas. Porém a demonstração do programa permite
que, no máximo, 50 variáveis discretas sejam utilizadas. Assim, para possibilitar que o
funcionamento do software pudesse ser observado, o modelo original sofreu uma diminuição
no número de cidades envolvidas, passando a trabalhar apenas com as 10 primeiras cidades
das 42 listadas. Após essa alteração, o software foi executado e, considerando apenas 10
cidades, o circuito de custo mínimo foi encontrado pelo GAMS, assim como seu custo. Com a
alteração feita no problema original o número de variáveis discretas instanciadas na resolução
passou de 861 para 45, ficando dentro dos limites da versão de demonstração utilizada.
Dessa forma se verificou que a modelagem considerada para o problema a ser estudado, que é
equivalente à apresentada no modelo oferecido pelo GAMS, pode ser empregada ao problema
da empresa estudada. Apesar do software disponibilizado pela internet não permitir a
resolução do problema para um número maior de cidades, foi possível obter em sua biblioteca
o custo da solução ótima do problema completo, ou seja, abrangendo as 42 cidades listadas.
Os valores relativos aos custos das soluções ótimas do modelo presente no software,
considerando 10 e 42 cidades, foram utilizados como parâmetros para a implementação,
validação e utilização da ferramenta posteriormente desenvolvida.
3.5 Desenvolvimento da ferramenta
Para resolver o PCVS da empresa estudada, foi desenvolvida uma ferramenta que se constitui
na implementação de um algoritmo que se baseia nos conceitos da heurística AG, apresentada
35
no Capítulo 2 deste trabalho. Para essa implementação foi utilizado o software de
desenvolvimento Turbo Pascal 7.0 da Borland International, Inc.
A matriz na qual constam os custos que relacionam as cidades, umas às outras, são obtidos
pela ferramenta desenvolvida a partir de um arquivo de texto gravado na mesma pasta dela. O
algoritmo, a partir de parâmetros pré-definidos, gera uma população inicial na qual cada
indivíduo representa uma solução. A partir da população inicial, o algoritmo faz cruzamentos
e mutações, possibilitando que uma solução melhor que as soluções iniciais seja encontrada.
Nas rotas elaboradas não é definido o ponto de partida, porém, como a solução resulta em um
circuito, o custo é o mesmo, independente de onde se parta. O funcionamento da ferramenta
desenvolvida pode ser explicado mais detalhadamente em etapas.
3.5.1 População inicial
Cada indivíduo da população é constituído por uma seqüência de vértices a serem visitados,
formando uma solução possível para o problema. No algoritmo, cada indivíduo ocupa uma
linha de uma matriz na qual o número de colunas é o número de vértices envolvidos. Assim,
cada indivíduo deve conter em sua seqüência todas as cidades envolvidas, sem haver
repetição. Dessa forma, para gerar a população inicial, o algoritmo sorteia randomicamente,
para cada indivíduo, uma seqüência de cidades, formando um circuito hamiltoniano para cada
indivíduo. Para isso, o algoritmo implementado verifica, para cada cidade a ser inserida na
seqüência de um determinado indivíduo, se a mesma cidade já está presente na solução em
formação. Em caso positivo, outra cidade é sorteada. Esse processo segue até que o indivíduo
a ser gerado represente uma solução factível, independente de seu custo, e que satisfaça as
restrições estabelecidas pelas Equações de (30), (31), (32) e (33).
Obedecendo tais condições, o algoritmo gera uma determinada quantidade de indivíduos,
segue a Equação (29) para calcular o custo de cada um deles e seleciona os mais aptos para
que sejam preservados e permaneçam na população a ser trabalhada. Os membros não
selecionados são descartados. As quantidades de indivíduos a serem gerados inicialmente e de
indivíduos a serem conservados, são determinadas antes da execução do algoritmo. A Figura
16 apresenta um indivíduo com 10 posições e a seqüência na qual os vértices devem ser
visitados, exemplificando uma solução para o PCVS de 10 cidades.
36
Figura 16:Indivíduo representando uma solução do PCVS. Após a definição da população a ser trabalhada, a mesma começa a passar por modificações
realizadas por cruzamentos e mutações.
3.5.2 Cruzamentos
No processo de cruzamento, uma parte dos indivíduos da população é sorteada aleatoriamente
e, dois a dois, os indivíduos pais intercalam trechos de genes entre si, gerando indivíduos
filhos. O algoritmo também oferece a possibilidade de que, dentre os sorteados, apenas os
melhores se submetam às trocas de genes. Nesse processo, para possibilitar uma maior
diversidade de cruzamentos, a ferramenta sorteia aleatoriamente, para cada par de indivíduos
pais, um número do intervalo fechado [2, n], onde n é o número de vértices envolvidos. Esse
número define o Ponto Inicial, ou seja, o ponto da seqüência dos indivíduos no qual as trocas
se iniciam. Depois, também aleatoriamente, a ferramenta sorteia um número do intervalo [1,
(n-Ponto Inicial+1)]. Esse segundo número define o Tamanho do Trecho de genes a ser
trocado.
Na primeira parte do cruzamento, ou seja, da posição 1 à posição (Ponto Inicial-1), os
indivíduos filhos 1 e 2 recebem, respectivamente, as seqüências de genes dos indivíduos pais
1 e 2, conforme ilustra a Figura17.
Figura 17:Primeira parte do cruzamento.
8 2 1 4 3 2 10 9 7 61ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ªPosições:
Indivíduo:
1ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ª
8 2 1 4 3 5 10 9 7 61ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ª
Pai 1:
2 7 1 5 6 8 10 3 9 4Pai 2:
8 2 1 4 Filho 1:
2 7 1 5 Filho 2:
Posição Inicial
Tamanho do Trecho
1ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ª
1ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ª
37
A partir da posição Ponto Inicial até a posição (Ponto Inicial+Tamanho do Trecho-1),
segunda parte do cruzamento, o filho 1 recebe os genes do pai 2 e o filho 2 recebe os genes do
pai 1. Porém, a partir da posição Ponto Inicial, é necessário que haja cuidado para que
vértices já presentes no trecho compreendido da posição 1 à (Ponto Inicial-1) de cada um dos
filhos não sejam inseridos novamente, infringindo a condição representada pela Equação (34).
Para isso, o algoritmo verifica, a cada vértice a ser inserido, se ele já está presente na primeira
parte daquele filho. Em caso positivo, o algoritmo atribui 0 a essa posição. A Figura 18 ilustra
essa etapa.
Figura 18:Segunda etapa do cruzamento. Na terceira parte do cruzamento o algoritmo termina de completar cada filho preenchendo as
posições nas quais se encontram valores iguais a 0 e as posições do intervalo [(Ponto
Inicial+Tamanho da Troca-1), n]. Para isso o algoritmo busca, da última até a primeira
posição do pai 1, os vértices ainda não presentes no filho 1. O mesmo ocorre entre pai 2 e
filho2, concluindo o cruzamento. A Figura 19 mostra a finalização do cruzamento.
Figura 19:Cruzamento concluído.
1ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ª
8 2 1 4 3 5 10 9 7 61ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ª
Pai 1:
2 7 1 5 6 8 10 3 9 4Pai 2:
8 2 1 4 6 7 10 9 5 3Filho 1:
2 7 1 5 3 4 10 9 8 6Filho 2:
Posição Inicial
Tamanho do Trecho
1ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ª
1ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ª
1ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ª
8 2 1 4 3 5 10 9 7 61ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ª
Pai 1:
2 7 1 5 6 8 10 3 9 4Pai 2:
8 2 1 4 6 0 10 Filho 1:
2 7 1 5 3 0 10 Filho 2:
Posição Inicial
Tamanho do Trecho
1ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ª
1ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ª
38
Após todos os indivíduos pais, dois a dois, terem concluído seus cruzamentos, o número de
filhos gerados é o mesmo do número de pais sorteados e escolhidos para as trocas de genes. O
algoritmo então sorteia novamente tal quantidade de indivíduos da população e os substitui
pelos filhos gerados. Porém, para evitar que os melhores indivíduos sejam substituídos por
tais filhos, esses sorteios somente atingem a metade menos apta da população. Tal
procedimento visa garantir a evolução do conjunto de soluções. No processo de cruzamento, o
número de indivíduos a serem sorteados é, assim como o número de indivíduos que irão de
fato efetuar trocas de genes, determinado previamente, ou seja, antes da ferramenta entrar em
execução.
3.5.3 Mutações
Efetuados os cruzamentos, o algoritmo realizará mutações. Nesse processo, cuja quantidade
de vezes a ser repetido é definida antes de se começar a rodar a ferramenta, um indivíduo
qualquer da população é sorteado, e tem sua seqüência de vértices alterada. Tal alteração
segue os moldes do cruzamento no que diz respeito ao Ponto Inicial das trocas e ao Tamanho
do Trecho a ser trocado, com a diferença de que envolve somente um indivíduo da população,
que inverte dois trechos de sua própria seqüência. Assim como no cruzamento, são sorteados
o Ponto Inicial e o Tamanho do Trecho. O passo seguinte é a inversão dos intervalos [Ponto
Inicial,(Ponto Inicial+Tamanho da Troca-1)] e [(Ponto Inicial+Tamanho da Troca), n]. No
caso da mutação, a restrição representada pela Equação (34) não corre risco de ser
desrespeitada pois cada indivíduo sorteado já a atende e somente há no processo inversão na
seqüência. A Figura 20 exemplifica uma mutação efetuada.
Figura 20:Mutação efetuada.
8 2 1 4 3 5 10 9 7 61ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ª
Posição Inicial
Tamanho do Trecho
8 2 1 4 9 7 6 3 5 101ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ª
39
Após cada mutação ser realizada, o custo da nova seqüência gerada é calculado e, caso ele
seja menor que o custo do indivíduo original, essa nova solução substitui a anterior. Tal
artifício tem como objetivo proporcionar a evolução da população.
3.5.4 Gerações
Para que os indivíduos evoluam e convirjam para a solução ótima ou para uma solução
satisfatória, é necessário que os cruzamentos e as mutações ocorram repetidas vezes e de
forma intercalada. Dessa maneira, após uma população inicial ser gerada e de uma parte dela
ser selecionada para prosseguir, o algoritmo submete seus indivíduos a sucessivos processos
de cruzamentos e mutações. Cada submissão da população aos processos de cruzamentos e de
mutações se constitui em uma geração. A quantidade de gerações é determinada antes de se
iniciar o algoritmo.
3.5.5 Execuções
O caráter estocástico inerente à heurística AG, implica na necessidade de que o algoritmo seja
iniciado repetidas vezes para que se verifique o quão confiáveis são seus resultados. Isso
minimiza as chances de que um sucesso, ou insucesso, obtido por acaso seja considerado
regra de funcionamento da ferramenta. Por esse motivo, geralmente, o algoritmo é executado
diversas vezes. Em cada execução uma nova população inicial é criada, os membros mais
aptos são escolhidos e gerações são desenvolvidas.
Após todas as execuções programadas serem concluídas, o algoritmo exibe dados referentes
às execuções realizadas, entre eles a melhor solução encontrada, seu custo, a quantidade de
vezes que tal solução foi alcançada, em qual execução foi obtida pela primeira vez, a média
das soluções das execuções e o tempo decorrido durante o trabalho da ferramenta. Além de
tais informações serem exibidas na tela do computador, o algoritmo as registra em um arquivo
de texto específico para os resultados. Juntamente com os resultados obtidos, o algoritmo
registra em arquivo de texto os parâmetros utilizados no processo, como número de
indivíduos gerados, de indivíduos selecionados a se manter, de filhos por geração, de
mutações por geração, de gerações e de execuções. Esses registros facilitam a obtenção de
dados estatísticos sobre o funcionamento da ferramenta e garantem maior segurança contra a
perda de tais dados. A Figura 21 apresenta um fluxograma que resume o funcionamento da
ferramenta.
40
Figura 21:Funcionamento do algoritmo. 3.5.6 Validação do algoritmo
Após a implementação, o problema original apresentado pelo GAMS contendo 42 cidades e
também o problema do software restrito a 10 cidades, foram submetidos ao algoritmo. Foram
feitos testes, estudos e variações nos parâmetros de trabalho da ferramenta com o objetivo de
melhorar seu desempenho na tarefa de buscar uma boa solução ou mesmo a solução ótima. A
partir dos resultados extraídos da ferramenta desenvolvida para o problema apresentado pelo
GAMS, tanto para 42 como para 10 vértices, foi verificada a validade e analisada a
capacidade do algoritmo implementado resolver o problema da empresa estudada. Assim, o
problema real da companhia foi submetido à ferramenta implementada e seus resultados
foram comparados aos resultados obtidos através da elaboração de rotas sem o auxílio de
ferramentas específicas.
População Inicial
População Selecionada
Cruzamentos
Mutações
Definição dos Parâmetros
Fim
Início
41
3.6 Coleta de dados
Para a resolução do problema apresentado, as distâncias entre as cidades envolvidas foram
obtidas no endereço eletrônico da Associação Brasileira de Concessionárias de Rodovias e
lançadas em uma matriz. O Apêndice A apresenta as cidades envolvidas e as distâncias
rodoviárias em quilômetros entre elas.
3.7 Máquina utilizada
Todas es etapas do estudo que envolveram esforços computacionais, explicitamente as que
utilizaram os softwares GAMS, Turbo Pascal e a própria ferramenta desenvolvida, se deram
em um computador pessoal equipado com processador AMD Athlon 64 2800+ de 1,8GHz e
com 512MB de memória. O sistema operacional utilizado foi o Windows XP Professional,
versão 2002, da Microsoft Corporation.
42
4 RESULTADOS
Com o intuito de se obter parâmetros para a ferramenta a ser desenvolvida, foram extraídos
dados da resolução do modelo apresentado pelo GAMS. Para o problema restrito às 10
primeiras cidades listadas no Anexo A, ao se solicitar a resolução do modelo, o software
indicou que a solução ótima encontrada tem custo igual a 200. Os dados resumidos da
resolução do modelo limitado a 10 vértices são apresentados na Figura 22.
S O L V E S U M M A R Y
MODEL tsp OBJECTIVE z
TYPE MIP DIRECTION MINIMIZE
SOLVER CPLEX FROM LINE 215
**** SOLVER STATUS 1 NORMAL COMPLETION
**** MODEL STATUS 1 OPTIMAL
**** OBJECTIVE VALUE 200.0000
RESOURCE USAGE, LIMIT 0.109 10000.000
ITERATION COUNT, LIMIT 13 100000
GAMS/Cplex Apr 21, 2006 WIN.CP.NA 22.2 031.034.041.VIS For Cplex 10.0
Cplex 10.0.1, GAMS Link 31
Proven optimal solution.
MIP Solution: 200.000000 (13 iterations, 0 nodes)
Final Solve: 200.000000 (0 iterations)
Best possible: 200.000000
Absolute gap: 0.000000
Relative gap: 0.000000
Figura 22:Dados sobre a resolução do modelo alterado.
Fonte: Adaptado do software GAMS. A Figura 23 apresenta o conjunto de arestas selecionadas para compor a solução e o tempo de
execução da resolução do problema restrito às 10 primeira cidades da matriz do Anexo A.
43
---- 235 VARIABLE x.
c2 .c1 1
c4 .c1 1
c4 .c3 1
c5 .c2 1
c6 .c5 1
c7 .c6 1
c8 .c3 1
c9 .c7 1
c10.c8 1
c10.c9 1
EXECUTION TIME = 0.031 SECONDS
Figura 23:Solução e tempo de execução.
Fonte: Adaptado do software GAMS.
Para o problema alterado, o circuito de custo mínimo parte de Manchester, passa por
Montpelier, Charleston, Louisville, Indianápolis, Milwaukee, Minneapolis, Chicago, Detroit e
Cleveland, retornando à origem. A resolução se deu em 31 milésimos de segundo.
Com relação ao modelo completo, envolvendo 42 vértices, o valor obtido na biblioteca do
software como custo da solução ótima foi 699. A seqüência ótima e o tempo de resolução para
o modelo integral não são mencionados em sua biblioteca. Os valores obtidos no GAMS
serviram como balizadores no processo de avaliação e aperfeiçoamento do algoritmo e de
seus parâmetros de trabalho.
Depois de implementado, o algoritmo foi executado contendo os dados do modelo
apresentado pelo software GAMS. Envolvendo apenas 10 ou todas as 42 cidades, foram
realizados diversos testes e modificações, visando melhorar seu desempenho na tarefa de
encontrar uma boa solução ou, exatamente, a solução ótima. Tais modificações ocorreram
tanto no código do algoritmo quanto nos parâmetros de trabalho definidos antes de cada
execução.
Nos testes, se pôde observar que o critério de geração da população inicial tem importância
relevante no processo de busca da melhor solução. Para o problema apresentado pelo GAMS,
envolvendo 42 cidades, foi definida uma população de trabalho de 400 indivíduos. Ao se
gerar aleatoriamente somente essa quantidade de indivíduos, mantendo todos eles na
população de trabalho, o custo obtido dos melhores indivíduos de tal população inicial ficou
em torno de 2500. Ao se executar o algoritmo de forma que 400000 indivíduos fossem
44
gerados, para que os 400 melhores fossem preservados, o custo dos indivíduos mais aptos do
grupo conservado ficou próximo de 2100, ou seja, cerca de 16% menor que o encontrado ao
se gerar apenas 400 elementos. Apesar de 400000 ser um número relativamente elevado de
indivíduos a se gerar, ele representa apenas 2,84×10-46% das 1,40×1051combinações
possíveis de serem feitas, de acordo com o cálculo de 42!. Contudo, tal número permitiu que a
ferramenta buscasse a solução a partir de uma população mais qualificada, o que se traduziu
em redução da quantidade de gerações necessárias e melhora dos resultados encontrados. Para
10 cidades a população de trabalho foi de 20 indivíduos, sendo gerados inicialmente 2000
soluções aleatórias.
A definição da quantidade de indivíduos da população de trabalho foi definida de forma a se
tentar alcançar o equilíbrio entre a diversidade de soluções, que é diretamente proporcional à
quantidade mencionada, e ao tempo de execução, que é inversamente proporcional a ela
devido à necessidade de se aumentar o número de filhos, mutações e gerações.
Foram feitos também testes a partir de populações geradas através de busca míope. Em tais
casos, para cada vértice foi gerado um indivíduo, cada um partindo de uma das cidades e
visitando, a cada passo, a mais próxima até o circuito ser completado. Os resultados de tais
testes ficaram aquém dos resultados obtidos a partir de indivíduos gerados randomicamente,
assim tal procedimento não foi adotado.
Para os cruzamentos, o procedimento de se sortear uma determinada quantidade de indivíduos
e escolher os melhores dentre esses para efetuar troca de genes, teve impacto negativo à
medida que o número de membros sorteados se distanciou do número de selecionados. Ao se
sortear muitos indivíduos para que poucos dos melhores cruzassem, a população convergiu de
modo rápido para uma solução distante da ótima. Ao se sortear apenas o número de
indivíduos que efetivamente efetivariam trocas, a população conservou maior diversidade e a
solução final foi melhorada, especialmente ao se trabalhar com 42 cidades, sendo adotado tal
procedimento. Para 10 vértices, o sorteio de 4 indivíduos para que os 2 melhores cruzassem
foi a configuração da qual decorreram os melhores resultados.
Quanto ao processo de substituição de indivíduos da população pelos filhos gerados, foram
feitos testes de modo que os filhos pudessem substituir qualquer elemento. Os testes
mostraram que, seguindo essa instrução, os custos não convergiam para o desejado mas
apenas oscilavam em torno dos custos dos indivíduos gerados inicialmente. Também foram
45
feitos testes de modo que os filhos substituíssem indivíduos dentre os 75% menos aptos,
dentre os 50% piores e dentre os 25% com custos mais elevados. Os melhores resultados
ocorreram quando os filhos, aleatoriamente, substituíram a metade menos capaz da
população. Com esta configuração houve boa velocidade de melhora dos custos e
convergência destes para o custo ótimo, devido à diversidade mantida.
Quanto ao número de filhos por geração, se verificou que, para cada dimensão de problema,
no que se refere ao número de vértices envolvidos, existe um número ideal a se gerar nos
cruzamentos. Tal número também depende do tamanho da população com a qual se está
trabalhando, devendo ter no máximo de 10% desse tamanho. Ao se manter fixa a quantidade
de indivíduos da população, o aumento do número de filhos propiciou a aceleração da
melhora dos custos das soluções. Apesar de ter conferido maior velocidade à melhora dos
custos das soluções, o aumento do número de filhos fez com que tais melhoras se
estabilizassem sem que o custo ótimo, ou um valor próximo dele, tivesse sido alcançado. Já
com um número reduzido de filhos, a melhora a cada sessão de cruzamentos foi mais
modesta, porém se estendeu por mais gerações. Contudo, ao se fazer tal número muito
pequeno, as gerações necessárias para que a solução ótima, ou uma solução próxima dela,
fosse encontrada, aumentaram demasiadamente o tempo de execução do algoritmo. Assim, o
ideal foi trabalhar com um número de filhos que proporcionasse equilíbrio entre uma boa
velocidade da melhora dos custos e um prolongamento razoável através das gerações. Para 42
cidades o número ideal por geração foi de 8 filhos. O Gráfico 1 representa a evolução dos
custos com dois números diferentes de filhos, a e b, sendo que a é maior que b.
Gráfico 3: Evolução dos custos em relação ao número de filhos.
0
500
1000
1500
2000
2500
0
2000
4000
6000
8000
1000
0
1200
0
1400
0
1600
0
1800
0
2000
0
Custo da melhor solução
Gerações
Ótimo
a b
2 4 6 8 G 1 3 5 7 ... 0
Inicial
46
A implementação do processo de mutação possibilitou para o algoritmo um ganho expressivo
de eficiência. Sem tal processo o algoritmo não foi capaz de atingir a solução ótima ao
procurar o melhor circuito de 42 vértices. Com 10 vértices, mesmo quando excluída a
mutação, a solução ótima foi encontrada, apesar de ter ocorrido com maior freqüência quando
tal procedimento foi mantido. Em ambas dimensões de problema o aumento do número de
mutações trouxe melhorias. Por outro lado também prolongou o tempo de execução. Assim,
encontrar o ponto de equilíbrio foi importante. Para 42 cidades, o número ideal por geração
encontrado foi de 800 mutações. Para 10 cidades, 10 mutações por geração.
Foi possível observar que para o problema, envolvendo 10 ou 42 vértices, o aumento do
número de gerações propiciou melhora no custo da melhor solução encontrada. Tal melhora
se acentuou com as primeiras gerações e se tornou mais tênue à medida que o número delas
cresceu, até atingir uma situação praticamente estável a partir da qual melhoras não foram
mais percebidas. Para 42 cidades, o número de gerações necessárias foi 20000 e para 10
cidades, 250. O Gráfico 4 ilustra tal comportamento durante a execução do problema
apresentado pelo GAMS envolvendo 10 vértices.
Gráfico 4: Melhora do custo no decorrer das gerações do problema de 10 vértices.
A melhora da solução durante a execução do problema completo do GAMS aplicado ao
algoritmo implementado é mostrada no Gráfico 5.
190 195 200 205 210 215 220 225 230
1 2 3 4 5 6 7 8 9 10 11
Custo da melhor solução
Gerações
0 25 50 75 100 125 150 175 200 225 250
47
Gráfico 5: Melhora do custo no decorrer das gerações do modelo GAMS com 42 vétices. Os resultados registrados no arquivo de texto permitiram que fossem feitos levantamentos
relativos à eficiência do algoritmo, tanto no que se refere à freqüência com a qual a solução
ótima é encontrada, quanto ao valor médio de todas soluções obtidas. Para o problema
apresentado pelo GAMS, restrito a 10 cidades, a ferramenta desenvolvida realizou milhares
de execuções e obteve a solução ótima em 78,930% dos casos. A média dos custos de todas
soluções obtidas por execução foi de 200,513, ou seja, 0,256% acima da solução ótima. O
tempo de cada execução foi, em média, de 0,004 segundo. Para o mesmo modelo, mas
considerando todos os 42 vértices, foram realizadas centenas de execuções. A incidência de
encontro da solução ótima foi de 19,090%. A média do custo das soluções foi de 706,081, ou
seja, 1,013% acima do ótimo. A seqüência ótima de cidades consta no Apêndice B. O tempo
médio, por execução, foi de 3 minutos e 32 segundos. O Quadro 1 resume tais dados.
Número de Vértices
Custo Ótimo
Execuções Realizadas
Ocorrência da Solução Ótima(%)
Média dos Custos das Execuções Tempo(s)
10 200 5000 78,930 200,513 0,004
42 699 500 19,090 706,081 212
Quadro 1: Resultados da resolução do problema apresentado pelo GAMS.
Considerando 10 e 42 cidades, foram realizadas séries de 10 execuções. Os resultados
apresentados indicam que para 10 cidades esse número é suficiente para se obter a solução
ótima. Para 42 cidades, nem todas séries resultaram em solução ótima. Tal comportamento já
0
500
1000
1500
2000
2500
0
1000
2000
3000
4000
5000
6000
7000
8000
9000
1000
0
1100
0
1200
0
1300
0
1400
0
1500
0
1600
0
1700
0
1800
0
1900
0
2000
0
Custo da melhor solução
Gerações
699
48
era esperado devido à menor freqüência de obtenção da solução ótima observada
anteriormente. Assim, para que existam mais chances do valor ótimo ser alcançado, séries
com mais execuções são o ideal. Porém, cada execução consome mais de 3 minutos, o que
pode dificultar séries longas. Apesar disso, mesmo que apenas uma única execução seja
realizada, o encontro de uma boa solução é bastante provável. Essa afirmação pôde ser
confirmada ao se observar o Gráfico 6, no qual constam os resultados de 10 execuções, sendo
que a pior delas obteve custo 3,14%.
Gráfico 6: Custos de dez execuções.
Depois desses resultados, o algoritmo foi utilizado para a resolução do problema da empresa
citada envolvendo 10 e 42 cidades. Os parâmetros utilizados forma os mesmos que
apresentaram os melhores resultados na resolução do problema proposto no software GAMS.
Os dados das distâncias, em quilômetros, entre as cidades constantes no Apêndice A foram
utilizados pela ferramenta desenvolvida.
Para o problema reduzido, ou seja, considerando apenas 10 cidades da região da empresa, os
custos dos melhores indivíduos da população inicial ficaram em torno de 680Km. O Quadro 2
mostra os resultados da aplicação de tal problema à ferramenta desenvolvida.
699 70
8
708
704
700
701 72
1
707
699
699
600
800
0 1 2 3 4 5 6 7 8 9 10 11
699
Custo da melhor solução
Execução
49
Série Menor Custo(Km) Número de Ocorrências
Média dos Custos(Km) Tempo(s)
1 626 4 631,9 1,2
2 626 6 629,3 1,2
3 626 8 626,6 1,2
4 626 7 628,5 1,2
5 626 8 628,2 1,2
6 626 9 630 1,2
7 626 8 626,6 1,2
8 626 9 626,3 1,2
9 626 6 629,8 1,2
10 626 7 630,5 1,2
Quadro 2: Resolução do problema da empresa envolvendo 10 cidades.
Através das execuções realizadas, considerando apenas 10 cidades da área da empresa
estudada, se pôde observar que a melhor solução encontrada tem custo igual a 626Km, foi
alcançada em 72% das vezes e é 7,9% melhor que as melhores soluções dentre as primeiras
geradas pelo algoritmo. Considerando as soluções aleatórias, sem seleção, a melhora é de
mais de 26%, já que indivíduos gerados randomicamente têm custo próximo a 857Km. A
melhor seqüência encontrada foi: Alto Paraná, Doutor Camargo, Engenheiro Beltrão, Campo
Mourão, Araruna, Cianorte, Cruzeiro do Oeste, Altônia, Cidade Gaúcha e Cruzeiro do Sul. A
média das soluções foi de 628,77Km e o tempo gasto a cada 10 execuções foi de 1,2 segundo.
O Gráfico 7 apresenta a evolução do custo da solução em uma execução.
Gráfico 7: Evolução do custo do problema regional com 10 vértices.
600610620630640650660670680690700
1 2 3 4 5 6 7 8 9 10 111 2 3 4 5 6 7 8 9 10 11
Custo da melhor solução
Gerações
0 25 50 75 100 125 150 175 200 225 250
626
50
Para elaborar o circuito de 42 vértices do mesmo problema, os custos dos melhores indivíduos
da população inicial gerada aleatoriamente ficaram em torno de 3350Km. O Quadro 3
apresenta os resultados de 10 séries de 10 execuções cada considerando 42 cidades atendidas
pela empresa estudada.
Série Menor Custo(Km) Número de Ocorrências
Média dos Custos(Km) Tempo(s)
1 1235 10 1235 2190
2 1235 10 1235 2199
3 1235 9 1236,1 2219
4 1235 9 1236,1 2174
5 1235 9 1235,6 2322
6 1235 8 1236,9 2413
7 1235 9 1240,8 2420
8 1235 10 1235 2179
9 1235 9 1235,6 2170
10 1235 8 1239,3 2173
Quadro 3: Resolução do problema da empresa envolvendo 42 cidades.
Conforme os resultados apresentados na resolução do problema da empresa, se pôde verificar
a alta freqüência do custo mínimo 1235Km. Tal custo foi obtido em 91% das execuções e é
63,13% menor que os custos das melhores soluções geradas inicialmente e a partir das quais a
solução evoluiu. Se forem considerados os custos de indivíduos gerados aleatoriamente, sem
que sejam selecionados os melhores, a solução encontrada chega a ser 70% mais econômica.
As soluções aleatórias têm apresentado custo médio de 3773Km. A melhor solução
encontrada consta no Apêndice C deste trabalho. A média das soluções de cada série ficou
bastante próxima deste valor, atingindo 1236,54Km. O Tempo de execução médio de 10
execuções foi de 37 minutos e 25 segundos. No Gráfico 8 está descrita a convergência do
custo para tal problema durante uma execução.
51
Gráfico 8: Convergência do custo na resolução do problema com 42 cidades.
A Figura 24 mostra a tela exibida pela ferramenta implementada após a execução do
problema da empresa para 42 vértices.
Figura 24:Tela exibida pelo algoritmo após execução.
A Figura 25 apresenta em destaque a área coberta pela regional e as ligações entre as cidades
envolvidas, segundo a melhor solução encontrada.
0
500
1000
1500
2000
2500
3000
35000
1000
2000
3000
4000
5000
6000
7000
8000
9000
1000
0
1100
0
1200
0
1300
0
1400
0
1500
0
1600
0
1700
0
1800
0
1900
0
2000
0
1235
Custo da melhor solução
Gerações
53
5 CONCLUSÕES
Depois de realizados estudos, feitos os testes, efetuadas as adaptações e as melhorias na
ferramenta, se pôde concluir que o algoritmo implementado é capaz solucionar de forma
eficaz os problemas a ele conferidos.
No caso dos problemas derivados da biblioteca do software GAMS, a ferramenta
implementada com os princípios da heurística AG, conseguiu alcançar a solução ótima em
78,93% dos casos, ao trabalhar com 10 vértices, e em 19,09% dos casos, ao buscar o melhor
circuito de 42 vértices. Tais números demonstram que o algoritmo implementado é uma
ferramenta confiável, sendo considerada uma dezena um número razoável de execuções para
se obter a resposta ótima ou uma boa resposta, já que a média das soluções ficou bastante
próxima da melhor solução possível. Assim, o algoritmo foi validado.
Para o problema da empresa estudada, considerando a capacidade apresentada pelo algoritmo
na resolução do problema do GAMS e a alta freqüência dos valores mínimos encontrados
como custos dos circuitos de 10 e de 42 vértices, se pode esperar que os custos mínimos
encontrados sejam os menores valores possíveis. Assim, as soluções apresentadas pela
ferramenta desenvolvida, têm grande probabilidade de serem ótimas. Também no problema
da empresa, quando o algoritmo não encontrou o valor ótimo, obteve um valor semelhante,
levemente mais alto. Dessa forma, mesmo que seja considerado o caráter estocástico da
ferramenta, sua capacidade de apresentar bons resultados justifica seu uso.
Para a empresa, a ferramenta desenvolvida possibilita uma economia real já que até o
momento os caminhos são elaborados de maneira empírica. Considerando que, partindo de
custos da ordem de 4000Km, o algoritmo consegue chegar a circuitos de 1235Km, fica
evidente a utilidade do mesmo em auxiliar a economia de recursos e a maximização dos
lucros. Se forem considerados os custos dos indivíduos selecionados, dentre os gerados
randomicamente, a economia, em termos financeiros, pode ser de mais de R$ 400,00, apenas
em combustível e em uma única viajem. Se a ferramenta for adotada para todos os trajetos a
serem elaborados, os recursos que podem ser salvos são bastante consideráveis. Além dos
valores relativos a combustível deve ser considerada a economia de se evitar o desgaste dos
veículos e horas de trabalho perdidas nas estradas. Outro ponto que não poderia deixar de ser
54
destacado é a redução dos riscos aos funcionários que a ferramenta propicia ao otimizar
trajetos.
Estudos futuros podem ser direcionados com o intuito de que a ferramenta aumente sua
eficácia. O algoritmo também pode ser trabalhado de forma que seja capaz de resolver
problemas com mais vértices que os aqui apresentados. Restrições de tempo, capacidade, e
ordem das cidades, podem ser implementadas. Os custos entre os pontos a se visitar também
podem ser fruto de cálculos que considerem as condições da estrada.
Com relação ao emprego dos princípios de AG, apesar da ferramenta ter atingido seu
objetivo, estudos futuros podem ser conduzidos de modo que, juntamente com a heurística
aqui utilizada, seja implementado um outro método, exato ou mesmo heurístico, alcançando
resultados melhores.
55
REFERÊNCIAS
ABRAHÃO, Fernando Teixeira Mendes; GUALDA, Nicolau Dionísio Fares. Aplicação da
metaheurística colônia de formigas e das heurísticas 2-opt e 3-opt na solução de problemas
logísticos da força aérea brasileira. In: SIMPÓSIO BRASILEIRO DE PESQUISA
OPERACIONAL, 36., 2004, São João Del-Rei. Anais... Rio de Janeiro: SOBRAPO, 2004.
1CD.
ARENALES, Marcos N. Otimização Linear. São Carlos: USP, 2003.
ARROYO, José Elias; ARMENTANO, Vinícius A. Um algoritmo genético para problemas
de otimização combinatória multiobjetivo. In: SIMPÓSIO BRASILEIRO DE PESQUISA
OPERACIONAL, 33., 2000, Campos do Jordão. Anais... Rio de Janeiro: SOBRAPO, 2001.
1CD.
ASSOCIAÇÃO BRASILEIRA DE CONCESSIONÁRIAS DE RODOVIAS. Disponível em:
<http://www.abcr.org.br/geode/index.php>. Acesso em 18 ago. 2006.
BALLOU, Ronald H. Logística empresarial. 4. ed. São Paulo: Atlas, 1998.
BOAVENTURA NETTO, Paulo Oswaldo. Grafos: teoria, modelos, algoritmos. 2. ed. São
Paulo: Edgard Blücher, 1996.
BRASIL. Consolidação das leis do trabalho. 29. ed. São Paulo: Saraiva, 2002.
CAIXETA-FILHO, José Vicente. Pesquisa operacional: técnicas de otimização aplicadas a
sistemas agroindustriais. 2. ed. São Paulo: Atlas, 2004.
CAMPOS, Vicente Falconi. TQC: controle da qualidade total. 6. ed. Belo Horizonte:
Fundação Christiano Ottoni, 1992.
56
ENSSLIN, Leonardo; MONTIBELLER NETO, Gilberto; NORONHA, Sandro Macdonald.
Apoio à decisão: metodologias para estruturação de problemas e avaliação multicritério de
alternativas. Florianópolis: Insular, 2001.
FLEISCHFRESSER, Sergio Augusto; STEINER, Maria T. Arns; CARNIERI, Celso;
CORREA, Elon Santos; ROSÁRIO, Raimundo Ronilson Leal. Abordagem de um problema
de entrega de jornais aos assinantes por métodos heurísticos e estatísticos. In: SIMPÓSIO
BRASILEIRO DE PESQUISA OPERACIONAL, 33., 2000, Campos do Jordão. Anais... Rio
de Janeiro: SOBRAPO, 2001. 1CD.
GAMS: a user´s guide. GAMS DEVELOPMENT CORPORATION. Disponível em:
<http://www.gams.com>. Acesso em 6 ago. 2006.
GOLDBARG, Marco Cesar; LUNA, Henrique Pacca Loureiro. Otimização combinatória e
programação linear: modelos e algoritmos. Rio de Janeiro: Campus, 2000.
HILLIER, Frederick S.; LIEBERMAN, Gerald J. Introduction to operations research. New
York: McGraw-Hill, 2001.
IANNONI, Ana Paula; MORABITO, Reinaldo. Análise do sistema logístico de recepção de
cana-de-açucar: um estudo de caso utilizando simulação discreta. Gestão & Produção, São
Carlos, v.9, n.2, ago. 2002. Disponível em:
<http://www.dep.ufscar.br/docentes/morabito/G&P02b.pdf>. Acesso em: 19 jun. 2006.
IIDA, Itiro. Ergonomia: projeto e produção. São Paulo: Edgard Blücher, 1990.
LACHTERMACHER, Gerson. Pesquisa operacional na tomada de decisões: modelagem
em Excel. 2. ed. Rio de Janeiro: Campus, 2004.
LUCENA, Gustavo Schwerz. Resolução de problemas de otimização utilizando
ferramentas computacionais. Maringá: UEM, 2005.
57
MARTINS, Petrônio Garcia; LAUGENI, Fernando Piero. Administração da produção. 2.
ed. São Paulo: Saraiva, 2005.
MELLO, Carlos H. P. et al. ISO 9001: 2000: sistema de gestão da qualidade para operações
de produção e serviços. São Paulo: Atlas, 2002.
MELO, Valdir A.; MARTINHON, Carlos A. Metaheurísticas híbridas para o problema do
caixeiro viajante com coleta de prêmios. In: SIMPÓSIO BRASILEIRO DE PESQUISA
OPERACIONAL, 36., 2004, São João Del-Rei. Anais... Rio de Janeiro: SOBRAPO, 2004.
1CD.
MINISTÉRIO DO TRABALHO E EMPREGO. Disponível em:
<http://perfildomunicipio.caged.com.br/ >. Acesso em 7 ago. 2006.
OLVE, Nils-Göran; ROY, Jan; WETTER, Magnus. Condutores da performance: um guia
prático para o uso do “balanced scorecard”. Tradução: Maria Cristina da Costa Muller. Rio de
Janeiro: Qualitymark, 2001.
PAPADIMITRIOU, Christos H.; STEIGLITZ, Kenneth. Combinatorial optimization:
algorithms and complexity. Mineola: Dover, 1982.
PESQUISA Operacional. SOCIEDADE BRASILEIRA DE PESQUISA OPERACIONAL.
Disponível em: <http://www.sobrapo.org.br/sitesobrapo.htm>. Acesso em 12 jun. 2006.
PIDD, Michael. Modelagem empresarial: ferramentas para tomada de decisão. Tradução:
Gustavo Severo de Borba. Porto Alegre: Bookman, 1998.
PUREZA, Vitória. Aplicação de uma abordagem adaptativa de busca tabu ao problema do
caixeiro viajante. In: SIMPÓSIO BRASILEIRO DE PESQUISA OPERACIONAL, 33., 2000,
Campos do Jordão. Anais... Rio de Janeiro: SOBRAPO, 2001. 1CD.
58
REBELLO, Fabrício Rocha; HAMACHER, Silvio. Uma proposta de algoritmo genético de
duas fases para roteamento de veículo. In: SIMPÓSIO BRASILEIRO DE PESQUISA
OPERACIONAL, 32., 2000, Viçosa. Anais... Rio de Janeiro: SOBRAPO, 2000. 1CD.
SLACK, Nigel; CHAMBERS, Stuart, JOHNSTON, Robert. Administração da Produção. 2.
ed. Tradução: Maria Teresa Corrêa de Oliveira; Fábio Alher. São Paulo: Atlas, 2002.
SAMED, Márcia Marcondes Altimari. Um Algoritmo Genético Híbrido Co-Evolutivo para
Resolver Problemas de Despacho. 2004. Tese (Doutorado em Engenharia Química) –
Programa de Pós-Graduação em Engenharia Química, UEM, Maringá.
SCHÜTZ, G; PIRES, F. M. Uma abordagem para o problema da optimização de rotas de
veículos baseada em operadores genéticos. Investigação Operacional, Lisboa, v. 23, n. 2,
dez. 1998.
SIMAS, Etiene P. L. Uma solução para o problema de roteamento de veículos através da
pesquisa tabu. São Leopoldo: UVRS, 2004.
SOUSA, Marcone J. Freitas; CARDOSO, Leonardo X. Teixeira; SILVA, Gustavo Peixoto.
Programação de tripulações de ônibus urbano: uma abordagem heurística. In: SIMPÓSIO
BRASILEIRO DE PESQUISA OPERACIONAL, 35., 2003, Natal. Anais... Rio de Janeiro:
SOBRAPO, 2003. 1CD.
SOUSA, Marcone J. Freitas; MARTINS, Alexandre Xavier; ARAÚJO, Cássio Roberto.
Experiências com Simulated Annealing e Busca Tabu na resolução do problema de alocação
de salas. In: SIMPÓSIO BRASILEIRO DE PESQUISA OPERACIONAL, 34., 2002, Rio de
Janeiro. Anais... Rio de Janeiro: SOBRAPO, 2002. 1CD.
WERKEMA, Maria Cristina Catarino. Ferramentas estatísticas básicas para o
gerenciamento de processos. Belo Horizonte: Werkema, 1995.
60
C1 Alto Paraná
C2 Altônia
C3 Araruna
C4 Campo Mourão
C5 Cianorte
C6 Cidade Gaúcha
C7 Cruzeiro do Oeste
C8 Cruzeiro do Sul
C9 Doutor Camargo
C10 Engenheiro Beltrão
C11 Floraí
C12 Floresta
C13 Goioerê
C14 Icaraíma
C15 Iporã
C16 Iretama
C17 Ivaté
C18 Ivatuba
C19 Japurá
C20 Loanda
C21 Luiziana
C22 Mandaguaçu
C23 Mandaguari
C24 Marialva
C25 Maringá
C26 Moreira Sales
C27 Nova Esperança
C28 Paiçandu
C29 Paranacity
C30 Paranavaí
C31 Peabiru
C32 Pérola
C33 Querência do Norte
C34 Rondon
C35 São João do Ivaí
C36 São Jorge do Ivaí
C37 Sarandi
C38 Tapejara
C39 Terra Boa
C40 Terra Rica
C41 Tuneiras do Oeste
C42 Umuarama
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16 C17 C18 C19 C20 C21 C22 C23 C24 C25 C26 C27 C28 C29 C30 C31 C32 C33 C34 C35 C36 C37 C38 C39 C40 C41
C42
C1 0
C2 220 0
C3 109 169 0
C4 110 183 21 0
C5 80 158 38 58 0
C6 89 129 94 104 58 0
C7 120 110 79 97 64 56 0
C8 30 248 123 133 110 107 147 0
C9 58 216 62 68 53 99 106 79 0
C10 89 196 35 36 48 105 106 101 33 0
C11 25 213 85 97 61 85 108 51 34 64 0
C12 70 232 70 71 70 107 121 85 19 36 47 0
C13 153 111 78 87 89 107 53 180 123 102 136 134 0
C14 159 74 149 167 125 88 88 182 169 168 158 186 118 0
C15 197 31 145 159 138 118 88 235 186 174 187 211 93 81 0
C16 157 237 83 62 109 161 139 176 105 86 135 109 114 230 198 0
C17 130 93 122 141 106 56 63 155 139 140 128 156 102 32 90 194 0
C18 66 214 55 60 51 101 104 87 8 24 41 19 118 169 184 107 140 0
C19 55 169 61 79 26 53 80 85 46 57 39 65 103 128 152 126 108 48 0
C20 101 146 143 162 109 66 104 117 134 148 111 150 152 89 146 229 71 138 106 0
C21 139 211 55 35 93 135 113 160 97 65 116 94 100 193 175 29 168 88 103 193 0
C22 41 237 94 100 79 102 129 52 32 64 28 33 150 182 219 129 153 40 63 135 115 0
C23 102 284 109 104 113 154 171 101 72 86 89 55 180 246 263 117 215 73 106 191 115 62 0
C24 84 270 100 108 110 139 158 85 57 75 71 41 170 230 250 119 190 59 101 175 112 44 18 0
C25 64 254 100 101 93 121 143 68 41 66 50 30 159 211 234 122 172 45 81 156 111 23 39 21 0
C26 139 110 70 82 75 90 38 167 112 104 123 124 16 108 92 117 99 108 99 138 101 139 172 161 149 0
C27 17 231 106 106 83 101 127 30 49 82 22 57 156 171 215 149 142 58 60 116 133 26 85 68 47 143 0
C28 56 239 86 89 78 108 129 67 26 54 38 19 146 188 220 116 159 31 67 146 103 16 51 34 15 136 42 0
C29 34 251 127 137 103 109 151 4 83 105 55 89 184 184 238 179 157 91 89 118 163 56 103 87 71 170 34 71 0
C30 21 197 103 117 80 75 112 43 72 99 39 86 149 143 186 168 116 79 54 91 147 61 111 104 84 135 37 75 46 0
C31 104 187 20 18 48 106 98 116 50 18 79 54 97 165 164 74 137 42 65 152 50 82 101 92 84 90 98 72 120 102 0
C32 183 30 143 159 131 102 81 219 178 170 176 194 100 55 26 214 67 177 141 124 179 198 256 242 225 96 192 211 222 171 161 0
C33 140 107 156 175 126 81 107 160 162 169 144 179 143 45 113 242 46 165 121 51 215 170 236 219 190 131 154 178 161 122 169 99 0
C34 69 148 77 98 39 25 64 99 74 83 62 93 108 102 134 145 80 76 29 81 120 88 132 117 109 92 79 94 103 59 86 120 105 0
C35 119 263 90 75 102 153 152 120 77 64 109 61 147 238 238 70 198 72 107 213 73 91 60 65 75 143 106 75 132 134 70 236 238 132 0
C36 40 210 71 82 51 86 103 65 19 84 15 36 126 159 183 121 129 26 35 118 102 28 84 67 47 114 35 32 69 53 64 173 149 62 96 0
C37 72 261 104 104 101 129 150 74 48 70 59 34 165 219 241 121 179 51 90 164 112 32 30 12 9 155 56 23 77 92 88 233 198 107 71 55 0
C38 108 125 56 77 37 48 27 126 90 80 93 106 63 108 105 124 78 87 55 102 108 104 146 133 118 47 104 104 130 103 74 107 107 45 130 86 125 0
C39 86 175 23 38 25 84 83 103 41 23 62 53 65 147 154 97 119 35 42 131 72 72 106 94 81 84 83 66 107 92 23 149 149 63 87 49 87 57 0
C40 68 219 147 163 114 99 140 69 112 137 90 125 184 145 213 225 123 119 101 74 194 109 152 136 118 169 83 113 68 52 148 183 113 95 180 105 125 127 129 0
C41 111 123 51 69 45 65 28 139 96 81 105 101 46 105 101 114 89 93 68 118 96 113 150 138 125 31 115 111 143 108 71 107 119 63 128 96 131 18 59 143 0
C42 143 78 101 118 96 72 33 170 135 127 134 151 68 62 15 166 48 134 109 104 141 156 210 187 171 57 152 158 173 133 119 48 93 88 183 130 178 60 106 153 61 0
62
c8 Chicago, Ill.
c9 Milwaukee, Wis.
c10 Minneapolis, Minn.
c11 Pierre, S.D.
c12 Bismarck, N.D.
c13 Helena, Mont.
c14 Seattle, Wash.
c15 Portland, Ore.
c16 Boise, Idaho
c17 Salt Lake City, Utah
c18 Carson City, Nevada
c19 Los Angeles, Calif.
c20 Phoenix, Ariz.
c21 Santa Fe, N.M.
c22 Denver, Colo.
c23 Cheyenne, Wyo.
c24 Omaha, Neb.
c25 Des Moines, Iowa
c26 Kansas City, Mo.
c27 Topeka, Kans.
c28 Oklahoma City, Okla.
c29 Dallas, Tex.
c30 Little Rock, Ark.
c31 Memphis, Tenn.
c32 Jackson, Miss.
c33 New Orleans, La.
c34 Birmingham, Ala.
c35 Atlanta, Ga.
c36 Jacksonville, Fla.
c37 Columbia, S.C.
c38 Raleigh, N.C.
c39 Richmond, Va.
c40 Washington, D.C.
c41 Boston, Mass.
c42 Portland, Me.
c1 Manchester, N.H.
c2 Montpelier, Vt.
c3 Detroit, Mich.
c4 Cleveland, Ohio
c5 Charleston, W.Va.
c6 Louisville, Ky.
c7 Indianapolis, Ind.
64
C36 São Jorge do Ivaí
C11 Floraí
C27 Nova Esperança
C29 Paranacity
C8 Cruzeiro do Sul
C1 Alto Paraná
C30 Paranavaí
C40 Terra Rica
C20 Loanda
C33 Querência do Norte
C17 Ivaté
C14 Icaraíma
C32 Pérola
C2 Altônia
C15 Iporã
C42 Umuarama
C7 Cruzeiro do Oeste
C26 Moreira Sales
C13 Goioerê
C41 Tuneiras do Oeste
C38 Tapejara
C6 Cidade Gaúcha
C34 Rondon
C19 Japurá
C5 Cianorte
C39 Terra Boa
C10 Engenheiro Beltrão
C31 Peabiru
C3 Araruna
C4 Campo Mourão
C21 Luiziana
C16 Iretama
C35 São João do Ivaí
C23 Mandaguari
C24 Marialva
C37 Sarandi
C25 Maringá
C22 Mandaguaçu
C28 Paiçandu
C12 Floresta
C18 Ivatuba
C9 Doutor Camargo
66
c1 Manchester, N.H.
c2 Montpelier, Vt.
c3 Detroit, Mich.
c4 Cleveland, Ohio
c5 Charleston, W.Va.
c6 Louisville, Ky.
c7 Indianapolis, Ind.
c8 Chicago, Ill.
c9 Milwaukee, Wis.
c10 Minneapolis, Minn.
c11 Pierre, S.D.
c12 Bismarck, N.D.
c13 Helena, Mont.
c14 Seattle, Wash.
c15 Portland, Ore.
c16 Boise, Idaho
c17 Salt Lake City, Utah
c18 Carson City, Nevada
c19 Los Angeles, Calif.
c20 Phoenix, Ariz.
c21 Santa Fe, N.M.
c22 Denver, Colo.
c23 Cheyenne, Wyo.
c24 Omaha, Neb.
c25 Des Moines, Iowa
c26 Kansas City, Mo.
c27 Topeka, Kans.
c28 Oklahoma City, Okla.
c29 Dallas, Tex.
c30 Little Rock, Ark.
c31 Memphis, Tenn.
c32 Jackson, Miss.
c33 New Orleans, La.
c34 Birmingham, Ala.
c35 Atlanta, Ga.
c36 Jacksonville, Fla.
c37 Columbia, S.C.
c38 Raleigh, N.C.
c39 Richmond, Va.
c40 Washington, D.C.
c41 Boston, Mass.
c42 Portland, Me.
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41
C2 8
C3 39 45
C4 37 47 9
C5 50 49 21 15
C6 61 62 21 20 17
C7 58 60 16 17 18 6
C8 59 60 15 20 26 17 10
C9 62 66 20 25 31 22 15 5
C10 81 81 40 44 50 41 35 24 20
C11 103 107 62 67 72 63 57 46 41 23
C12 108 117 66 71 77 68 61 51 46 26 11
C13 145 149 104 108 114 106 99 88 84 63 49 40
C14 181 185 140 144 150 142 135 124 120 99 85 76 35
C15 187 191 146 150 156 142 137 130 125 105 90 81 41 10
C16 161 170 120 124 130 115 110 104 105 90 72 62 34 31 27
C17 142 146 101 104 111 97 91 85 86 75 51 59 29 53 48 21
C18 174 178 133 138 143 129 123 117 118 107 83 84 54 46 35 26 31
C19 185 186 142 143 140 130 126 124 128 118 93 101 72 69 58 58 43 26
C20 164 165 120 123 124 106 106 105 110 104 86 97 71 93 82 62 42 45 22
C21 137 139 94 96 94 80 78 77 84 77 56 64 65 90 87 58 36 68 50 30
C22 117 122 77 80 83 68 62 60 61 50 34 42 49 82 77 60 30 62 70 49 21
C23 114 118 73 78 84 69 63 57 59 48 28 36 43 77 72 45 27 59 69 55 27 5
C24 85 89 44 48 53 41 34 28 29 22 23 35 69 105 102 74 56 88 99 81 54 32 29
C25 77 80 36 40 46 34 27 19 21 14 29 40 77 114 111 84 64 96 107 87 60 40 37 8
C26 87 89 44 46 46 30 28 29 32 27 36 47 78 116 112 84 66 98 95 75 47 36 39 12 11
C27 91 93 48 50 48 34 32 33 36 30 34 45 77 115 110 83 63 97 91 72 44 32 36 9 15 3
C28 105 106 62 63 64 47 46 49 54 48 46 59 85 119 115 88 66 98 79 59 31 36 42 28 33 21 20
C29 111 113 69 71 66 51 53 56 61 57 59 71 96 130 126 98 75 98 85 62 38 47 53 39 42 29 30 12
C30 91 92 50 51 46 30 34 38 43 49 60 71 103 141 136 109 90 115 99 81 53 61 62 36 34 24 28 20 20
C31 83 85 42 43 38 22 26 32 36 51 63 75 106 142 140 112 93 126 108 88 60 64 66 39 36 27 31 28 28 8
C32 89 91 55 55 50 34 39 44 49 63 76 87 120 155 150 123 100 123 109 86 62 71 78 52 49 39 44 35 24 15 12
C33 95 97 64 63 56 42 49 56 60 75 86 97 126 160 155 128 104 128 113 90 67 76 82 62 59 49 53 40 29 25 23 11
C34 74 81 44 43 35 23 30 39 44 62 78 89 121 159 155 127 108 136 124 101 75 79 81 54 50 42 46 43 39 23 14 14 21
C35 67 69 42 41 31 25 32 41 46 64 83 90 130 164 160 133 114 146 134 111 85 84 86 59 52 47 51 53 49 32 24 24 30 9
C36 74 76 61 60 42 44 51 60 66 83 102 110 147 185 179 155 133 159 146 122 98 105 107 79 71 66 70 70 60 48 40 36 33 25 18
C37 57 59 46 41 25 30 36 47 52 71 93 98 136 172 172 148 126 158 147 124 121 97 99 71 65 59 63 67 62 46 38 37 43 23 13 17
C38 45 46 41 34 20 34 38 48 53 73 96 99 137 176 178 151 131 163 159 135 108 102 103 73 67 64 69 75 72 54 46 49 54 34 24 29 12
C39 35 37 35 26 18 34 36 46 51 70 93 97 134 171 176 151 129 161 163 139 118 102 101 71 65 65 70 84 78 58 50 56 62 41 32 38 21 9
C40 29 33 30 21 18 35 33 40 45 65 87 91 117 166 171 144 125 157 156 139 113 95 97 67 60 62 67 79 82 62 53 59 66 45 38 45 27 15 6
C41 3 11 41 37 47 57 55 58 63 83 105 109 147 186 188 164 144 176 182 161 134 119 116 86 78 84 88 101 108 88 80 86 92 71 64 71 54 41 32 25
C42 5 12 55 41 53 64 61 61 66 84 111 113 150 186 192 166 147 180 188 167 140 124 119 90 87 90 94 107 114 77 86 92 98 80 74 77 60 48 38 32 6
Recommended