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**