Algoritmo Genético - Angulo e velocidade do canhão

Visão geral
Algoritmos genéticos é uma técnica baseada na teoria de Charles Darwin sobre as evoluções das espécies que segue passos inspirados no processo biológico de evolução natural, ideia de sobrevivência do mais forte em cada geração.

A evolução se inicia a partir de um conjunto de soluções criado aleatoriamente e é realizada por meio de gerações. A cada geração, a adaptação de cada solução na população é avaliada, alguns indivíduos são selecionados para a próxima geração, que recombinados ou mutados para formar uma nova população. A nova população então é utilizada como entrada para a próxima iteração do algoritmo.

Assim como na teoria de Darwin esse algoritmo apresenta: É cada indivíduo é uma solução candidata.
 * Genótipo: Representação binária de indivíduos.
 * Cromossomo: conjunto de genes (bits).
 * Fenótipo: Abstração do genótipo no mundo real.
 * Cruzamento e mutação dos cromossomo.

Funcionamento
O algoritmo funciona de modo a evoluir um conjunto de indivíduos (População) ao longo de Gerações, avaliando (Fitness) a aptidão dos indivíduos, selecionando os melhores, cruzando-os e aplicando mutações pontuais. A Fitness avalia os indivíduos de acordo com o caminho evolutivo desejado.

A partir da imagem a seguir e possível ver o seu ciclo de funcionamento
 * 1) Definição do Cromossomo: O cromossomo deve representar uma solução para o problema, é pode ser representado como:
 * 2) * Codificação Binária: Cada cromossomo é uma string de bits
 * 3) * Codificação por Permutação: Cada cromossomo é uma string de números
 * 4) * Codificação de Valores: Cada cromossomo é uma seqüência de valores
 * 5) Inicialização da População Inicial: Definição do tamanho da população. Geralmente de tamanho par que pode ser gerada aleatoriamente ou baseada em soluções anteriores
 * 6) Calculo de Aptidão: Mede o quão um indivíduo é adaptado e em problemas de otimização, geralmente é representada pela função objetivo
 * 7) Método de Seleção: Guia a evolução dos indivíduos que pode ser por :
 * 8) * Elitista:
 * 9) ** Define-se um parâmetro k, cujo valor é menor que a metade do tamanho da população
 * 10) ** Copia-se os k melhores indivíduos na nova população
 * 11) ** Elimina-se os k piores indivíduos
 * 12) ** Realiza-se cruzamento entre os demais (incluindo os melhores)
 * 13) * Roleta:
 * 14) ** sorteio dos indivíduos com probabilidade associada a aptidão
 * 15) * Torneio:
 * 16) ** Define-se um parâmetro k, cujo valor é menor que a metade do tamanho da população
 * 17) ** Sorteia k indivíduos e escolhe o melhor (pai 1)
 * 18) ** Sorteia k indivíduos e escolhe o melhor (pai 2)
 * 19) Método de Reprodução:
 * 20) * Ponto fixo : a reprodução sempre vai ocorrer em um gene do cromossomo
 * 21) * Segmento Aleatório : a reprodução vai ocorrer em partes do cromossomo
 * 22) Método de Mutação: Aleatorização do código genético da população para manter a diversidade da população
 * 23) Condição de Parada:
 * 24) * Número de gerações
 * 25) * Solução encontrada
 * 26) * Perda de diversidade
 * 27) * Convergência : nas últimas k gerações não houve melhora da na aptidão

Exemplo
O vídeo a seguir mostra um exemplo de um canhão que ajusta o angulo e a velocidade de um projetil tentando atingir um alvo fixo e foi definido da seguinte maneira: Este exemplo pode ser aplicado em um jogo de Tower Defense onde a torre pode ajustar o angulo e a velocidade do tiro para acertar uma construção.
 * 1) Definição do Cromossomo:  será utilizado um vetor de struct com três posições (angulo e força) e aptidão/fitness
 * 2) Inicialização da População Inicial:16 cromossomos/indivíduos serão inicializados aleatoriamente. o ângulo poderá variar entre 0° e 90° e a força de 100 a 1000
 * 3) Calculo de Aptidão:  distância entre o alvo e o projétil quando ele cair no chão
 * 4) Método de Seleção:  será utilizado o método elitista com k=2 (corte)
 * 5) Método de Reprodução: será utilizado crossover de 1 ponto(meio) ângulo de um e força de outro
 * 6) Método de Mutação: escolhe um indivíduo aleatoriamente e altera o ângulo para valor aleatório para valores entre 0° e 90°
 * 7) Condição de Parada: algum cromossomo acertou o alvo ou x iterações

Aluno: Fabrício Moreira dos Santos - 558568