Algoritmo Genético - Canhão

O que é o Algoritmo Genético?
O Algoritmo Genético trata-se de uma técnica da computação que busca soluções ótimas para resolver problemas. Essa técnica foi baseada na teoria da evolução das espécies de Charles Darwin, onde uma população pode sofrer mutações a fim de estabelecer uma melhor pressão seletiva.

Alguns conceitos importantes do Algoritmo Genético são:
 * Genótipo: trata-se da representação binária do indivíduo. Cada cromossomo trata-se de um conjunto de genes (bits).


 * Fenótipo: apresentação no mundo real do genótipo (Exemplos: aparência, comportamento, ações, etc)

Como Funciona o Algoritmo Genético?
Para aplicarmos o Algoritmo Genético, precisamos entender o esquema a seguir: De acordo com esse esquema, podemos concluir que, após o início do algoritmo, inicializamos a população e fazemos um cálculo de aptidão (a qual damos o nome de fitness). Se essa aptidão for encontrada, o algoritmo termina, se não, é feita a seleção dos indivíduos, depois a reprodução e em seguida a mutação e retornamos para o cálculo da aptidão até satisfazer o ciclo. O esquema é a base para que a modelagem do algoritmo seja feita. Nela, precisamos realizar sete passos que nos ajudarão na implementação do código do algoritmo genético. São eles:

1. Definição do Cromossomo:
"Cromossomos tratam-se de conjuntos de DNA (genes) que servem para determinar as características do indivíduo. Tendo esse conhecimento em mente, precisamos definir o cromossomo de forma que ele represente uma solução para o problema. Os cromossomos podem ser representados de forma binária (valores 0 e 1), permutação (números) e valor (números, letras, ou qualquer outra sequência de valores)."

2. Definição da População Inicial:
"Trata-se do tamanho da população. Em geral, é recomendado que seja tamanho par, de preferência na base 2, como 4, 8, 16 e 32 indivíduos."

3. Função de Aptidão (Fitness):
"É uma função que mede o nível de adaptação do indivíduo que está sendo avaliado e retorna uma nota para ele."

4. Seleção:
"Faz uso de alguns métodos para selecionar quais indivíduos serão selecionados para reproduzir a próxima população.""Os métodos mais conhecidos são:" a) Elitismo: esse método seleciona os k melhores indivíduos e elemina os k piores, fazendo o cruzamento entre os melhores e os demais cromossomos.

b) Roleta: nesse método, os cromossomos são divididos em parcelas da roleta de acordo com seu fitness e faz um sorteio para definir onde o indivíduo atual poderá cair. Como a maior parcela da roleta em geral é a que representa os melhores indivíduos e a menor os piores, em geral a porcentagem de chance que o indivíduo caia na parcela dos melhores é maior.

c) Torneio: é baseado em um torneio, e assim como o método roleta, é feito um sorteio. O sorteio é feito entre K indivíduos e desses é escolhido o melhor que "avança para a próxima faze" continua sendo feito esse sorteio até que todos os indivíduos sejam feitos. No final, teremos o cromossomo "vencedor".

5. Cruzamento/Reprodução:
"Genes dos pais são combinados para formar novos cromossomos. Podemos utilizar uma das três opções a seguir para fazer o Crossover (Cruzamento):" a) Ponto Fixo: um ponto é definido no cromossomo onde é feita uma divisão e os demais genes são trocados com o outro cromossomo. Esse ponto não se altera de posição.

b) Ponto Aleatório: um ponto é definido no cromossomo onde é feita uma divisão e os demais genes são trocados com o outro cromossomo. Esse ponto se altera de posição.

c) Multipontos: um seguimento do cromossomo é escolhido e este é trocado com o outro cromossomo.

6. Mutação:
"O código genético do indivíduo é aleatorizado. A mutação é muito importante para manter a diversidade da população e a pressão seletiva. Em geral, é ideal que ela mantenha uma taxa baixa."

7. Condição de Parada:
"Trata-se da condição necessária para que o algoritmo atinja seu fim. Em geral, é utilizado uma quantidade X de iterações e a solução necessária seja encontrada."

Exemplo Aplicado em um Jogo
Durante as aulas de Agentes Inteligentes, foi proposto um problema em que aplicamos a técnica de Algoritmo Genético para que um Canhão atire um projétil e este atinja o alvo.

A modelagem do Algoritmo Genético foi feita da seguinte forma:
 * Definição do Cromossomo: foi definido nesse problema que os cromossomos serão o ângulo e a força do projétil.
 * Definição da População Inicial: a população inicial foi definida como 4 (representando o número de projéteis a serem disparados).
 * Função de Aptidão (Fitness): recebe como parâmetro o ângulo e a força do projétil e faz o calculo entre a posição do alvo e onde o projetil caiu. A função retorna então a distância entre essas posições.
 * Seleção: O método de seleção escolhido para esse caso foi a Roleta.
 * Cruzamento/Reprodução: Foi utilizado para esse problema o método de cruzamento Ponto Aleatório
 * Mutação: a mutação irá aleatorizar o ângulo de disparo do canhão entre 0º e 90º e também aleatorizar o tamanho da força entre 100 e 1000.
 * Condição de Parada: O algoritmo irá parar de realizar as iterações quando forem feitas 500 iterações ou quando o projétil atingir o alvo.

Vídeo Demonstrativo:
Link para Download do Package:

https://drive.google.com/open?id=1TXWM4w4BHr99Tyl51MJPGXDdycoYd04K

Aluna: Larissa Maria Bitencourt Cavalieri - 558573