Algorítmo Genético - Canhão

## **Algoritmo Genético**

Para começarmos a desenvolver o código devemos primeiro entender a lógica por trás do Algoritmo Genético.

## **Como ele funciona**

Como podemos ver por esse fluxograma estes são os passos para o funcionamento do Algoritmo Genético. Nós inicializamos o algoritmo e o primeiro passo dele é inicializar a população inicial definindo seus cromossomos, após isso avaliamos a aptidão de toda a população e checamos se a aptidão atinge o critério que foi solicitado para parar o algoritmo, caso tenha atingido o programa se encerra caso contrário entraremos em um loop até que a aptidão atinja o critério.O primeiro passo após perceber que a aptidão não atinge o que foi solicitado é fazer a seleção dos indivíduos escolhendo um dos possíveis métodos (os mais conhecidos são o método do elitismo, método da roleta e o método do torneio), depois efetuamos a reprodução dos indivíduos escolhidos pela seleção e verificamos se há mutação. Após estes passos retornamos para a avaliação da aptidão desta nova geração e checagem se alguma das aptidões atingiu o critério de parada.

## **Explicando os passos**

Explicando um pouco melhor dos 7 passos citados no paragrafo anterior utilizando um problema proposto em sala de aula que é fazer com que um canhão atinja um alvo utilizando algoritmo genético.

1. **Definição de Cromossomo:** Neste passo devemos atribuir todas as variáveis necessárias para alcançarmos o resultado desejado. No caso do canhão foi atribuído ao cromossomo as variáveis ângulo forca e aptidão.
2. **Definição da população inicial:** Trata-se do tamanho da população a ser utilizada durante todo o algoritmo. É recomendado que seja de tamanho par e de preferência que seja na base 2, como 4, 8, 16 , 32. No caso do canhão estão sendo utilizados 32 indivíduos na população inicial.
3. **Avaliação de aptidão:** Esta avaliação irá ser diferente para cada problema onde o objetivo eh alcançar a aptidão mais próxima do critério de parada. No caso do canhão a avaliação da aptidão será o cálculo da distancia entre o projétil após alcançar o chão e o alvo.
4. **Seleção:** Os métodos de seleção mais utilizados para fazer a seleção de alguns indivíduos da população são:
	1. **Elitismo:** Consistem em selecionar os k melhores indivíduos e eliminar os k piores elementos.
	2. **Roleta:** Consiste em dividir os cromossomos em porcentagens de acordo com suas aptidões. Após isso é sorteado uma porcentagem e o indivíduo que estiver dentro desta faixa sorteada é selecionado.
	3. **Torneio:** Consiste em uma disputa como se fosse uma chave de campeonato, e assim como no método roleta, é separado a porcentagem de chance de cada cromossomo conforme suas aptidões. Este sorteio será feito entre k indivíduos e dentre eles o que for escolhido avança para a próxima fase. Este sorteio continua a ser feito até que todos os indivíduos sejam feitos. No final teremos um cromossomo vencedor.

No caso do canhão está sendo utilizado o método do elitismo.

1. **Cruzamento:** Os indivíduos selecionados são combinados pelo métodos de CrossOver que pode ser feito de 3 maneiras, sendo elas:
	1. **Ponto fixo:** um ponto definido no indivíduo onde é feita a divisão das demais informações e as demais informações são trocados com outro indivíduo. Este ponto não se altera de posição.
	2. **Ponto Aleatório:** um ponto é definido no indivíduo onde é feita uma divisão e os demais genes são trocados com o outro indivíduo. Esse ponto se altera de posição.
	3. **Multipontos:** um seguimento do cromossomo é escolhido e este é trocado com o outro cromossomo.

No caso do canhão foi utilizado o cruzamento de ponto fixo.

1. **Mutação:** O código genético do indivíduo é gerado aleatoriamente. 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. No caso do canhão foi utilizado uma porcentagem baixa de 2%;
2. **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. No caso do canhão foi utilizado a condição de 50 iterações ou 80% da população atingir o alvo.

## **Exemplo em um jogo.**

Como citado no começo deste documento foi proposto um problema em sala de aula que é fazer com que um canhão atinja um alvo utilizando algoritmo genético.

* **Definição do Cromossomo:** foi definido nesse problema que os cromossomos serão o ângulo e a, força do projétil e aptidão.
* **Definição da População Inicial:** a população inicial foi definida como 32 (representando o número de projéteis a serem disparados).
* **Avaliação de Aptidão :** é calculado a distancia fazendo a subtração entre a posição do tiro após o projétil atingir o chão e o alvo. A função atualiza a variável aptidão do indivíduo analisado.
* **Seleção:** O método de seleção escolhido para esse caso foi o Elitismo.
* **Cruzamento/Reprodução:** Foi utilizado para esse problema o método de cruzamento Ponto Fixo.
* **Mutação:** a mutação irá randomizar o ângulo de disparo do canhão entre 0º e 90º e também randomizar o tamanho da força entre 0 e 100.
* **Condição de Parada:** O algoritmo irá parar de realizar as iterações quando forem feitas 50 iterações ou quando o 80% dos projéteis atingir o alvo.

## **Vídeo demonstrativo**

LINK.

**Página escrita por : Carlos A. B. Mariano - 467072 - 6º período de Tecnologia em Jogos Digitais - Pela Pontifícia Universidade Católica de Minas Gerais.**