Anda di halaman 1dari 17

CAPITULO 1 – INTRODUÇÃO A ALGORITMOS GENÉTICOS

Neste capítulo, nós introduzimos algoritmos genéticos: o que eles são, de onde vieram e como
eles se comparam e diferem de outros procedimentos de busca. Ilustramos como eles funcionam com um
cálculo manual e começamos a entender seu poder através do conceito de um esquema ou modelo de
similaridade

O QUE SÃO ALGORITMOS GENÉTICOS?

Algoritmos genéticos são algoritmos de busca baseados na mecânica da seleção natural e na genética
natural. Eles combinam a sobrevivência do mais forte entre as estruturas de cordas(strings) com uma
troca de informações estruturada, porém aleatória, para formar um algoritmo de busca com um pouco do
estilo inovador da pesquisa humana. Em cada geração, um novo conjunto de criaturas artificiais (strings)
é criado usando pedaços do mais forte dos antigos; uma parte nova ocasional é tentada para uma boa
medida. Embora randomizados, os algoritmos genéticos não são um simples passeio aleatório. Eles
exploram com eficiência informações históricas para especular sobre novos pontos de pesquisa com um
desempenho aprimorado esperado.
Algoritmos genéticos foram desenvolvidos por John Holland, seus colegas e seus alunos na Universidade
de Michigan. Os objetivos de sua pesquisa têm sido duplos:
(1) abstrair e explicar rigorosamente os processos adaptativos dos sistemas naturais, e
(2) projetar software de sistemas artificiais que retenha os mecanismos importantes dos sistemas naturais.
Essa abordagem levou a descobertas importantes na ciência de sistemas naturais e artificiais.
O tema central da pesquisa sobre algoritmos genéticos tem sido a robustez, o equilíbrio entre
eficiência e eficácia necessária para a sobrevivência no homem).
Ambientes diferentes As implicações da robustez para sistemas artificiais são múltiplas. Se os sistemas
artificiais puderem se tornar mais robustos, redistribuições caras podem ser reduzidas ou eliminadas. Se
níveis mais altos de adaptação podem ser alcançados, os sistemas existentes podem executar suas
unificações (mais longas e melhores projetistas de sistemas artificiais - tanto de software como de
hardware, sejam sistemas de engenharia). , sistemas de computador ou sistemas de negócios - só podem
maravilhar-se com a robustez, a eficiência e a flexibilidade dos sistemas biológicos.Os recursos para auto-
reparo, auto-orientação e reprodução são a regra nos sistemas biológicos, enquanto eles praticamente não
existem. nos sistemas artificiais mais sofisticados.
Assim, somos levados a uma conclusão interessante em que o desempenho robusto é desejado
(e onde não é?), A natureza o faz melhor; os segredos de adaptação e sobrevivência são melhor
aprendidos com o estudo cuidadoso do exemplo biológico. No entanto, não aceitamos o método do
algoritmo genético recorrendo apenas a esse argumento da beleza natural. Algoritmos genéticos são
teoricamente e empiricamente comprovados para fornecer uma busca robusta em espaços complexos. A
principal monografia sobre o tópico é Adaptação em Sistemas Naturais e Artificiais de Holland (1975).
Muitos trabalhos e dissertações estabelecem a validade da técnica em aplicações de otimização e controle
de funções. Estabelecido como uma abordagem válida para problemas que exigem busca eficiente e
eficiente, algoritmos genéticos agora estão encontrando uma aplicação mais ampla nos círculos de
negócios, científicos e de engenharia. As razões por trás do crescente número de aplicativos são claras.
Esses algoritmos são computacionalmente simples, mas poderosos em sua busca por melhorias. Além
disso, eles não são fundamentalmente limitados por suposições restritivas sobre o espaço de busca
(suposições relativas à continuidade, existência de derivadas, unimodalidade e outros assuntos). Nós
investigaremos as razões por trás dessas qualidades atraentes; mas antes disso, precisamos explorar a
robustez dos procedimentos de busca mais amplamente aceitos.

ROBUSTEZ DA OPTIMIZAÇÃO TRADICIONAL


E MÉTODOS DE PESQUISA

Este livro não é um estudo comparativo de técnicas de busca e otimização. No entanto, é importante
questionar se os métodos de busca convencionais atendem aos nossos requisitos de robustez. A literatura
atual identifica três tipos principais de métodos de pesquisa: baseados em cálculo, enumerativos e
aleatórios. Vamos expor cada tipo para ver se as conclusões podem ser tiradas sem testes formais.
Métodos baseados em cálculo foram estudados intensamente. Estes subdividem em duas classes
principais: indireta e direta. Os métodos indiretos buscam os extremos locais resolvendo o conjunto de
equações geralmente não-lineares resultante do ajuste do gradiente da função objetiva igual a zero. Esta é
a generalização multidimensional da noção de cálculo elementar de pontos extremos, como ilustrado na
Fig. 1.1. Dada uma função suave e sem restrições, encontrar um possível pico começa restringindo a
pesquisa a esses pontos com declives de zero em todas as direções. Por outro lado,

FIGURE 1.1 The single-peak function is easy for calculus-based methods.

Os métodos diretos (busca) buscam ótimos locais pulando na função e movendo-se em uma
direção relacionada ao gradiente local. Esta é simplesmente a noção de hill-climbing: para encontrar o
melhor local, escalar a função na direção mais admissível. Embora ambos os métodos baseados em
cálculo tenham sido aprimorados, estendidos, reduzidos e redefinidos, algum raciocínio simples mostra
sua falta de robustez.
Primeiro, ambos os métodos são locais no escopo; os ótimos que procuram são os melhores
em um bairro do ponto atual. Por exemplo, suponha que a Figura 1.1 mostre uma parte do domínio
completo de interesse; uma figura mais completa é mostrada na Fig. 1.2. Claramente, iniciar os
procedimentos de busca ou de localização zero no vizinho do pico inferior fará com que percamos o
evento principal (o pico mais alto). Além disso, quando o pico mais baixo for atingido, melhorias
adicionais devem ser buscadas através do reinício aleatório ou outro truque. Segundo, os métodos
baseados em cálculo dependem da existência de derivadas (valores de inclinação bem definidos). Mesmo
se permitirmos a aproximação numérica de derivadas, essa é uma lacuna grave. Muitos espaços de
parâmetros práticos têm pouco respeito pela noção de um derivada e a suavidade que isso implica Os
teóricos interessados em otimização têm aceitado muito o legado dos grandes matemáticos do século
XVIII e XIX que pintaram um mundo limpo de objetivo quadrático. funções, restrições ideais e derivados
sempre presentes. O mundo real da pesquisa é repleto de descontinuidades e vastos espaços de busca
ruidosos e multimodais, conforme descrito em uma função menos favorável aos cálculos na Figura 1.3.
Não é surpresa que os métodos que dependem dos requisitos restritivos de continuidade e existência
derivada sejam inadequados para todos, exceto para um domínio de problema muito limitado. Por esse
motivo e

FIGURE 1.2 The multiple-peak function causes a dilemma. Which hill should we climb?

Por causa de seu escopo de pesquisa inerentemente local, devemos rejeitar os métodos
baseados em cálculo. Eles são insuficientemente robustos em domínios não intencionais.
Esquemas enumerativos foram considerados em muitos formatos e tamanhos. A ideia é
bastante direta; dentro de um espaço de busca finito, ou um espaço de busca infinita discretizado, o
algoritmo de busca começa a olhar para os valores da função objetiva em cada ponto no espaço, um de
cada vez.

FIGURE 1.3 Many functions are noisy and discontinuous and thus unsuitable for search by traditional
methods.

Embora a simplicidade desse tipo de algoritmo seja atraente e a enumeração seja um tipo
muito humano de pesquisa (quando o número de possibilidades é pequeno), esses esquemas devem ser
descontados na corrida da robustez por uma simples razão: falta de eficiência. Muitos espaços práticos
são simplesmente grandes demais para serem pesquisados um de cada vez e ainda têm a chance de usar as
informações para algum fim prático. Mesmo o programa enumerativo altamente dinâmico de
programação quebra os problemas de tamanho e complexidade moderados, sofrendo de uma doença
melodramaticamente rotulada de "maldição da di- dimensionalidade" por seu criador (Bellman, 1961).
Nós devemos concluir que esquemas enumerativos menos inteligentes são similarmente, e mais
abundantemente, amaldiçoados por problemas reais.
Algoritmos de busca aleatória alcançaram popularidade crescente à medida que os
pesquisadores reconheceram as deficiências dos esquemas baseados em cálculo e enumerativos. No
entanto, caminhadas aleatórias e esquemas aleatórios que buscam e salvam o melhor também devem ser
desconsiderados por causa do requisito de eficiência. Espera-se que buscas aleatórias, no longo prazo, não
façam melhor que esquemas enumerativos. Em nossa pressa em descartar métodos de busca estritamente
aleatórios, devemos ter o cuidado de separá-los das técnicas aleatórias. O algoritmo genético é um
exemplo de um procedimento de busca que usa a escolha aleatória como uma ferramenta para guiar uma
busca altamente exploradora através de uma codificação de um espaço de parâmetros. Usar a escolha
aleatória como uma ferramenta em um processo de pesquisa direcionada parece estranho no início, mas a
natureza contém muitos exemplos. Outra técnica de busca atualmente popular, simulated annealing,
utiliza processos aleatórios para ajudar a guiar sua forma de busca por estados mínimos de energia. Um
livro recente (Davis, 1987) explora as conexões entre simulated annealing e algoritmos genéticos. O
importante a reconhecer nesse ponto é que a busca aleatória não implica necessariamente uma busca sem
rumo.
Embora nossa discussão não tenha sido um exame exaustivo da miríade de métodos de
otimização tradicional, ficamos com uma conclusão um tanto desconcertante: os métodos de busca
convencionais não são robustos. Isso não implica que eles não sejam úteis. Os esquemas mencionados e
inúmeras combinações e permutações híbridas têm sido usadas com sucesso em muitas aplicações; no
entanto, à medida que problemas mais complexos são atacados, outros métodos serão necessários. Para
colocar este ponto em melhor perspectiva, inspecione o espectro de problemas da Fig. 1.4. Na figura, um
índice mítico de eficácia é traçado em um continuum de problema para um esquema especializado, um
esquema enumerativo e um esquema robusto idealizado. A técnica de gradiente funciona bem em sua
classe de problemas restrita, como esperamos, mas se torna altamente ineficiente (se útil) em outro lugar.
Por outro lado, o esquema enumerativo funciona com ineficiência igualitária em todo o espectro de
problemas, como mostrado pela curva de desempenho mais baixa. Muito mais desejável seria uma curva
de desempenho como a rotulada Robust Scheme. Valeria a pena sacrificar o desempenho máximo em um
problema específico para atingir um nível relativamente alto de desempenho em todo o espectro de
problemas. (É claro que, com métodos amplos e eficientes, podemos sempre criar esquemas híbridos que
combinam o melhor do método de busca local com o esquema robusto mais geral. Teremos mais a dizer
sobre essa possibilidade no Capítulo 5.) Em breve veremos como Algoritmos genéticos ajudam a
preencher essa lacuna de robustez.

FIGURE 1.4 Many traditional schemes work well in a narrow problem domain. Enumerative schemes
and random walks work equally inefficiently across a broad spectrum. A robust method works well
across a broad spectrum of problems.
OS OBJETIVOS DA OTIMIZAÇÃO

Antes de examinar a mecânica e o poder de um algoritmo genético simples, precisamos ter


mais clareza sobre nossos objetivos quando dizemos que queremos otimizar uma função ou um processo.
O que estamos tentando realizar quando otimizamos? A visão convencional é bem apresentada por
Beightler, Phillips e Wilde (1979, p 1):
O anseio do homem pela perfeição encontra expressão na teoria da otimização. Estuda como
descrever e atingir o que é o Melhor, uma vez que se sabe medir e alterar a teoria do Bom ou Mau
Teoria da Otimização, engloba o estudo quantitativo dos ótimos e os métodos para encontrá-los.
Assim, a otimização busca melhorar o desempenho em direção a algum ponto ou ponto ideal.
Note que esta definição tem duas partes: (1) buscamos melhorias para abordar alguns (2) pontos ótimos.
Há uma clara distinção entre o processo de melhoria e o destino ou o próprio ideal. No entanto, ao
julgarmos os procedimentos de otimização, geralmente nos concentramos apenas na convergência (o
método atinge o nível ótimo?) E esquecemos completamente do desempenho intermediário. Essa ênfase
se origina das origens da otimização no cálculo. Não é, no entanto, uma ênfase natural.
Considere um tomador de decisões humano, por exemplo, um homem de negócios. Como
julgamos suas decisões? Que critérios usamos para decidir se ele fez um trabalho bom ou ruim?
Geralmente dizemos que ele se saiu bem quando faz as seleções adequadas dentro do tempo e dos
recursos alocados. A bondade é julgada em relação à sua competição. Ele produz um widget melhor? Ele
o comercializa com mais eficiência? Com melhor promoção? Jamais julgamos um homem de negócios
por um critério de obtenção do melhor; a perfeição é muito severa como um capataz. Como resultado,
concluímos que a convergência para o melhor não é uma questão nos negócios ou na maioria das esferas
da vida; Estamos preocupados apenas em fazer melhor em relação aos outros. Assim, se quisermos
ferramentas de otimização mais humanas, somos levados a um reordenamento das prioridades de
otimização. O objetivo mais importante da otimização é a melhoria. Será que podemos chegar a um bom
nível de desempenho "Simon" (Simon, 1969) rapidamente? A obtenção do ótimo é muito menos
importante para sistemas complexos. Seria bom ser perfeito: enquanto isso, só podemos nos esforçar para
melhorar No próximo capítulo, observamos o algoritmo genético para essas qualificações, aqui
descrevemos algumas diferenças importantes entre algoritmos genéticos e métodos mais tradicionais.

COMO SÃO ALGORITMOS GENÉTICOS DIFERENTES DE


MÉTODOS TRADICIONAIS?

Para que os algoritmos genéticos superem seus primos mais tradicionais na busca pela robustez, os AGs
devem diferir de algumas maneiras muito fundamentais. Os algoritmos genéticos são diferentes dos
procedimentos de otimização e busca mais normais de quatro maneiras:

1. Os GAs trabalham com uma codificação do conjunto de parâmetros, não com os parâmetros
em si.
2. GAs buscam de uma população de pontos, não um único ponto.
3. Os GAs usam informações de recompensa (função objetivo), não derivações ou outros
conhecimentos auxiliares.
4. Os GAs usam regras de transição probabilísticas, não regras determinísticas.

Algoritmos genéticos requerem que o conjunto de parâmetros naturais do problema de otimização seja
codificado como uma cadeia de comprimento finito sobre algum alfabeto finito. Como exemplo,
considere o problema de otimização apresentado na Fig. 1.5. Desejamos maximizar a função f ^ x) = x 2
no intervalo inteiro (0, 31). Com métodos mais tradicionais, seríamos tentados a mexer com o parâmetro
x, transformando-o como o botão de espera vertical em um aparelho de televisão, até que nós atingimos o
valor mais alto da função objetivo.Com os GAs, a primeira etapa do nosso processo de otimização é
codificar o parâmetro x como uma string de comprimento finito.Existem várias maneiras de codificar o
parâmetro x, e o Capítulo 3 examina algumas dessas No momento, vamos considerar um problema de
otimização em que a codificação é um pouco mais natural.
Considere o problema de comutação da caixa preta ilustrado na Fig. 1.6. Este problema diz respeito a um
dispositivo de caixa preta com um banco de cinco chaves de entrada. Para cada configuração dos cinco
comutadores, existe um sinal de saída / matematicamente f =
Figure1.6 A black box optimization problem with five on-off switches illustrates the idea of a coding and a payoff
measure. Genetic algorithms only require these two things: they don’t need to know the workings of die black
box

onde 5 é uma configuração específica dos cinco comutadores. O objetivo do problema é configurar os
comutadores para obter o máximo / valor possível. Com outros métodos de otimização, podemos
trabalhar diretamente com o conjunto de parâmetros (as configurações do switch) e alternar os switches
de uma configuração para outra usando as regras de transição de nosso método específico. Com
algoritmos genéticos, primeiro codificamos os switches como uma string de comprimento finito. Um
código simples pode ser gerado considerando-se uma string de cinco 1s e 0s, em que cada um dos cinco
switches é representado por 1, se o switch estiver ligado e 0, se o switch estiver desativado. Com esta
codificação, a cadeia 11110 codifica a configuração onde os primeiros quatro comutadores estão ligados e
o quinto comutador está desligado. Algumas das codificações apresentadas mais tarde não serão tão
óbvias, mas neste ponto reconhecemos que algoritmos genéticos usam codificações. Mais tarde será
aparente que os algoritmos genéticos exploram semelhanças de codificação de uma maneira muito geral,
como resultado, eles são amplamente irrestritos pelas limitações de outros métodos (continuidade,
existência derivada, unimodalidade e assim por diante).

FIGURE 1.6 A black box optimization problem with five on-off switches illustrates the idea of a
coding and a payoff measure. Genetic algorithms only require these two things: they don’t
need to know the workings of die black box

Em muitos métodos de otimização, nos movemos com cuidado de um único ponto no espaço de decisão
para o próximo, usando alguma regra de transição para determinar o próximo ponto. Este método ponto-
a-ponto é perigoso porque é uma receita perfeita para localizar falsos picos em espaços de pesquisa
multimodais (muitos picos). Por outro lado, os AGs trabalham a partir de um rico banco de dados de
pontos simultaneamente (uma população de cordas), escalando muitos picos em paralelo; assim, a
probabilidade de encontrar um pico falso é reduzida em relação a métodos que vão ponto a ponto. Como
exemplo, vamos considerar nosso problema de otimização da caixa preta (Fig. 1.6) novamente. Outras
técnicas para resolver esse problema podem começar com um conjunto de configurações de opção,
aplicar algumas regras de transição e gerar uma nova configuração de opção de avaliação. Um algoritmo
genético começa com uma população de strings e depois gera populações sucessivas de strings. Por
exemplo, no problema dos cinco interruptores, uma partida aleatória usando lançamentos de moedas
sucessivos (head = 1, tail = 0) pode gerar a população inicial de tamanho n = 4 (pequena pelos padrões de
algoritmo genético):

01101
11000
01000
10011
Muitas técnicas de pesquisa exigem muitas informações auxiliares para funcionar corretamente. Por
exemplo, as técnicas de gradiente precisam de derivadas (calculados analiticamente ou numericamente)
para poderem subir o pico atual, e outros procedimentos locais de busca, como as técnicas gananciosas de
otimização combinatória (Lawler, 1976; Syslo, Deo e Kowalik, 1983) requerem acesso à maioria, senão a
todos os parâmetros tabulares. Em contraste, os algoritmos genéticos não precisam de toda essa
informação auxiliar: os AGs são cegos. Para realizar uma busca efetiva por estruturas melhores e
melhores, elas só exigem valores de recompensa (valores de função objetivo) associados a strings
individuais. Essa característica torna um GA um método mais canônico do que muitos esquemas de
pesquisa. Afinal, todo problema de pesquisa tem uma métrica (ou métrica) relevante para a pesquisa; no
entanto, diferentes problemas de pesquisa têm formas muito diferentes de informações auxiliares.
Somente se nos recusarmos a usar essa informação auxiliar podemos esperar desenvolver os esquemas de
base ampla que desejamos. Por outro lado, a recusa em usar conhecimento específico quando ele existe
pode colocar um limite superior no desempenho de um algoritmo quando ele vai frente a frente com
métodos projetados para esse problema. O Capítulo 5 examina maneiras de usar informações não pagas
nos chamados algoritmos genéticos direcionados pelo conhecimento; No entanto, neste ponto,
enfatizamos a importância da hipótese de cegueira para a robustez do algoritmo genético puro.

Ao contrário de muitos métodos, os GAs usam regras de transição probabilísticas para orientar
sua pesquisa. Para pessoas familiarizadas com métodos determinísticos, isso parece estranho, mas o uso
da probabilidade não sugere que o método seja uma busca aleatória simples; isso não é tomada de decisão
no lançamento de uma moeda. Algoritmos genéticos usam a escolha aleatória como uma ferramenta para
guiar uma busca em direção a regiões do espaço de busca com provável melhoria.
Tomadas em conjunto, essas quatro diferenças - uso direto de uma codificação, pesquisa de uma
população, cegueira para informações auxiliares e operadores randomizados - contribuem para a robustez
de um algoritmo genético e vantagem resultante sobre outras técnicas mais comumente usadas. A
próxima seção apresenta um algoritmo genético simples de três operadores.

O ALGORITMO GENETICO SIMPLES

A mecânica de um algoritmo genético simples é surpreendentemente simples, envolvendo nada mais


complexo do que copiar strings e trocar strings parciais. A explicação de por que esse processo simples
funciona é muito mais sutil e poderosa. Simplicidade de operação e poder de efeito são duas das
principais atrações da abordagem do algoritmo genético.
A seção anterior apontou como algoritmos genéticos processam populações de strings. Lembrando o
problema de troca de caixa preta, lembre-se de que a população inicial tinha quatro cadeias de caracteres:

01101
11000
01000
10011

Lembre-se também que essa população foi escolhida aleatoriamente por meio de 20 voltas sucessivas de
uma moeda imparcial. Agora precisamos definir um conjunto de operações simples que levem essa
população inicial e gerem populações sucessivas que (esperamos) melhorem com o tempo.
Um algoritmo genético simples que produz bons resultados em muitos problemas práticos é composto por
três operadores.
1. Reprodução
2. Crossover
3. Mutação

A reprodução é um processo no qual seqüências individuais são copiadas de acordo com seus
valores de função objetivos, / (biólogos chamam essa função de função de fitness). Intuitivamente,
podemos pensar na função / como alguma medida de lucro, utilidade ou bondade que nos esforçamos para
maximizar. Copiar strings de acordo com seus valores de adequação significa que strings com um valor
mais alto têm maior probabilidade de contribuir com uma ou mais descendentes na próxima geração. Esse
operador, é claro, é uma versão artificial da seleção natural, uma sobrevivência darwiniana do mais forte

TABLE 1.1 Sample Problem Strings and Fitness Values


No. String Fitness % of Total
1 01101 169 14.4
2 11000 576 49.2
3 01000 64 5.5
4 10011 361 30.9
Total 1170 100.0

entre criaturas da sentença(string). Em populações naturais, a aptidão é determinada pela capacidade de


uma criatura sobreviver a predadores, pestes e outros obstáculos à vida adulta e à reprodução
subseqüente. Em nosso cenário descaradamente artificial, a função objetiva é o árbitro final da vida ou
morte da criatura da sentença(string).
O operador de reprodução pode ser implementado de forma algorítmica de várias maneiras. Talvez o mais
fácil seja criar uma roda de roleta tendenciosa onde cada corda corrente na população tem um slot(area)de
roda de roleta dimensionado em proporção à sua aptidão. Suponha que a população de amostra de quatro
cadeias no problema da caixa preta tenha valores de função objetivo ou de aptidão f como mostrado na
Tabela 1.1 (por enquanto aceitamos esses valores como a saída de alguma caixa preta desconhecida e
arbitrária - mais tarde examinaremos uma função e codificação que geram esses mesmos valores).
Somando a aptidão sobre todas as quatro cordas, obtemos um total de 1170. A porcentagem de aptidão
total da população também é mostrada na tabela. A roleta ponderada correspondente para a reprodução
desta geração é mostrada na Fig. 1.7. Para reproduzir, simplesmente giramos a roleta pesada assim
definida quatro vezes. Para o problema do exemplo, a cadeia número 1 tem um valor de adequação de
169, que representa 14,4% da aptidão total. Como resultado, a corda 1 recebe 14,4 por cento da roleta
inclinada, e cada volta dá corda 1 com probabilidade 0.144.

FIGURE 1.7 Simple reproduction


allocates offspring strings using a
roulette wheel with slots sized
according to fitness. The sample wheel
is sized for the problem of Tables 1.1
and 1.2.
Cada vez que necessitamos de outro descendente, uma simples rotação da roleta ponderada produz o
candidato à reprodução. Desta forma, as sequências mais qualificadas têm um número maior de
descendentes na geração seguinte. Uma vez que uma string tenha sido selecionada para reprodução, uma
réplica exata da string é feita. Essa string é então inserida em um piscina de acasalamento, uma nova
população provisória, para mais ação genética do operador. Após a reprodução, o cruzamento simples
(Fig. 1.8) pode prosseguir em duas etapas. Primeiro, os membros das strings recém-reproduzidas na
piscina de acasalamento são acasaladas ao acaso. Segundo, cada par de strings sofre crossing da seguinte
forma: uma posição inteiro k ao longo da string é selecionada uniformemente ao acaso entre 1 e o
comprimento da string menos um 11, exemplo 1-11. Duas novas strings são criadas trocando todos os
caracteres entre posições k + 1 e Z inclusive. Por exemplo, considere as strings A e A2 de nossa
população inicial de exemplo:

A, = 0 1 1 0 | 1

A? = 1 1 0 0 | 0

Suponha que ao escolher um número aleatório entre 1 e 4, obtemos um k = 4 (conforme indicado pelo
símbolo separador |). O crossover resultante gera duas novas strings em que o simbolo (') significa que as
strings fazem parte da nova geração:

A', = 0 1 1 0 0

A', = 1 1 0 0 1

FIGURE 1.8 A schematic of simple crossover shows the alignment of two strings and the partial
exchange of information, using a cross site chosen at random.

A mecânica da reprodução e do crossover é surpreendentemente simples, envolvendo geração


de números aleatórios, cópias de seqüências de caracteres e algumas trocas parciais de strings. Não
obstante, a ênfase combinada da reprodução e a troca de informações estruturada, embora aleatória, de
cruzamento dão aos algoritmos genéticos muito do seu poder. No começo isso parece surpreendente.
Como podem dois operadores tão simples (e trivialmente triviais) resultar em algo útil, quanto mais em
um mecanismo de pesquisa rápido e de grande alcance? Além disso, não parece um pouco estranho que o
acaso desempenhe um papel tão fundamental em um processo direcionado? processo de pesquisa? Vamos
expor uma resposta parcial para a primeira dessas duas perguntas em um momento; a resposta à segunda
pergunta foi bem reconhecida pelo matemático J. Hadamard (1949, p. 29):
Veremos um pouco mais adiante que a possibilidade de imputar a descoberta ao puro acaso
já está excluída ... Pelo contrário, há uma intervenção do acaso, mas também um trabalho necessário de
inconsciência, o segundo implicando e não contradizendo o primeiro. ... De fato, é obvio que a invenção
ou descoberta, seja na matemática ou em qualquer outro lugar, ocorra combinando idéias.
Hadamard sugere que, embora a descoberta não seja um resultado - não pode ser um resultado
- do puro acaso, é quase certamente guiada pela serendipidade dirigida. Além disso, Hadamard sugere que
um papel apropriado para o acaso em um mecanismo de descoberta mais semelhante ao humano é causar
a justaposição de diferentes noções. É interessante que os algoritmos genéticos adotam a combinação de
direção e acaso de Hadamard de uma maneira que construa eficientemente novas soluções a partir das
melhores soluções parciais de testes anteriores.
Para ver isso, considere uma população de N strings (talvez a população de quatro cordas para
o problema da caixa preta) sobre algum alfabeto apropriado, codificado de modo que cada uma seja uma
idéia ou prescrição completa para executar uma tarefa específica (neste caso, cada string é uma ideia
completa de configuração de switch). Substrings dentro de cada string (ideia) contêm várias noções do
que é importante ou relevante para a tarefa. Visto desta maneira, a população não contém apenas uma
amostra de N ideias; em vez disso, contém uma infinidade de noções e classificações dessas noções de
desempenho de tarefas. Algoritmos genéticos implacavelmente exploram essa riqueza de informações (1)
reproduzindo noções de alta qualidade de acordo com seu desempenho e (2) cruzando essas noções com
muitas outras noções de alto desempenho de outras strings. Assim, a ação de cruzamento com a
reprodução anterior especula sobre novas idéias construídas a partir dos blocos de construção (noções) de
alto desempenho de tentativas passadas. De passagem, notamos que, apesar da definição um tanto difusa
de uma noção, não limitamos a noção de simples combinações lineares de características únicas ou pares
de características. Os biólogos há muito reconhecem que a evolução deve eficientemente suprir a epistasia
(não-linearidade de posicionamento) que surge na natureza. De uma maneira similar, o processamento de
algoritmos genéticos deve processar efetivamente as regras, mesmo quando elas dependem de suas
características componentes de maneiras altamente não-lineares e complexas.

A troca de noções para formar novas ideias é atraente intuitivamente, se pensarmos em termos
do processo de inovação. O que é uma ideia inovadora? Como lladamard sugere, na maioria das vezes é
uma justaposição de coisas que funcionaram bem no passado. Da mesma maneira, a reprodução e o
cruzamento combinam-se para procurar novas ideias potencialmente grávidas. Essa experiência de ênfase
e cruzamento é análoga à interação humana que muitos de nós observamos em uma feira ou conferência
científica. Em uma conferência de widgets, por exemplo, vários efeitos de widgets de todo o mundo se
reúnem para discutir as últimas novidades em tecnologia de widgets. Após as sessões de palestras, todos
eles se juntam ao redor do bar para trocar histórias de widgets. Especialistas em widgets bem conhecidos,
é claro, estão em maior demanda e trocam mais idéias, pensamentos e noções por seus colaboradores de
widgets menos conhecidos. Quando o show termina, as pessoas do widget retornam aos seus laboratórios
de widgets para experimentar um excesso de inovações de widgets. O processo de reprodução e
cruzamento em um algoritmo genético é esse tipo de troca. Noções de alto desempenho são repetidamente
testadas e trocadas na busca por melhor e melhor desempenho.
Se a reprodução de acordo com a aptidão combinada com o crossover fornecer aos algoritmos genéticos a
maior parte do seu poder de processamento, qual é então o propósito do operador de mutação? Não
surpreendentemente, há muita confusão sobre o papel da mutação na genética (natural e artificial). Talvez
seja o resultado de muitos filmes B detalhando as façanhas de berinjelas mutantes que consomem grandes
quantidades de Tóquio ou Chicago, mas qualquer que seja a causa da confusão, descobrimos que a
mutação desempenha um papel decididamente secundário na operação de algoritmos genéticos. . A
mutação é necessária porque, embora a reprodução e o crossover efetivamente procurem e recombinem
noções existentes, ocasionalmente eles podem se tornar super-zelosos e perder algum material genético
potencialmente útil (l's ou 0s em locais específicos). Em sistemas genéticos artificiais, o operador de
mutação protege contra essa perda irrecuperável. No GA simples, a mutação é a alteração aleatória
ocasional (com pequena probabilidade) do valor de uma posição de string. Na codificação binária do
problema da caixa preta, isso significa simplesmente alterar um 1 para um 0 e vice-versa. Por si só, a
mutação é um passeio aleatório pelo espaço da string. Quando usado com parcimônia com reprodução e
crossover, é uma apólice de seguro contra a perda prematura de noções importantes.

Que o operador de mutação desempenha um papel secundário no AG simples, notamos que a frequência
de mutação para obter bons resultados em estudos de algoritmos genéticos empíricos é da ordem de uma
mutação por transferências de mil bits (posição). As taxas de mutação são igualmente pequenas (ou
menores) em populações naturais, levando-nos a concluir que a mutação é apropriadamente considerada
como um mecanismo secundário de adaptação do algoritmo genético.
Outros operadores genéticos e planos reprodutivos foram abstraídos do estudo do exemplo biológico. No
entanto, os três examinados nesta seção, reprodução, crossover simples e mutação, provaram ser tanto
computacionalmente simples quanto eficazes no ataque a vários problemas importantes de otimização. Na
próxima seção, realizamos uma simulação manual do algoritmo genético simples para demonstrar sua
mecânica e seu poder.

ALGORITMOS GENÉTICOS NO TRABALHO - UMA SIMULAÇÃO NA MÃO

Vamos aplicar nosso algoritmo genético simples a um problema específico otimizado passo a passo.
Considere o problema de maximizar a função / (x) = x2, onde x é permitido variar entre 0 e 31, uma
função exibida anteriormente como na Fig. 1.5. Para usar um algoritmo genético, devemos primeiro
codificar as variáveis de decisão do nosso problema como uma string de tamanho finito. Para esse
problema, codificaremos a variável x simplesmente como um inteiro binário sem sinal de comprimento 5.
Antes de prosseguirmos com a simulação, vamos revisar brevemente a noção de um inteiro binário. Como
criaturas decadigitadas, temos pouco problema na manipulação de base 10 inteiros e aritmética. Por
exemplo, o número de cinco dígitos 53,095 pode ser considerado como
5.1O4 + 3.103 + 0.102 + 9.10*1 + 5.10= 53,095.
Na aritmética da base 2, é claro que temos apenas dois dígitos para trabalhar, 0 e 1, e como exemplo, o
número 10.011 decodifica para o número base 10
1.24 + O.25 + O.22 + 1.21 + 1.2° = 16 + 2 + 1 = 19.
Com um inteiro sem sinal de cinco bits (binary dig / 7) nós podemos obter números entre 0 (00000) e 31
(11111). Com uma função objetivo e codificação bem definidas, agora simulamos uma única geração de
um algoritmo genético com reprodução, cruzamento e mutação.
Para começar, selecionamos uma população inicial aleatoriamente. Selecionamos uma população de
tamanho 4 jogando uma moeda justa 20 vezes. Podemos pular esta etapa usando a população inicial
criada dessa maneira anteriormente para o problema de troca de caixa preta. Observando essa população,
mostrada no lado esquerdo da Tabela 1.2, observamos que os valores x decodificados são apresentados
junto com os valores Fitness ou função de objetivo f(x '). Para ter certeza de que sabemos como os valores
de Fitness f/ (x) são calculados a partir da representação de string, vamos dar uma olhada na terceira
string da população inicial, string 01000. Descodificando essa string como um inteiro binário sem sinal,
notamos que existe um único na posição 2A = 8. Assim, para a cadeia 01000, obtemos x = 8. Para
calcular a função de Aptidão ou objetivo, simplesmente fazemos um quadrado do valor de x e obtemos o
valor de Aptidão resultante f (x) = 64. Outros valores x e f(x) podem ser obtidos de forma semelhante.

Você pode notar que os valores da Aptidão ou da função objetivo são os mesmos que os valores da caixa
preta (compare as Tabelas 1.1 e 1.2). Isso não é coincidência, e o problema de otimização da caixa preta
foi bem representado pela função particular, f (x) e pela codificação que estamos usando agora. Claro, o
algoritmo genético não precisa saber nada disso; É tão feliz otimizar algumas funções arbitrárias de
comutação (ou qualquer outra codificação e função finitas) como uma função polinomial com codificação
binária direta. Essa discussão simplesmente reforça um dos pontos fortes do algoritmo genético: ao
explorar semelhanças nas codificações, os algoritmos genéticos podem lidar efetivamente com uma classe
mais ampla de funções do que muitos outros procedimentos.
Uma geração do algoritmo genético começa com a reprodução. Selecionamos a piscina de acasalamento
da próxima geração girando a roleta com os pesos (mostrado na Fig. 1.7) quatro vezes.
A simulação real deste processo usando lançamentos de moedas resultou na string 1 e na
string 4 recebendo uma cópia na reunião conjunta, na string 2 recebendo duas cópias e na string 3 não
recebendo cópias, como mostrado no centro da Tabela 1.2. Comparando isso com o número esperado de
cópias (w pselect), obtivemos o que devemos esperar: o melhor é obter mais cópias, a permanência média
igual e a pior das mortes.
Com uma piscina ativo de strings procurando parceiros, crossover simples prossegue em duas
etapas: (1) strings são acopladas aleatoriamente, usando coin totses para emparelhar os casais felizes, e
(2) pares de strings cruzadas cruzadas, usando lançamentos de moeda para selecionar os locais de
passagem. Referindo-se novamente à Tabela 1.2, a escolha aleatória de posicionamentos selecionou a
segunda sequência na associação de reprodução a ser acoplada à primeira. Com um local de cruzamento
de 4, as duas cadeias 01101 e 11000 cruzam e produzem duas novas cadeias 01100 e 11001. As restantes
duas cadeias na piscina de cruzamento são cruzadas no local 2; as seqüências resultantes podem ser
verificadas na tabela.
O último operador, mutação, é executado bit a bit. Assumimos que a probabilidade de
mutação neste teste é 0,001. Com 20 posições de bit transferidas, devemos esperar que 20* 0,001 = 0,02
bits sofram mutação durante uma dada geração. A simulação deste processo indica que nenhum bit sofre
mutação para este valor de probabilidade. Como resultado, nenhuma posição de bit é alterada de 0 para 1
ou vice-versa durante essa geração.
Após a reprodução, cruzamento e mutação, a nova população está pronta para ser testada. Para
fazer isso, simplesmente decodificamos as novas strings criadas pelo algoritmo genético simples e
calculamos os valores da função de adequação a partir dos valores x assim decodificados. Os resultados
de uma única geração da simulação são mostrados à direita da Tabela 1.2. Embora tirar conclusões
concretas de um único teste de um processo estocástico seja, na melhor das hipóteses, um negócio
arriscado, começamos a ver como os algoritmos genéticos combinam noções de alto desempenho para
obter um melhor desempenho. Na tabela, observe como o desempenho máximo e médio melhoraram na
nova população. A aptidão média da população melhorou de 293 para 439 em uma geração.

NOTAS:
1) População inicial escolhida por quatro repetições de cinco lançamentos em moeda onde cabeças = 1,
caudas = 0.
2) Reprodução realizada através de parte em 8 simulação de seleção de roleta (três lançamentos de
moeda).
3) Crossover realizado através de decodificação binária de 2 lançamentos de moedas (TT = 00 ^ = 0 =
cross site l, HH = 11, = 3 = cross site 4).
4) Probabilidade de cruzamento assumida como unidade p (- 1,0.
5) Probabilidade de mutação assumida como 0,001, pm = 0,001, Mutações esperadas = 5*4*0,001 = 0,02.
Nenhuma mutação esperada durante uma única geração. Nenhum simulado.

A aptidão máxima aumentou de 576 para 729 durante esse mesmo período. Embora processos
aleatórios ajudem a causar essas circunstâncias felizes, começamos a ver que essa melhora não é por
acaso. A melhor string da primeira geração (11000) recebe duas cópias devido ao seu alto desempenho
acima da média. Quando isso combina aleatoriamente com a próxima seqüência mais alta (10011) e é
cruzada no local 2 (novamente aleatoriamente), uma das seqüências resultantes (11011) revela-se uma
escolha muito boa.
Este evento é uma excelente ilustração das analogias de idéias e noções desenvolvidas na
seção anterior. Neste caso, a boa ideia resultante é a combinação de duas noções acima da média, ou seja,
as substrings 11 e 11.
Embora o argumento ainda seja um pouco heurístico, começamos a ver como os algoritmos
genéticos efetuam uma pesquisa robusta. Na próxima seção, expandimos nossa compreensão desses
conceitos analisando algoritmos genéticos em termos de esquemas ou modelos de similaridade.
O ponto de vista intuitivo desenvolvido até agora tem muito apelo. Nós comparamos o
algoritmo genético com certos processos de busca humana comumente chamados de inovadores ou
criativos. Além disso, a simulação manual do algoritmo genético simples nos deu alguma confiança de
que, de fato, algo interessante está acontecendo aqui. No entanto, algo está faltando. O que está sendo
processado por algoritmos genéticos e como sabemos se processá-lo (seja ele qual for) levará a resultados
ótimos ou quase ótimos em um problema específico? Claramente, como cientistas,
engenheiros e gerentes de negócios, precisamos entender o quê e o como do desempenho do algoritmo
genético.
Para obter esse entendimento, examinamos os dados brutos disponíveis para qualquer
procedimento de pesquisa e descobrimos que podemos pesquisar com mais eficácia se explorarmos
semelhanças importantes na codificação que usamos. Isso nos leva a desenvolver a importante noção de
um modelo ou esquema de similaridade. Isso, por sua vez, nos leva a uma pedra fundamental da
abordagem do algoritmo genético, a hipótese do bloco de construção(building block hypothesis).

GRIST FOR THE SEARCH MILL - SIMILARIDADES IMPORTANTES

Por muito tempo ignoramos uma questão fundamental. Em um processo de pesquisa, dados somente os
dados de premiação (valores de adequação), quais informações estão contidas em uma população de
strings e seus valores de função objetivo para ajudar a orientar uma busca direcionada de melhoria? Para
fazer essa pergunta com mais clareza, considere os valores de strings e de adequação originalmente
exibidos na Tabela 1.1 a partir da simulação da seção anterior (o problema da caixa preta) e reunimos
abaixo por conveniência:

String Fitness
01101 169
11000 576
01000 64
10011 361

Quais informações estão contidas nessa população para orientar uma busca direcionada por melhorias?
Em face disso, não há muito: quatro amostras independentes de diferentes strings com seus valores de
aptidão. Enquanto olhamos para a página, no entanto, naturalmente começamos a examinar a coluna de
cima e para baixo, e percebemos algumas semelhanças entre as strings. Explorando essas semelhanças
com mais profundidade, notamos que certos padrões de strings parecem altamente associados a um bom
desempenho. Quanto mais tempo olhamos para as strings e seus valores de aptidão, maior é a tentação de
experimentar com essas associações de alta aptidão. Parece perfeitamente razoável jogar mix e combinar
com algumas das substrings que são altamente correlacionadas com o sucesso do passado. Por exemplo,
na população de amostra, as strings que começam com 1 parecem estar entre as melhores. Isso pode ser
um ingrediente importante na otimização dessa função? Certamente com nossa função (f(x) = x2) e nossa
codificação (um inteiro sem sinal de cinco bits) sabemos que é (por que isso é verdade?). Mas o que
estamos fazendo aqui? Realmente, duas coisas separadas. Primeiro, estamos buscando semelhanças entre
as strings da população. Em segundo lugar, estamos à procura de relações causais entre essas semelhanças
e alta aptidão. Ao fazê-lo, admitimos uma grande quantidade de novas informações para ajudar a orientar
uma pesquisa. Para ver quanto e precisamente que informação nós admitimos, vamos considerar o
importante conceito de um “esquema” (plural, schemata), modelo de similaridade QT.

MODELOS DE SIMILARIDADE (SCHEMATA)

Em certo sentido, não estamos mais interessados em strings como strings sozinhos. Como as
semelhanças importantes entre as strings altamente ajustadas podem ajudar a guiar uma busca,
questionamos como uma string pode ser semelhante às suas outras strings. Especificamente, perguntamos,
de que maneira uma string é representativa de outras classes de string com similaridades em determinadas
posições de string? A estrutura dos esquemas fornece a ferramenta para responder a essas perguntas.
Um esquema (Holland, 1968, 1975) é um modelo de similaridade que descreve um
subconjunto de cadeias de caracteres com similaridades em certas posições de cadeias de caracteres. Para
esta discussão, vamos nos limitar mais uma vez sem perda de generalidade ao alfabeto binário {0,1}. Nós
motivamos um esquema com mais facilidade, acrescentando um símbolo especial a esse alfabeto; nós
adicionamos o * ou não nos importamos com o símbolo. Com esse alfabeto estendido, podemos agora
criar strings (esquemas) sobre o alfabeto ternário {0, 1, *}, e o significado do esquema fica claro se
pensarmos nele como um dispositivo de correspondência de padrões: um esquema corresponde a uma
string específica se em cada localização no esquema, 1 corresponde a 1 na cadeia, a 0 corresponde a 0 ou
a 'corresponde a uma. Como um exemplo, considere as strings e esquemas de comprimento 5. O esquema
* 0000 corresponde a duas strings, a saber {10000, 00000}. Como outro exemplo, o esquema *111*
descreve um subconjunto com quatro membros {01110, 01111, 11110, 11111}. Como um último
exemplo, o esquema 0 * 1 * corresponde a qualquer uma das oito cadeias de comprimento 5 que
começam com 0 e têm 1 na terceira posição. Como você pode começar a ver, a idéia de um esquema nos
dá uma maneira poderosa e compacta de falar sobre todas as semelhanças bem definidas entre cadeias de
comprimento finito sobre um alfabeto finito. Devemos enfatizar que o * é apenas um meta-símbolo (um
símbolo sobre outros símbolos); nunca é explicitamente processado pelo algoritmo genético. É
simplesmente um dispositivo de anotação que permite a descrição de todas as semelhanças possíveis entre
as cadeias de caracteres de um determinado comprimento e alfabeto.
Contar o número total de esquemas possíveis é um exercício esclarecedor. No exemplo
anterior, com l = 5, observamos que há 3*3*3 *3*3 = 3 5 = 243 modelos de semelhança diferentes, porque
cada uma das cinco posições pode ser 0, 1 ou *. Em geral, para alfabetos de cardinalidade (número de
caracteres do alfabeto) k, existem (k + 1 )l “schemata” esquemas possiveis. À primeira vista, parece que
os esquemas estão dificultando a busca. Para um alfabeto com k elementos existem apenas ( somente?)
“k” 'diferentes cadeias de comprimento “l” . Por que considerar os esquemas (k+ 1)l e ampliar o espaço de
preocupação? Dito de outra maneira, o exemplo do tamanho 5 agora tem apenas 2 5 = 32 strings
alternativas diferentes. difícil, considerando 35 = 243 esquemas? Na verdade, o raciocínio discutido na
seção anterior torna as coisas mais fáceis.Você se lembra de olhar para cima e para baixo a lista de quatro
strings e valores de fitness e tentando descobrir o que fazer a seguir? se considerássemos as cordas
separadamente, então teríamos apenas quatro informações;
No entanto, quando consideramos as cadeias de caracteres, seus valores de adequação e as
semelhanças entre as cadeias de caracteres na população, admitimos uma grande quantidade de novas
informações para ajudar a direcionar nossa pesquisa. Quanta informação admitimos considerando as
semelhanças? A resposta a esta pergunta está relacionada ao número de esquemas únicos contidos na
população. Contar essa quantidade exige exatamente o conhecimento das cadeias de caracteres de uma
determinada população. Para obter um limite no número de esquemas em uma população específica,
primeiro contamos o número de esquemas contidos em uma string individual e, em seguida, obtemos um
limite superior no número total de esquemas na população.
Para ver isso, considere uma única string de comprimento l=5: 11111, por exemplo. Essa string é um
membro de 2 'esquemas porque cada posição pode assumir seu valor real ou um símbolo que não se
importa. Em geral, uma string específica contém 2 l esquemas. Como resultado, uma população de
tamanho n contém algo entre 2l e( n.2l )esquemas, dependendo da diversidade da população. Este fato
confirma nossa iniciação anterior. A motivação original para considerar semelhanças importantes foi
obter mais informações para ajudar a orientar nossa pesquisa. O argumento da contagem mostra que uma
riqueza de informações sobre semelhanças importantes está de fato contida em populações de tamanho
moderado. Vamos examinar como os algoritmos genéticos efetivamente exploram essas informações.
Nesta conjuntura, parece ser necessário algum processamento paralelo se quisermos utilizar toda esta
informação
Esses argumentos de contagem são bons e bons, mas aonde isso tudo leva? Mais explicitamente, dos
esquemas 2l e( n.2l )contidos em uma população, quantos são realmente processados de uma maneira útil
pelo algoritmo genético? Para obter a resposta a essa questão, considere o efeito da reprodução,
cruzamento e mutação no crescimento ou decaimento de esquemas importantes de geração para geração.
O efeito da reprodução em um esquema particular é fácil de determinar; como strings mais ajustadas têm
maiores probabilidades de seleção, em média damos um número cada vez maior de amostras aos padrões
observados de melhor semelhança (isso é uma boa coisa a fazer, como é mostrado no próximo capítulo);
no entanto, a reprodução sozinha não apresenta novos pontos no espaço. O que acontece então a um
esquema particular quando o crossover é introduzido * O Crossover deixa um esquema ileso se ele não
cortar o esquema, mas pode interromper um esquema quando, por exemplo, considerar os dois esquemas
1 * ** 0 e ** l l * . O primeiro é susceptível de ser interrompido por cruzamento, enquanto o segundo
é relativamente improvável de ser destruído. Como resultado, os esquemas de comprimento de definido
curto são deixados sozinhos por cruzamento e reproduzidos a uma taxa de amostragem boa pelo operador
de reprodução. A mutação a taxas baixas e normais não perturba um esquema em particular com muita
freqüência e nos resta uma conclusão surpreendente.

Os esquemas de alta fitness, comprimento definido curto (os chamamos de building blocks
blocos de construção) são propagados de geração em geração, dando amostras exponencialmente
crescentes ao melhor observado; tudo isso acontece em paralelo com nenhuma contabilidade especial ou
memória especial que não seja nossa população de n strings. No próximo capítulo, contaremos quantos
esquemas são processados de maneira útil em cada geração. Acontece que o número é algo como n³. Isso
compara favoravelmente com o número de avaliações de função (n). Como essa alavancagem de
processamento é tão importante (e aparentemente exclusiva dos algoritmos genéticos), damos a ela um
nome especial, o (im plicit parallelism.)paralelismo implícito.

APRENDENDO O LINGO

O poder por trás das operações simples do nosso algoritmo genético é, pelo menos,
intuitivamente mais claro, se pensarmos em blocos de construção. Algumas questões permanecem: Como
sabemos que os blocos de construção levam a melhorias? Por que é uma estratégia quase ideal dar
amostras exponencialmente crescentes ao melhor? Como podemos calcular o número de esquemas
processados pelo algoritmo genético? Essas perguntas são respondidas integralmente no próximo
capítulo, mas primeiro precisamos dominar a terminologia usada pelos pesquisadores que trabalham com
algoritmos genéticos. Porque os algoritmos genéticos estão enraizados tanto na genética natural quanto na
ciência da computação, a terminologia usada na literatura do GA é uma mistura profana do natural e do
artificial. Até agora, nos concentramos no lado artificial da ancestralidade do algoritmo genético e
falamos sobre strings, alfabetos, posições de strings e afins. Revisamos a correspondência entre esses
termos e seus correspondentes naturais para se conectar com a crescente literatura do GA e também para
permitir nosso próprio deslize ocasional de um ou dois pronunciamentos naturais.
Grosso modo, as cadeias de sistemas genéticos artificiais são análogas aos cromossomos nos
sistemas biológicos. Nos sistemas naturais, um ou mais cromossomos se combinam para formar a
prescrição genética total para a construção e operação de alguns organismos.
Em sistemas naturais, o pacote genético total é chamado de genótipo. Em sistemas genéticos artificiais, o
pacote total de cadeias é chamado de estrutura (nos primeiros capítulos deste livro, a estrutura consistirá
de uma única cadeia, então o texto se refere a cadeias e estruturas de forma intercambiável até que seja
necessário diferenciá-los).
Em sistemas naturais, o organismo formado pela interação do pacote genético total com seu ambiente é
chamado de fenótipo.
Em sistemas genéticos artificiais, as estruturas decodificam para formar um conjunto de parâmetros
particulares, solução alternativa ou ponto (no espaço da solução). . O projetista de um sistema genético
artificial tem uma variedade de alternativas para codificar parâmetros numéricos e não-numéricos.
Confrontaremos codificações e princípios de codificação em capítulos posteriores; por enquanto, nos
atemos à nossa consideração de GA e terminologia natural.
Na terminologia natural, dizemos que os cromossomos são compostos de genes, que podem
assumir um certo número de valores chamados alelos. Na genética, a posição de um gene (seu locus) é
identificada separadamente da função do gene. Assim, podemos falar de um gene particular, por exemplo,
o gene da cor dos olhos de um animal, seu locus, posição 10 e seu valor de alelo, os olhos azuis. Na busca
genética artificial, dizemos que as cordas são compostas de características ou detectores, que assumem
valores diferentes. Recursos podem estar localizados em posições diferentes na string. A correspondência
entre a terminologia natural e artificial é resumida na Tabela 1.3.
Até agora, não distinguimos entre um gene (um caráter particular) e seu locus (sua posição); a
posição de um bit em uma string determinou seu significado (como decodifica) uniformemente em toda a
população e ao longo do tempo. Por exemplo, a string 10000 é decodificada como um inteiro binário sem
sinal 16 (base 10) porque implicitamente o 1 está no lugar dos 16. Não é necessário limitar codificações
como esta, no entanto. Um capítulo posterior apresenta estruturas mais avançadas que tratam locus e gene
separadamente.

RESUMO

Este capítulo lançou as bases para entender os algoritmos genéticos, sua mecânica e seu poder. Somos
levados a esses métodos por nossa busca pela robustez; os sistemas naturais são robustos - eficientes e
eficazes - à medida que se adaptam a uma ampla variedade de ambientes. Ao abstrair o algoritmo de
adaptação da natureza de forma artificial, esperamos atingir uma amplitude de desempenho semelhante.
De fato, os algoritmos genéticos demonstraram sua capacidade em vários estudos analíticos e empíricos.
O capítulo apresentou a mecânica detalhada de um algoritmo genético simples de três operadores.
Algoritmos genéticos operam em populações de strings, com a string codificada para representar algum
conjunto de parâmetros subjacente. Reprodução, cruzamento e mutação são aplicados a sucessivas
populações de cordas para criar novas populações de cordas. Esses operadores são em si mesmos simples,
envolvendo nada mais complexo que geração de números aleatórios, cópia de string e troca de string
parcial; no entanto, apesar de sua simplicidade, o desempenho de pesquisa resultante é amplo e
impressionante. Algoritmos genéticos realizam uma troca inovadora de conceitos entre strings e, assim,
conectam-se a nossas próprias idéias de busca ou descoberta humana. Uma simulação de uma geração do
algoritmo genético simples ajudou a ilustrar tanto o detalhe quanto o poder do método. Quatro diferenças
separam algoritmos genéticos de técnicas de otimização mais convencionais: 1. Manipulação direta de
uma codificação 2. Busca de uma população, não um único ponto 3. Pesquisa via amostragem, uma busca
cega 4. Busca usando operadores estocásticos, não regras determinísticas Algoritmos genéticos
manipulam representações de variáveis de decisão ou controle no nível da cadeia para explorar
semelhanças entre cadeias de alto desempenho. Outros métodos geralmente lidam com funções e suas
variáveis de controle diretamente. Como os algoritmos genéticos operam no nível de codificação, eles são
difíceis de enganar, mesmo quando a função pode ser difícil para esquemas tradicionais. Algoritmos
genéticos funcionam a partir de uma população; muitos outros métodos funcionam a partir de um único
ponto. Desta forma, os AGs encontram segurança nos números. Ao manter uma população de pontos de
amostragem bem adaptados, a probabilidade de atingir um pico falso é reduzida. Os algoritmos genéticos
alcançam grande parte de sua amplitude ignorando informações, exceto

o que diz respeito ao pagamento. Outros métodos dependem fortemente dessas informações, e em
problemas onde a informação necessária não está disponível ou é difícil de obter, essas outras técnicas são
quebradas. Os GAs permanecem gerais explorando informações disponíveis em qualquer problema de
pesquisa. Algoritmos genéticos processam similaridades na codificação subjacente juntamente com
informações classificando as estruturas de acordo com sua capacidade de sobrevivência no ambiente
atual. Ao explorar essas informações amplamente disponíveis, os AGs podem ser aplicados em
praticamente qualquer problema.
As regras de transição dos algoritmos genéticos são estocásticas; muitos outros métodos têm regras de
transição determinísticas. Existe, no entanto, uma distinção entre os operadores aleatórios de algoritmos
genéticos e outros métodos que são simples caminhadas aleatórias. Algoritmos genéticos usam escolha
aleatória para guiar uma busca altamente exploradora. Isso pode parecer incomum, usando o acaso para
alcançar resultados direcionados (os melhores pontos), mas a natureza é cheia de precedentes.
Iniciamos uma avaliação mais rigorosa do desempenho do algoritmo genético por meio do conceito de
modelos de esquemas ou similaridade. Um esquema é uma cadeia de caracteres sobre um alfabeto
estendido, {0,1, *}, onde 0 e 1 mantêm seu significado normal e o • é um caractere curinga ou não se
importa com o símbolo. Esse dispositivo notacional simplifica muito a análise do método do algoritmo
genético porque ele reconhece explicitamente todas as semelhanças possíveis em uma população de
cadeias de caracteres. Discutimos como os blocos de construção - esquemas curtos e de alto desempenho
- são combinados para formar strings com desempenho superior esperado. Isso ocorre porque os blocos
de construção são amostrados em taxas ideais e recombinados por meio de cruzamento. A mutação tem
pouco efeito nesses blocos de construção; como uma apólice de seguro, ajuda a evitar a perda
irrecuperável de material genético potencialmente importante.
O algoritmo genético simples estudado neste capítulo tem muito para recomendá-lo. No próximo capítulo,
analisaremos sua operação com mais cuidado. Em seguida, implementaremos o GA simples em um
programa de computador curto e examinaremos alguns aplicativos em problemas práticos.

Anda mungkin juga menyukai