//Caso não tenha um desempenho bom, refazer método para gerar população inicial de forma mais inteligente public override void GerarPopulacaoInicial() { /*Random rnd = new Random(); for (int individuo = 0; individuo < TamanhoPopulacao; individuo++) { IIndividuo ind = new Sudoku(TamanhoIndividuo); for (int cromossomo = 0; cromossomo < TamanhoIndividuo; cromossomo++) { int p; do { p = rnd.Next(10); } while (p == 0); ind.Cromossomos[cromossomo] = p; } Populacao.Add(ind); }*/ Random rnd = new Random(); for (int individuo = 0; individuo < TamanhoPopulacao; individuo++) { IIndividuo ind = new Sudoku(TamanhoIndividuo); for (int cromossomo = 0; cromossomo < TamanhoIndividuo; cromossomo++) { int p; do { do { p = rnd.Next(10); } while (p == 0); } while (verificaRepetidoLinha(p, cromossomo, ind)); ind.Cromossomos[cromossomo] = p; } Populacao.Add(ind); } }
public override IIndividuo RealizarCruzamento(IIndividuo a, IIndividuo b) { IIndividuo novo = new Sudoku(TamanhoIndividuo); int modulo = TamanhoIndividuo % 2; int metade = (TamanhoIndividuo - modulo) / 2; for (int indice = 0; indice < metade; indice++) novo.Cromossomos[indice] = a.Cromossomos[indice]; for (int indice = metade; indice < TamanhoIndividuo; indice++) novo.Cromossomos[indice] = b.Cromossomos[indice]; return novo; }
public GeraSudoku(int tamanhoInd) { Solucao = new Sudoku(tamanhoInd); Solucao.Fitness = -30; }