Cruzamento (Crossover)

Professor

O que é cruzamento?

O cruzamento é uma operação fundamental em algoritmos genéticos. Ela imita a reprodução sexual da natureza. Dois indivíduos trocam partes de seu código genético. Assim, geram novos indivíduos para a próxima geração. Essa troca produz descendentes com características de ambos os pais. Portanto, a diversidade da população aumenta gradualmente. O cruzamento não cria informação do nada. Em vez disso, ele recombina o material existente de maneira criativa. Consequentemente, a busca por soluções melhores se torna mais eficiente. Ele é aplicado após a seleção dos pais. A taxa de cruzamento define sua probabilidade de ocorrência. Valores típicos ficam entre 60% e 90%. Caso contrário, os pais são copiados diretamente. O cruzamento é essencial para a exploração do espaço de soluções. Sem ele, o algoritmo seria apenas uma busca local.

Tipos comuns de cruzamento

Existem várias formas de realizar o cruzamento. O cruzamento de um ponto é o mais simples. Um ponto de corte é escolhido aleatoriamente. Os genes após esse ponto são trocados entre os pais. O cruzamento de dois pontos usa dois pontos de corte. A seção entre eles é que é trocada. O cruzamento uniforme é ainda mais flexível. Cada gene é trocado com uma probabilidade independente. Para representações binárias, esses métodos são diretos. Em problemas contínuos, usa-se o cruzamento aritmético. Ele calcula médias ponderadas dos valores dos pais. A escolha do tipo afeta a convergência do algoritmo. Por essa razão, deve-se testar diferentes abordagens. Cada problema pode exigir um tipo específico. A experimentação é sempre recomendada na prática.

Importância para a otimização

O cruzamento equilibra exploração e explotação no algoritmo. Ele permite combinar boas soluções parciais de diferentes indivíduos. Essa combinação pode gerar soluções superiores aos pais. A exploração é favorecida quando a população é diversa. A explotação ocorre quando os melhores indivíduos se cruzam. O cruzamento mantém a herança genética das melhores soluções. Ao mesmo tempo, ele introduz variabilidade controlada. Essa variabilidade evita a estagnação prematura do processo. É importante lembrar que o cruzamento não substitui a mutação. Ambos operam de forma complementar e simultânea. A mutação introduz novidade, enquanto o cruzamento reorganiza. Juntos, eles guiam a busca para o ótimo global. A eficácia do cruzamento foi comprovada em milhares de estudos. Ele é usado em engenharia, finanças e robótica. Sua simplicidade esconde um poder computacional imenso.

Exemplo clássico: o problema do caixeiro viajante

Considere um vendedor que deve visitar cinco cidades. Ele precisa percorrer a menor rota possível. Cada cidade é visitada exatamente uma vez. A distância entre cada par de cidades é conhecida. O objetivo é minimizar a distância total percorrida. Esse é o clássico problema do caixeiro viajante (TSP). Para resolvê-lo com algoritmo genético, usamos uma representação permutacional. Cada indivíduo é uma ordem de visita das cidades. O cruzamento deve respeitar que cada cidade aparece uma vez. O cruzamento de ordem (OX) é frequentemente aplicado aqui. Ele preserva a ordem relativa dos genes. Dois pontos de corte são escolhidos aleatoriamente. A seção entre eles é copiada do primeiro pai. Os genes restantes são preenchidos na ordem do segundo pai. Essa abordagem gera descendentes válidos e promissores.

Resolução em python para o google colab

O código abaixo implementa o TSP com 5 cidades. A distância é calculada pela métrica euclidiana. A população inicial é gerada aleatoriamente. O cruzamento de ordem é aplicado com taxa de 80%. A seleção é feita por torneio de tamanho 2. O algoritmo roda por 100 gerações. Ao final, a melhor rota é exibida em um gráfico. Dois gráficos são gerados: a evolução da distância e a rota final. Execute o código no Google Colab para ver os resultados. As bibliotecas numpy e matplotlib são utilizadas. Certifique-se de instalar todas as dependências. O código é autoexplicativo e comentado. Divirta-se explorando o poder do cruzamento!

Seleção (Roleta, Torneio)

dados

O que é seleção em algoritmos evolutivos?

A seleção é um processo fundamental nos algoritmos evolutivos. Ela imita a escolha natural dos seres vivos. Indivíduos mais aptos têm maior chance de reprodução. Assim, a população melhora ao longo das gerações. Esse mecanismo guia a busca por soluções ótimas. Portanto, a seleção não é aleatória, mas direcionada. Ela equilibra exploração e exploração do espaço de busca. Sem ela, o algoritmo seria uma busca cega. Por isso, a seleção é o coração da evolução computacional.

Roleta: probabilidade proporcional à aptidão

A roleta é um método clássico de seleção proporcional. Cada indivíduo ocupa uma fatia da roleta. O tamanho da fatia é proporcional à sua aptidão. Então, indivíduos melhores têm áreas maiores. Um número aleatório decide qual fatia é escolhida. Esse processo é repetido até preencher a nova população. Contudo, a roleta pode sofrer com convergência prematura. Isso acontece quando um indivíduo muito bom domina. A diversidade da população pode ser reduzida rapidamente. Mesmo assim, ela é simples e intuitiva para iniciantes.

Torneio: competição direta entre indivíduos

O torneio é outro método de seleção muito usado. Ele escolhe aleatoriamente um grupo de indivíduos. O tamanho do grupo é definido pelo usuário. Depois, compara-se a aptidão de todos eles. O vencedor é aquele com maior aptidão. Esse vencedor é copiado para a nova geração. O processo se repete até completar a população. Uma vantagem é não precisar de normalização. Além disso, o torneio mantém pressão seletiva ajustável. Torneios maiores aumentam a pressão seletiva. Por outro lado, torneios menores preservam diversidade. Assim, o torneio é robusto e popular na prática.

Comparação entre roleta e torneio

A roleta é sensível à escala da aptidão. Já o torneio depende apenas de comparações relativas. A roleta pode ser implementada facilmente. O torneio é mais eficiente computacionalmente. A roleta é recomendada quando a aptidão é positiva. O torneio funciona bem com aptidões negativas também. Ambos os métodos são estocásticos por natureza. Eles introduzem aleatoriedade controlada no processo. Essa aleatoriedade evita ficar preso em ótimos locais. Portanto, a escolha entre eles é situacional. Iniciantes frequentemente começam com o torneio. Ele é mais tolerante a diferentes escalas de aptidão.

Exemplo clássico: maximização de uma função

Considere o problema de maximizar f(x) = x². O domínio é x no intervalo [0, 31]. Representamos x como um binário de 5 bits. A população inicial tem 6 indivíduos aleatórios. Usaremos seleção por torneio de tamanho 3. O crossover é de um ponto com probabilidade 0.7. A mutação troca um bit com chance 0.01. Executamos 20 gerações para evoluir a população. Ao final, esperamos encontrar x próximo de 31. Esse é um problema clássico de algoritmos genéticos. Ele ilustra bem o poder da seleção evolutiva. Agora, veja a resolução completa em Python abaixo.

Análise dos resultados esperados

O código executa no Google Colab sem modificações. A aptidão máxima teórica é 961 (para x=31). Com 20 gerações, frequentemente atingimos x=31. O gráfico da esquerda mostra a evolução das médias. Ele também exibe o melhor valor por geração. O gráfico da direita destaca o progresso do máximo. É comum ver saltos repentinos na curva. Esses saltos vêm do crossover e da mutação. A seleção por torneio mantém pressão constante. Portanto, a convergência é rápida e estável. Esse exemplo ensina na prática os conceitos. Ele é reproduzível e fácil de modificar. Tente alterar o tamanho do torneio, por exemplo. Observe como isso afeta a velocidade de convergência. A experimentação é a melhor forma de aprender.

Conclusão sobre seleção em algoritmos evolutivos

A seleção é o motor da evolução artificial. Roleta e torneio são duas estratégias complementares. A roleta é probabilística e baseada em proporções. O torneio é competitivo e baseado em comparações. Ambas têm vantagens e desvantagens conhecidas. A escolha depende do problema e da experiência. Para iniciantes, o torneio é geralmente recomendado. Ele é mais simples de ajustar e entender. Os gráficos mostram claramente o efeito da seleção. Eles revelam como a população melhora gradativamente. Por fim, lembre-se: sem seleção, não há evolução. Ela direciona a busca para regiões promissoras. Portanto, domine esse conceito para avançar. A prática com o código solidifica o aprendizado. Bons estudos e boas evoluções!