/** Function which selects the elements of the population */ public void Select() { int i, j; for (i = 0; i < Popsize; i++) for (j = i + 1; j < POPSIZE; j++) if (Better(Poblacion[j].perf(), Poblacion[i].perf())) INTERCAMBIAR(i, j); if (Poblacion[0].perf() < BEST_CROM.perf()) { for (j = 0; j < Genes; j++) BEST_CROM.set_gene(j, Poblacion[0].gene(j)); for (j = 0; j < GenesA; j++) BEST_CROM.set_geneA(j, Poblacion[0].geneA(j)); for (j = 0; j < n_reglas_total; j++) BEST_CROM.set_geneR(j, Poblacion[0].geneR(j)); BEST_CROM.set_perf(Poblacion[0].perf()); BEST_CROM.set_entrado(1); } }
/** Function which restart the population */ public void ReStart() { int i, j, i_mejor; if (Ajuste == 1) { if (BEST_CROM.entrado() == 1) { /* BUSCAR EL MEJOR ELEMENTO */ for (i = i_mejor = 0; i < Popsize; i++) if (Better(Poblacion[i].perf(), Poblacion[i_mejor].perf())) i_mejor = i; for (j = 0; j < Genes; j++) Poblacion[0].set_gene(j, BEST_CROM.gene(j)); for (j = 0; j < GenesA; j++) Poblacion[0].set_geneA(j, BEST_CROM.geneA(j)); for (j = 0; j < n_reglas_total; j++) Poblacion[0].set_geneR(j, (char) 1); Poblacion[0].set_perf(BEST_CROM.perf()); i = 1; } else { i = 0; } /* REINICIALIZAR TODOS MENOS EL PRIMERO */ for (; i < Popsize; i++) { for (j = 0; j < Genes; j++) { Poblacion[i].set_gene(j, BEST_CROM.gene(j) + ((Randomize.Rand() - 0.5) / 4.0)); if (Poblacion[i].gene(j) > Gene[j].max()) Poblacion[i].set_gene(j, Gene[j].max()); if (Poblacion[i].gene(j) < Gene[j].min()) Poblacion[i].set_gene(j, Gene[j].min()); } for (j = 0; j < GenesA; j++) { Poblacion[i].set_geneA(j, BEST_CROM.geneA(j) + ((Randomize.Rand() - 0.5) / 4.0)); if (Poblacion[i].geneA(j) > Gene[j].max()) Poblacion[i].set_geneA(j, Gene[j].max()); if (Poblacion[i].geneA(j) < Gene[j].min()) Poblacion[i].set_geneA(j, Gene[j].min()); } for (j = 0; j < n_reglas_total; j++) Poblacion[i].set_geneR(j, (char) 1); } THRESHOLD = (double) ((Genes + GenesA) * BITS_GEN / 4.0); reduccionIni = THRESHOLD * 0.001; } else { if (BEST_CROM.entrado() == 1) { /* BUSCAR EL MEJOR ELEMENTO */ for (i = i_mejor = 0; i < Popsize; i++) if (Better(Poblacion[i].perf(), Poblacion[i_mejor].perf())) i_mejor = i; /* COLOCAR EL MEJOR EN LA PRIMERA POSICION */ for (j = 0; j < Genes; j++) Poblacion[0].set_gene(j, BEST_CROM.gene(j)); for (j = 0; j < GenesA; j++) Poblacion[0].set_geneA(j, BEST_CROM.geneA(j)); for (j = 0; j < n_reglas_total; j++) Poblacion[0].set_geneR(j, (char) 1); Poblacion[0].set_perf(BEST_CROM.perf()); i = 1; } else i = 0; /* REINICIALIZAR TODOS MENOS EL PRIMERO */ for (; i < Popsize; i++) { for (j = 0; j < Genes; j++) Poblacion[i].set_gene(j, BEST_CROM.gene(j)); for (j = 0; j < GenesA; j++) Poblacion[i].set_geneA( j, Gene[j].min() + (Gene[j].max() - Gene[j].min()) * Randomize.Rand()); for (j = 0; j < n_reglas_total; j++) Poblacion[i].set_geneR(j, '1'); } THRESHOLD = (double) (GenesA / 4.5); reduccionIni = THRESHOLD * 0.001; } Reiniciado = 1; }