Algoritmo Genético no aprendizado de canhões

Definição do cromossomo:
O cromossomo do canhão é bem simples, registrando apenas seu ângulo, e poder usado no tiro.

Definição da população inicial
A população fica a critério do usuário, sendo editável no inspector. O ideal é que ela seja múltiplo de 4, pois não foram feitos testes para outras situações.

Função de aptidão (fitness)
A aptidão é decidida comparando a distância entre cada tiro e um alvo fixo. O rank, é definido comparando os indivíduos. O melhor indivíduo, ou seja, aquele que se aproximou mais, tem rank 0, o pior, dentre N indivíduos, tem rank N.

Método de seleção
Com N indivíduos, nos pegamos N/2, dentre os primeiros colocados.

Método de cruzamento
Para a metade restante da população, cruzamos indivíduo[0] com indivíduo [N/2-1], [1] COM [N/2-2], até completar a fileira.

Método de mutação
Neste código, há apenas mutação quando há um número ímpar de indivíduos, onde geramos um indivíduo aleatório por reprodução. Porém, é possível, no método par, retirar um indivíduo de cada metade, e gerar um aleatório.

Condição de parada
A condição de parada é dada pelo usuário. Devido á natureza do exercício, eu preferi deixar a reprodução controlada para analisar possíveis erros. É necessário apertar Z, esperar as bolas atingirem no chão, apertar F, depois R, depois repetir o ciclo até estar satisfeito com o resultado. Isso é facilmente modificável para atender um padrão automático.