Ciao a tutti.
Ho un problema di integrità dei dati, in particolare nel mio codice prendo un vettore da una matrice quadrata e ne passo il puntatore a una funzione che, in maniera casuale, decide se modificarlo o meno. Poi restituisce il puntatore e a quel punto copio il vettore in una nuova matrice.
Ecco il codice:
riga_corrente=0;
while(i<cicli)
{
/*prendo 2 righe random della matrice pool1 e li copio in due vettori*/
for(j=0;j<nodi;j++)
{
ind1[j] = pool1[rnd_1]][j];
ind2[j] = pool1[rnd_2][j];
}
crossover(ind1, ind2, nodi, pc);
for(j=0;j<nodi;j++)
{
pool2[riga_corrente][j] = ind1[j];
}
riga_corrente++;
for(j=0;j<nodi;j++)
{
pool2[riga_corrente][j] = ind2[j];
}
riga_corrente++;
}
Questa invece è la funzione:
/**************************************/
/*Definizione della funzione crossover*/
/**************************************/
/*funzione che applica l'operatore di crossover agli individui che gli vengono passati come parametri*/
void crossover(int* individuo1, int* individuo2, int nodi, int pc)
{
int i;
double prob;
/*genero un numero random tra 0 e 100*/
prob = RANDOM(100);
/*se il numero è minore di pc allora procedo con il crossover, altrmenti non faccio nulla*/
if(prob < pc)
{
/*modifico i vettori*/
}
else
printf("Crossover non applicato\n");/*non modifico nulla*/
}
Ora, se assegno a pc il valore 0, quindi il crossover non viene mai applicato, dovrei ottenere che alla fine del ciclo, sulla matrice pool2 ho tutti i vettori di pool1 (magari cambiato di riga).
Invece no.
Dove sbaglio?