sábado, outubro 01, 2005

Agora já bate tudo certo (ou quase...)

Depois de, na semana passada, os resultados experimentais do cGA que eu implementei não parecerem estar muito famosos, eis que agora, não sei bem como, tudo está conforme (aproximadamente) o que seria de esperar. Também é verdade que agora os resultados que apresento como gráficos no Excel foram feitos usando a média aritmética dos valores obtidos em 30 execuções do algoritmo, usando uma vez mais, como teste, a aplicação de usar uma função de trap's múltiplos concatenados.
O único senão é no total de cálculo da função de fitness, os resultados excedem ligeiramente os resultados apresentados no artigo citado. Mas, mesmo assim, de resto, todos os resultados são bastante satisfatórios. Os melhores são os que registam o número de building blocks no fim do algoritmo, o troço do gráfico segue quase a par os dos gráficos do artigo. Para além disso, de salientar que desta vez experimentar também com populações de 100 e 200, para ver como o algoritmo progride para pequenas alterações nesta gama de valores. E de facto, nota-se, quer tanto para s=4 e s=8 (s é a pressão de selecção), uma pequena subida quando se passa de popsize=8 para popsize=100 (popsize é o tamanho da população). O que não seria possível de verificar se não tivesse experimentado com esses valores.
Não consigo perceber a razão para os resultados agora estarem com esta qualidade, a única alteração que fiz no código foi na parte para seleccionar o melhor indivíduo, e estava relacionado com uma variável (que guarda o melhor fitness até o momento dentro de um loop que percorre todos os indivíduos gerados dentro de um array) em vez de ser inicializada com zero com estava dantes, passou a ser feita com menos infinito (ou melhor, o valor de Double.NEGATIVE_INFINITY ), e para além disso, estive a documentar o código todo com javadoc's e não me parece que fossem os comentários que fizessem com que o compilador percebesse também melhor o código :)
Aqui ficam os resultados obtidos:
















2 Comments:

Blogger pescadordigital said...

Notei um pormenor curioso: os resultados que aparecem no gráfico para o número de building blocks correcto são quase sempre o dobro dos que aparecem no artigo. Estarei a contar uma função fitness duas vezes ? Estive a rever o código e não encontro nada de errado. Tenho que voltar a tocar neste pormenor.

01 outubro, 2005 17:59  
Blogger pescadordigital said...

Estive a rever o meu código e acabei por encontrar afinal que estava a chamar a função que calcula o fitness duas vezes. Criei uma variável para receber o valor do primeiro cálculo, de forma a poder usar no lugar onde estava a chamar a função fitness pela segunda vez. Agora já bate tudo certo :)

02 outubro, 2005 14:35  

Enviar um comentário

<< Home