Você está na página 1de 13

ALGORITMOS GENÉTICOS E PROBLEMAS DE TRANSPORTE

Rubens Gonçalves Feitosa1


Prof ª Elda Sena2
1
Bacharelando em Sistema de Informação
Centro Universitário do Maranhão – UniCEUMA – Campus Anil
2
Professora especialista em educação pelo Centro Universitário do Maranhão – UniCEUMA

Resumo: Apresenta-se neste artigo a relação entre algoritmos genéticos e problemas de transporte em que o
número de parâmetros que influenciam no processo apresenta-se em quantidade relativamente elevado, onde as
forma convencionais de computação mostram-se pouco eficientes, dada a complexidade do processamento a ser
realizado e/ou a função definidora do problema não poder ser expressa analiticamente ou ser não-linear.
Palavras-chave: Algoritmos, SIMPLEX, alocação de recursos, roteamento de transporte.

Zusammenfassung: Es ist in diesem artikel vorgestellt wird die beziehung zwischen genetischen algorithmen
und verkehr problemen, bei denen die anzahl der parameter, die einfluss auf den prozess kommt in den relativ
hohen, in denen die konventionelle art der berechnung waren etwas wirksam, angesichts der komplexität der
verarbeitung durchgeführt werden und/oder eine funktion zu definieren, kann das problem nicht analytisch
ausgedrückt werden oder nicht-linear.
Stichworte: Algorithmen, SIMPLEX, Ressourcenallokation, transport-routing.

1 INTRODUÇÃO

O planejamento de custos de logística é uma das etapas mais complexas do processo


administrativo, tanto na entrega de produtos e serviços quanto na distribuição das equipes de
funcionários para realização de uma tarefa. Muitos administradores dão pouca importância a esse
planejamento, contando com a improvisação ou “experiência”, sem que seja aplicada qualquer
metodologia que otimize a distribuição de recursos de transporte, minimizando o custo final do
produto ou serviço.
Técnicas computacionais para análise de problemas de transporte que envolvem Pesquisa
Operacional já são amplamente cobertas em vários estudos, mas se aplicam a questões com baixa
complexidade, com pequena quantidade de variáveis e cuja função pode ser escrita linearmente. Por
outro lado, há situações em que nem mesmo as funções que definem o problema podem ser expressas
analiticamente ou, mesmo quando podem, a quantidade de parâmetros é relativamente elevada. Nestes
casos, ferramentas computacionais comuns tendem a comportar-se apenas como sistemas de busca
exaustiva.
Nesses ambientes, a procura por alternativas automatizadas que gerem respostas satisfatórias
com menor custo operacional é de extrema importância no planejamento orçamentário das
instituições, principalmente aquelas que aplicam ou trabalham a logística. Uma dessas alternativas tem
sido mais estudada e, consequentemente, mais aplicada, principalmente a partir da segunda metade da
década de 1980. Trata-se dos algoritmos genéticos – AGs.
Os AGs são implementados usando conceitos da biologia. Baseiam-se nos princípios da teoria
da seleção natural de Darwin – sobrevivência dos mais adaptados – e nas leis de Mendell. Tais
implementações tornam os algoritmos genéticos muito eficientes na resolução de problemas de
otimização, nos quais a estatística, a probabilidade e a análise de dados formam o que chamamos de
heurística. Tais características tornam os AGs mecanismos extremamente úteis no trabalho com
modelos que envolvem estruturas com graus elevados de complexidade, que é o caso explicitado no
início desse texto.
Por esses motivos procuraremos mostrar, neste artigo, as relações dos algoritmos genéticos
com a resolução de problemas de alocação de recursos com alta complexidade, como logística na
entrega de combustíveis por uma distribuidora, distribuição de vendedores entre clientes e
determinação de funcionários por setores e por tarefas, todos envolvendo uma gama elevada de
variáveis.

2 ALGORITMOS GENÉTICOS (AGs)

Algoritmos genéticos são formas de codificação inspirados nas teorias evolutivas de Darwin e
foram introduzidos por John Holland e seus alunos em meados da década de 1970, o que resultou no
livro “Adaption in Natural and Artifical Systems” publicado em 1975. Conceitos como evolução,
cruzamento (crossover) e mutação são amplamente usados quando se lida com AGs.
AGs podem ser usados para tratar problemas de diversos tipos e cujos parâmetros podem ser
representados através de cadeias de caracteres, números reais ou sequências de bits. Pela própria forma
como os computadores trabalham, a codificação binária é a preferida.

Cromossomo

0 1 0 1 1 0 0 1

Gene

Figura 1: Representação de estrutura de dados no AG


Quando estamos trabalhando na resolução de um problema complexo e – como acontece na
maioria das aplicações de algoritmos genéticos – cuja representação funcional contém muitos
parâmetros ou não pode ser expressa analiticamente, geralmente buscamos uma solução que seja
melhor que as demais disponíveis. O conjunto formado por todas as possíveis respostas para um
problema é chamado espaço de busca, de soluções ou de estados.
O tratamento de um problema com algoritmos genéticos inicia-se com a determinação de um
conjunto de soluções iniciais (escolhidas aleatoriamente, mas dentro de certas restrições) que forma o
espaço de busca. Cada possível resposta dentro desse conjunto é um cromossomo, o qual é composto
por genes. Esses genes representam parâmetros que devem ser ajustados para melhorar a solução e,
consequentemente, aperfeiçoar a função analisada.
A obtenção de valores melhores para resolver nossa questão, que é representada por uma
função objetivo, dá-se através do uso de alguns operadores próprios dos AGs. Esses operadores são o
cruzamento, a mutação e a seleção.
O processo começa tomando-se aleatoriamente um par de cromossomos da população inicial e
a eles é aplicado o cruzamento, onde uma parte dos genes de cada pai é usada para gerar dois novos
indivíduos. Quando esse procedimento tiver sido aplicado a todos os membros da população inicial
teremos um novo grupo de indivíduos – ou geração –, a qual sofrerá nova ação do algoritmo até que
alguma condição seja satisfeita. Essa condição geralmente baseia-se no número de gerações criadas ou
na qualidade da solução encontrada – o quão boa é a mesma. Uma solução é considerada “boa”
quando sua adaptação (fitmess) ao modelo estudado é adequada. E quanto mais apropriada, maior o
fitness. A figura 2 abaixo representa um processo de cruzamento.

Figura 2: Operação de crossover em um AG


Fonte: http://www.geneticprogramming.com/Tutorial/index.html
Tabela 1: Cruzamento
Cromossomo 1 1001 1001
Cromossomo 2 0110 0110
Descendente 1 1001 0110
Descendente 2 0110 1001

Para garantir que as soluções não convirjam muito rapidamente para um máximo (ou mínimo)
local da função e que sejam testados cromossomos que estejam fora do espaço de busca que tende a
uniformidade, é aplicada a mutação. Esse operador faz com um gene escolhido aleatoriamente seja
alterado. Ele se torna um novo membro da população e poderá ser avaliado e cruzado com os demais.
Tabela 2: Mutação no descendente 1
Antes Depois
Descendente 1 10010110 10010010

A mutação é exemplificada na figura 3 que se segue.

Figura 3: Processo de mutação


Fonte: http://www.geneticprogramming.com/Tutorial/index.html

Verificar se um membro da população se ajusta como uma melhor resposta ao problema é


executada por uma função de aptidão, aos quais são submetidos todos os elementos de cada geração.
Após cada componente passar pela função, é criado um ranking e aqueles melhor posicionados têm
maiores chances de serem cruzados e de seus descendentes (offspring) fazerem parte da próxima

( ) representa a função de adaptação de um cromossomo S e ∑ f (s


M
geração. Se f si ( t ) i j (t ) ) é a soma
j =1

das adaptações dos membros da população, então a probabilidade de um indivíduo ser copiado para a
próxima geração é dada por
f ( si (t ) )
M
. (KOZA, 1992)
∑ f (s
j =1
j (t ) )

Ao elaborar um processo de resolução que envolva algoritmos genéticos, as taxas de


cruzamento e mutação devem ser cuidadosamente analisadas. Como o AG é primordialmente
estocástico, essas taxas são tratadas como probabilidades. A probabilidade de cruzamento pode situar-
se entre 0 e 100%, onde no primeiro caso cada nova geração é uma cópia exata da anterior e no
segundo, a nova geração é totalmente formada por cruzamento entre indivíduos. Estudos mostram que
uma probabilidade de crossover em torno de 95% é a ideal na maioria dos casos, uma vez que, como
dito anteriormente, manter algumas cópias das melhores soluções melhora a otimização. No caso da
probabilidade de mutação, esta deve ser mantida num patamar relativamente baixo – menor que 5% –,
pois sua utilidade é garantir que o AG não caia num extremo local muito rapidamente.
Um fato relevante a ser analisado aqui é como evitar que boas soluções se percam durante os
sucessivos cruzamentos e mutações em cada geração. Uma forma de conseguir isso é fazer com que
indivíduos com alto grau de aptidão sejam inteiramente copiados para a próxima geração. A isso dá o
nome de elitismo.
Claramente devem ser feitas algumas escolhas iniciais para implementar nossos AGs.
Primeiramente devemos considerar o tamanho de nossa população. Populações muito pequenas dão
pouca margem para cruzamentos e o espaço de busca será pouco explorado. Usando populações muito
grandes teremos um elevado consumo de processamento, visto que o número de interações cresce
exponencialmente com a quantidade de cromossomos em cada geração. Pesquisas revelam que uma
população composta por aproximadamente 30 membros são uma boa escolha para a maioria dos
problemas.
A forma como são escolhidos os cromossomos a serem cruzados em cada população varia de
acordo com o problema, mas podemos citar seleção por roleta, Boltzman, campeonato, dentre outros.
Analisaremos os métodos roleta e classificação.
Na seleção por roleta, a escolha do indivíduo baseia-se na sua adequação. Quanto maior essa
adequação, maior será a chance do mesmo ser escolhido para o cruzamento. Os cromossomos são
divididos em grupos em que suas adaptações estão dentro de certas faixas. Por exemplo, digamos que
as aptidões possam variar entre 1 e 10 e que a roleta é divida em intervalos de duas unidades e que
cada um dessas fatias terá seu tamanho proporcional às aptidões. Quanto maior a quantidade de
indivíduos na faixa 1-2, maior será sua fatia na roleta e, obviamente, maior será a chance se um
elemento ser escolhido dentro daquela região.

Figura 4: Seleção por roleta – Seleção proporcional a aptidão


Fonte: http://www.cin.ufpe.br/~tbl/Aulas/SI/ag-tbl.ppt#270,21

Um problema enfrentado no uso do método da roleta surge quando há grande diferença de


aptidão entre os grupos de indivíduos. Isso faz com que certos cromossomos tenham uma chance
excessivamente baixa de serem escolhidos para cruzamento. Uma alternativa é usar o método de
classificação para realizar o sorteio dos elementos dentro de cada geração. Nessa metodologia, os
grupos são classificados em ordem decrescente de acordo com sua adequação. Assim, o grupo com
menor adequação recebe a classificação 1, o segundo recebe 2 e assim sucessivamente até a última
classe. As fatias de cada grupo são proporcionais às suas classificações.
Observemos a diferença entre os dois métodos no estabelecimento das chances de escolha de
cromossomos.

Figura 5: Situação antes da Classificação (gráfico da adequação)


Fonte: http://www.obitko.com/tutorials/genetic-algorithms/portuguese/selection.php

Figura 6: Situação depois da Classificação (gráfico dos números de ordem)


Fonte: http://www.obitko.com/tutorials/genetic-algorithms/portuguese/selection.php

A forma básica de um algoritmo genético é a seguinte:


1 Início Criar uma população com n indivíduos (adequados ao problema) aleatoriamente.
2 Aptidão Avaliar a aptidão de cada cromossomo da população.
3 Nova geração Até que se tenha uma nova população, executar os passos seguintes.
3.1 Seleção Escolher dois cromossomos para serem pais de acordo com sua aptidão.
3.2 Crossover Com a probabilidade, cruzar os pais para obter-se a geração seguinte.
Caso não haja cruzamento, a descendência será uma cópia dos pais.
3.3 Mutação Com a probabilidade, modificar os genes de um cromossomo para obter
indivíduo alterado
3.4 Aceitação Por os novos indivíduos na nova geração.
4 Substituição Usar a nova geração na próxima execução do algoritmo.
5 Critério de parada Se a condição final for atingida, pare e devolva a melhor solução encontrada.
6 Repetir Retornar ao passo 2.

O fluxograma representativo de um AG é dado a seguir, conforme a figura 7:


Figura 7: Fluxograma de execução de um AG
Fonte: http://www.geneticprogramming.com/Tutorial/index.html

3 ALGORITMOS GENÉTICOS E PROGRAMAÇÃO LINEAR

Problemas de otimização combinatória são resolvidos por diversas técnicas, computacionais


ou não. Os algoritmos genéticos são classificados na literatura como metaheurísticas e têm resolvido
limitações históricas dos algoritmos convencionais de procura heurística, como, por exemplo, as
interrupções antecipadas em máximos (ou mínimos) locais distantes da melhor resposta.
Questões de otimização combinatória surgem quando se precisa escolher um subconjunto de
dados que obedeça a certos critérios a partir de um conjunto com elementos discretos e finitos. Os
problemas logísticos, tais como distribuição de mercadorias e transporte coletivo são encarados como
de otimização combinatória, pois aparecem, de forma típica, em distribuições descontínuas, uma vez
que estão em um espaço em que o número de locais e os caminhos entre eles são finitos.
Uma grande motivação para os estudos nesse campo é a intratabilidade da maioria das
questões que envolvem otimização combinatória. Não existem atualmente modelos gerais que os
resolvam eficientemente, considerando fatores como memória e capacidade de processamento de
sistemas computacionais.
Tomadas de decisão são geralmente baseadas em alguma forma de busca em que se procura a
melhor solução dentre as mais factíveis, isto é, que atendam certas condições. Um algoritmo cuja
tomada de decisões é fundamentada em um resultado obtido aleatoriamente é dito probabilístico ou
estocástico. Caso contrário é chamado determinístico. Desse modo, consideremos um problema de
otimização combinatória – como a escolha da melhor distribuição de rotas de transporte com menor
custo – onde, a partir de uma resposta aceitável, procuramos outra mais efetiva. Essas questões podem
ser tratadas a partir de modelos que implementam algoritmos de otimização.
Algoritmos genéticos formam uma classe muito adaptável e potente usados para trabalhar com
questões de otimização, pois se caracterizam principalmente por não se prenderem a regiões de
mínimo (ou máximo) local, explorando outras áreas do espaço de busca, aumentando a chance de se
obter um ótimo global.
Outra forma de trabalhar com problemas de otimização é através da programação linear, cujas
aplicações são as mais diversificadas, como na economia, indústria, medicina etc. Tais questões de
logística que envolvem programação linear caracterizam-se por possuírem a função que as representa
– descrita analiticamente – e as restrições impostas às mesmas expressas como funções lineares. E
dentre as várias metodologias, a SIMPLEX é a mais popular, pois encontra-se extrema facilidade em
manipular a representação do problema em sua forma padrão. Desse modo, o método consiste em
encontrar o melhor valor que obedeça as restrições e otimize a função objetivo.
Um problema encontrado quando da utilização do SIMPLEX é que no pior caso seu tempo de
convergência para uma solução é exponencial, o que é algo a ser evitado na escolha de um algoritmo.
No entanto, na maior parte das aplicações o método apresenta desempenho relativamente adequado.
De forma geral, o algoritmo converge para um resultado apropriado de maneira mais rápida que no
pior caso. (SILVA, 2009)
Um problema de programação linear interpretado geometricamente nos traz um conjunto onde
são encontradas as soluções possíveis que satisfazem às restrições impostas ao mesmo. Dentro desse
conjunto, os pontos extremos são analisados através da função objetivo até que seja determinado um
valor ótimo. Apesar de o SIMPLEX vasculhar os pontos extremos do conjunto, não necessariamente
todos serão explorados para encontrar o melhor resultado.
Uma comparação em termos de qualificar e/ou quantificar as diferenças entre os algoritmos
genéticos e a programação linear em aplicações de otimização, não é inteiramente adequada, pois cada
método apresenta suas particularidades. Os AGs se prestam mais especificamente a problemas que
envolvem grande número de parâmetros e cujas funções, quando podem ser expressas analiticamente,
não são lineares. No caso de questões com menor quantidade de variáveis e funções e restrições
inerentemente do 1º grau, a PL é a mais indicada.

4 PROBLEMAS DE TRANSPORTE

A forma de resolução de um problema usando alguma forma de análise computacional


depende da própria natureza da questão. No caso relacionado à alocação de recursos com menor custo
de transporte, a aplicação de AGs mostra-se mais adequada, principalmente quando o número de
variáveis envolvidas é elevado ou a função a ser analisada não possui uma forma analítica. É o que
ocorre em muitos casos de otimização logística.
Há diversos tipos de problemas de transporte no âmbito da logística, todos de grande
importância por influenciarem os custos envolvidos no fornecimento de um produto e/ou serviço. Por
exemplo, qual o melhor tamanho de frota de veículos de entrega que deve ser mantido para garantir o
abastecimento dos clientes de um certo fornecedor, ou qual a melhor rota a ser seguida para que o
custo da entrega seja minimizado.
Ambos os exemplos citados anteriormente são descritos como de complexidade de tempo não
polinomial e, por isso, não há ainda uma ferramenta eficiente que os resolva de forma exata. Além
disso, incorre-se na maioria absoluta das vezes em situações em que as funções que representam cada
situação não podem ser representadas analiticamente ou, quando o podem, não são lineares.
Os casos de problemas de alocação de recursos em que tanto a função objetivo quanto as
restrições são lineares, podem ser resolvidos por programação linear, onde são usadas técnicas como o
SIMPLEX ou o método do canto noroeste. Uma aplicação comum é o caso em que temos um pequeno
número de origens e destinos, sendo a quantidade de fontes igual à de consumidores e cada uma
daquelas deve entregar recursos em todos os destinos de forma a minimizar os custos totais de
transporte.
Os casos em que temos quantidades distintas de fornecedores e clientes e nos quais os custos
são influenciados por muitos fatores que devem ser levados em consideração, não podem ser
solucionados por métodos de programação linear, ou por não poderem ser implementados
computacionalmente para esses casos ou por exigirem poder e tempo de processamento além dos
aceitáveis. Para esses casos são utilizadas outras metodologias de resolução, como os já citados
algoritmos genéticos. Por se basearem em fatores como probabilidade e estatística, os AGs são
chamados metaheurísticas e, por isso, se adéquam significativamente a obtenção da melhor solução –
não necessariamente uma solução ótima ou exata – para problemas de transporte de portes médios e
grandes que envolvem relativa complexidade.
As soluções obtidas a partir de softwares que implementam otimização por metaheurísticas
podem ser usadas como entradas para programas que permitem visualizar a aplicação das respostas. A
exemplo, podemos citar o GIS (Geospatial Information System ou Sistema de Informações
Geoespaciais) ArcView®, que possibilita ver através de um mapa as rotas de entrega de produtos por
um fornecedor a diversos clientes, sendo esses caminhos os de menor custo obtidos pela ferramenta de
otimização. Com a possibilidade de visualizar os dados de forma mais realística, os usuários podem
fazer uma análise subjetiva mais sólida e, assim, tomar decisões de maneira mais eficiente. Uma tela
de exemplo do software é apresentada na figura 8 abaixo.
Figura 8: ArcView GIS
Fonte: NARCICIO e LORENA, 2003

Neste artigo, temos como foco o roteamento de entregas de produtos/serviços de uma fonte a
diversos destinatários, levando em consideração limitações como capacidade de carga do veículo
transportador, consumo de combustível e tempo de entrega. Ignorar-se-á elementos como janelas de
tempo causados por inatividade, congestionamento ou danos no veículo, por exemplo. Esse é, por
conseguinte, uma questão muito semelhante ao clássico problema do caixeiro viajante, onde um
indivíduo deve percorrer um certo número de cidades pela melhor trajetória possível e,
consequentemente, consumindo menos recursos. Esse problema é uma típica aplicação cuja resposta
não é obtida por algoritmos determinísticos, mas sim com algoritmos genéticos, pois o tamanho do
espaço de buscas cresce exponencialmente, de acordo com o número de cidades, pois existem

trajetórias possíveis a serem escolhidas, partindo de uma localidade qualquer, sendo n o número de
nós. Um exemplo é ilustrado na figura 9 abaixo.

Figura 9: Possíveis trajetos a partir da localidade 4


Fonte: http://pt.wikipedia.org

De forma geral, o problema da menor distância a ser percorrida para atender a um certo
número de clientes pode ser expresso pela seguinte configuração matemática: seja um conjunto C =
{c1, c2, …, cn) das n localidades a serem visitadas e uma matriz de distâncias (ρij), sendo esta matriz
expressa por ρij = ρ(ci, cj) (i, j ∈ {1, …, n}, ρij = ρji, ρii = 0). O problema consiste em encontrar a
permutação π pertencente ao espaço de soluções Sn = {s: {1, …, n}  {1, …, n}} que minimize a
distância do trajeto representada pela função objetivo f: Sn  IR simbolizada por

A imagem seguinte (figura 10) mostra a determinação de um percurso de roteamento


preferencial usando AGs, onde temos treze nós. A solução é apresentada em etapas (1 a 4) e ao final
temos a que foi considerada ótima.

Figura 10: Solução de um problema de transporte com AG


Fonte: http://pt.wikipedia.org

A título de comparação, há outras metaheurísticas que podem ser aplicadas a problemas de


roteamento de entregas, mas cuja eficiência é inferior aos AGs. Assim, temos, por exemplo, as
heurísticas de Clark e Wright e de Mole e Jameson (HEINEN & OSÓRIO, 2006). A heurística de
Clark e Wright foi um dos primeiros algoritmos a solucionar o problema do roteamento de veículos,
mas possui como desvantagem o fato de só levar em consideração caminhos que formam uma
poligonal convexa, fazendo com que nós internos sejam excluídos no teste de economia. Sua
importância diz respeito ao fato de ter aberto caminho para o desenvolvimento de algoritmos
melhores. É o caso da heurística de Mole e Jameson, que é bem mais elaborada e obtém resultados
muito superiores. Sua complexidade de implementação computacional é o principal obstáculo que este
algoritmo enfrenta.

5 CONSIDERAÇÕES FINAIS

Como tentamos mostrar nas discussões aqui apresentadas, os problemas de transporte


representam uma faixa de questões muito importante nos dias atuais. Procurar a melhor forma de
distribuir recursos de transporte de bens, serviços e pessoas é uma parte primordial no planejamento
das organizações, seja em qual nível for.
Uma vez que a complexidade de tais problemas consome uma grande quantidade de recursos
computacionais e, na maioria dos casos, os mesmos não podem ser resolvidos usando ferramentas
determinísticas que forneçam resultados exatos, a busca por outras formas de resolução é de suma
importância. Como tais, os softwares que implementam a computação evolutiva, mais
especificamente, os algoritmos genéticos, possuem grande vantagem nessa área, uma vez que
trabalham com avaliações de soluções ótimas através de procedimentos de análise baseados em dados
estatísticos e probabilidades. Partindo de um conjunto conhecido onde situam-se as melhores
respostas, podem selecionar a que melhor se adapta ao contexto da questão.
Uma proposta para um trabalho futuro centra-se em analisar o caso onde dar-se-á a utilização
de uma ferramenta de visualização (um GIS, por exemplo) para analisar os dados obtidos a partir de
uma ferramenta de otimização numérica aplicada a um problema de logística de entrega de recursos
em trajetórias não-homogêneas, como é o caso, por exemplo, de um depósito que deve distribuir
mercadorias entre vários clientes.

REFERÊNCIAS

ANDRADE, Eduardo Leopoldino de. Introdução a pesquisa operacional: métodos e modelos para
análise de decisões. 3ª ed. Rio de Janeiro: LTC, 2004.
CARVALHO, Marco Antonio Moreira de. SANTOS, André Gustavo dos. Algoritmo genético
aplicado à seleção de colunas no problema de alocação de tripulações. Disponível em
<http://www.bibl.ita.br/xiiencita/Comp-01.pdf>. Acessado em 11 de outubro de 2009.
CHAKROBORTY, Partha. Optimal Routing and Scheduling in Transportation: Using Genetic
Algorithm to Solve Difficult Optimization Problems. Disponível em
<http://www.iitk.ac.in/directions/directsept04/partha~neww.pdf>. Acessado em 20 de novembro de
2009.
FERREIRA, Tiago A. E. Computação evolutiva. Disponível em
<http://200.17.137.109:8081/xiscanoe/courses-1/computacao-evolutiva/introducao-a-computacao-
evolutiva>. Acessado em 13 de setembro de 2009.
HAUPT, Randy L., WERNER, Douglas H. Genetic Algorithms in Electromagnetics. Disponível em
<http://www.scribd.com/doc/13740062/Genetic-Algorithms-in-Electromagnetics>. Acessado em 14
de outubro de 2009.
HEINEN, Milton R., OSÓRIO, Fernando Santos. Algoritmos genéticos aplicados a problemas de
roteamento de veículos. Disponível em
<http://revistaseletronicas.pucrs.br/faced/ojs/index.php/hifen/article/viewFile/3781/2893>. Acessado
em 13 de setembro de 2009.
HEINEN, Milton R., OSÓRIO, Fernando Santos. Uso de Algoritmos Genéticos para a
Configuração Automática do Caminhar em Robôs Móveis. Disponível em
<http://www.natalnet.br/sbc2006/pdf/arq0170.pdf>. Acessado em 13 de setembro de 2009.
KOZA, John R. Genetic Programming: on the programming of computers by means of natural
selection. Cambridge, MA: The MIT Press, 1992.
KUMAR, A. John Sanjeev et alii. Intelligent transport route planning using genetic algorithms in
path computation algorithms. Disponível em <http://www.eurojournals.com/ejsr_25_3_11.pdf>.
Acessado em 14 de outubro de 2009.
NARCISO, Marcelo Gonçalves. LORENA, Luiz Antônio Nogueira. Uso de algoritmos genéticos em
sistema de apoio a decisão para alocação de recursos no campo e na cidade. Disponível em
<http://www.sbiagro.org.br/pdf/iii_congresso/Artigo30.pdf>. Acessado em 25 de outubro de 2009.
NEVES, Carolina de Lima. Calibração de parâmetros de modelos hidráulicos de redes de
distribuição de água para estudos de operação de rede. Disponível em
<http://biblioteca.universia.net/ficha.do?id=33723488>. Acessado em 14 de outubro de 2009.
PITOMBEIRA Neto, Anselmo Ramalho. Procedimento para a geração de arranjos físicos
distribuídos baseado em otimização da simulação e algoritmos genéticos. Disponível em
<http://www.abepro.org.br/biblioteca/ENEGEP2007_TR620464_9925.pdf>. Acessado em 11 de
novembro de 2009.
PUNCH, William F. et alii. Design using genetic algorithms – some results for laminated composite
structures. Disponível em <http://www.scribd.com/doc/16593268/AI-Design-Using-Genetic-
Algorithms>. Acessado em 12 de setembro de 2009.

RENNARD, Jean-Philippe. Introduction to Genetic Algorithms. Disponível em


<http://www.rennard.org/alife/english/gavintrgb.html>. Acessado em 21 de setembro de 2009.
SHAMBLIN, James E. STEVENS Jr., G. T. Pesquisa operacional: uma abordagem básica.
Tradução por Carlos Roberto Vieira de Araújo. 1ª ed. São Paulo: Atlas, 1989.
SILVA, Adriano Cavalcanti da. Otimização do transporte em oleoduto utilizando algoritmos
genéticos e programação linear. Disponível em
<http://libdigi.unicamp.br/document/?code=vtls000188670>. Acessado em 02 de setembro de 2009.
SILVA, Ermes Medeiros da et alii. Pesquisa operacional: para os cursos de Economia,
Administração, Ciências Contábeis. 3ª ed. São Paulo: Atlas, 1998.
STANDERSKI, Nelson. Aplicação de algoritmos genéticos paralelos a problemas de grande
escala de vmi – vendor managed inventory. Disponível em
<http://www.decom.ufop.br/prof/marcone/Disciplinas/InteligenciaComputacional/AG-VMI.pdf>.
Acessado em 02 de setembro de 2009.
WHITLEY, Darrell. A genetic algorithm tutorial. Disponível em
<http://www.cs.colostate.edu/~genitor/MiscPubs/tutorial.pdf>. Acessado em 12 de setembro de 2009.
WINIKES, Luiz Carlos. Uma contribuição para ajuste de parâmetros de uma viga “sandwich”.
Disponível em <http://www.biblioteca.pucpr.br/tede/tde_busca/arquivo.php?codArquivo=816>.
Acessado em 23 de outubro de 2009.
<http://www.obitko.com/tutorials/genetic-algorithms/index.php>, acessado em 14 de setembro de
2009.
<http://www.geneticprogramming.com/Tutorial/index.html>. Acessado em 14 de setembro de 2009.