ciao,
sto sperimentando col codice presente in questa pagina http://barcadero.wordpress.com/2011/...itmo-genetico/ ed allo scopo di comprendere le potenzialità degli algoritmi genetici, ho modificato quel sorgente per vedere se riusciva a risolvere un problema di bilanciamento.
Dati 4 dischi di dimensioni note e date anche un certo numero di cartelle le cui dimensioni dei loro contenuti sono note, ho provato ad usare l'algoritmo per fare in modo che ad ogni disco arrivassero circa la medesima quantità di dati considerando che ciò che è contenuto nella cartella non può essere mosso in un'altra.
Per inizializzare l'algoritmo quindi ho usato:
//costanti
namespace {
const int GENE_DIM = 10; // numeri di numeri nel gene
const int POPULATION_DIM = 4; // numero di individui nella popolazione(solo numeri PARI!!!)
const int MAX_FITNESS = 130000; // l'algoritmo si ferma quando nasce un individuo con questo val. di fitness di 130000 MB
}
quindi ho personalizzato un metodo
codice:
void ramdomize_gene(int numero) {
if(numero == 0){
gene[0]=6462;
gene[1]=9780;
gene[2]=67332;
gene[3]=9;
gene[4]=12;
gene[5]=100;
gene[6]=6134;
gene[7]=30580;
gene[8]=50;
gene[9]=1144;
}
if(numero == 1){
gene[0]=6;
gene[1]=859;
gene[2]=152;
gene[3]=77;
gene[4]=43022;
gene[5]=3;
gene[6]=13972;
gene[7]=1023;
gene[8]=232;
gene[9]=162;
}
if(numero == 2){
gene[0]=2907;
gene[1]=14;
gene[2]=20260;
gene[3]=7445;
gene[4]=134751;
gene[5]=28082;
gene[6]=727;
gene[7]=95101;
gene[8]=1;
gene[9]=30785;
}
if(numero == 3){
gene[0]=3284;
gene[1]=3266;
gene[2]=95;
gene[3]=198;
gene[4]=66;
gene[5]=7702;
gene[6]=616;
gene[7]=40566;
gene[8]=0;
gene[9]=0;
}
}
ed il main nel seguente modo
codice:
//for( int s = 0; s < POPULATION_DIM; s++ ) pop[s].ramdomize_gene();
pop[0].ramdomize_gene(0);
pop[1].ramdomize_gene(1);
pop[2].ramdomize_gene(2);
pop[3].ramdomize_gene(3);
problema: aumentando via via il valore di MAX_FITNESS si nota che i geni non vengono mai incrociati ma il motivo non è spiegabile. Scusate per la vaghezza ma non è un compito semplice, è un algoritmo che va provato per chi è volenteroso di capire ed imparare.
grazie