|
|
||
|---|---|---|
| .. | ||
| Diophantine.ipynb | ||
| Genetic.ipynb | ||
| README.md | ||
README.md
Algoritmos Genéticos
Questionário pré-aula
Algoritmos Genéticos (GA) baseiam-se numa abordagem evolutiva para IA, em que métodos de evolução de uma população são utilizados para obter uma solução ótima para um determinado problema. Foram propostos em 1975 por John Henry Holland.
Os Algoritmos Genéticos baseiam-se nas seguintes ideias:
- Soluções válidas para o problema podem ser representadas como genes
- O Cruzamento permite combinar duas soluções para obter uma nova solução válida
- A Seleção é usada para escolher soluções mais ótimas utilizando uma função de aptidão
- Mutação é introduzida para desestabilizar a otimização e sair de mínimos locais
Se quiser implementar um Algoritmo Genético, precisa do seguinte:
- Encontrar um método para codificar as soluções do problema utilizando genes g∈Γ
- No conjunto de genes Γ, é necessário definir uma função de aptidão fit: Γ→R. Valores menores da função correspondem a melhores soluções.
- Definir um mecanismo de cruzamento para combinar dois genes e obter uma nova solução válida crossover: Γ2→Γ.
- Definir um mecanismo de mutação mutate: Γ→Γ.
Em muitos casos, os algoritmos de cruzamento e mutação são bastante simples para manipular genes como sequências numéricas ou vetores de bits.
A implementação específica de um algoritmo genético pode variar de caso para caso, mas a estrutura geral é a seguinte:
- Selecionar uma população inicial G⊂Γ
- Selecionar aleatoriamente uma das operações que será realizada neste passo: cruzamento ou mutação
- Cruzamento:
- Selecionar aleatoriamente dois genes g1, g2 ∈ G
- Calcular o cruzamento g=crossover(g1,g2)
- Se fit(g)<fit(g1) ou fit(g)<fit(g2) - substituir o gene correspondente na população por g.
- Mutação - selecionar um gene aleatório g∈G e substituí-lo por mutate(g)
- Repetir a partir do passo 2, até obter um valor suficientemente pequeno de fit, ou até atingir o limite de passos.
Tarefas Típicas
As tarefas tipicamente resolvidas por Algoritmos Genéticos incluem:
- Otimização de horários
- Empacotamento ótimo
- Corte ótimo
- Aceleração de busca exaustiva
✍️ Exercícios: Algoritmos Genéticos
Continue a sua aprendizagem nos seguintes notebooks:
Aceda a este notebook para ver dois exemplos de utilização de Algoritmos Genéticos:
- Divisão justa de tesouro
- Problema das 8 Rainhas
Conclusão
Os Algoritmos Genéticos são usados para resolver muitos problemas, incluindo logística e problemas de busca. Este campo é inspirado por pesquisas que fundiram tópicos em Psicologia e Ciência da Computação.
🚀 Desafio
"Os algoritmos genéticos são simples de implementar, mas o seu comportamento é difícil de entender." fonte Faça uma pesquisa para encontrar uma implementação de um algoritmo genético, como resolver um puzzle de Sudoku, e explique como funciona através de um esboço ou fluxograma.
Questionário pós-aula
Revisão & Autoestudo
Veja este excelente vídeo que fala sobre como um computador pode aprender a jogar Super Mario utilizando redes neurais treinadas por algoritmos genéticos. Vamos aprender mais sobre computadores a jogar jogos como este na próxima seção.
Tarefa: Equação Diofantina
O seu objetivo é resolver a chamada equação Diofantina - uma equação com raízes inteiras. Por exemplo, considere a equação a+2b+3c+4d=30. É necessário encontrar as raízes inteiras que satisfaçam esta equação.
Esta tarefa é inspirada por este post.
Dicas:
- Pode considerar raízes no intervalo [0;30]
- Como gene, considere usar a lista de valores das raízes
Use Diophantine.ipynb como ponto de partida.