private List <Chromosome <string> > CriaPopulacaoInicial(int numeroIndividuos) { int ValorMinimo = 30; int valorMaximo = 120; int numeroGenesCromossomo = 14;// cada tempo tem o valor mázimo de 127 (7 bits) List <Chromosome <string> > populacaoinicial = new List <Chromosome <string> >(); Random rand = new Random(); for (int i = 0; i < numeroIndividuos; i++) { var novo = new Chromosome <string>(numeroGenesCromossomo * Semaforos.Count); StringBuilder strcromossomo = new StringBuilder(); for (int j = 0; j < Semaforos.Count(); j++) { int tempoaberto = 0; int tempofechado = 0; while (tempoaberto < ValorMinimo) { tempoaberto = rand.Next() % valorMaximo; } while (tempofechado < ValorMinimo) { tempofechado = rand.Next() % valorMaximo; } string cromossomo = $"{Convert.ToString(tempoaberto, 2)}{Convert.ToString(tempofechado, 2)}"; while (cromossomo.Count() < numeroGenesCromossomo) { if (rand.Next() % 2 == 0) { cromossomo = cromossomo.Insert(0, "0"); } else { cromossomo = cromossomo.Insert(1, "1"); } } strcromossomo.Append(cromossomo); } var str = strcromossomo.ToString(); for (int j = 0; j < str.Length; j++) { novo.AddGene(str[j].ToString()); } populacaoinicial.Add(novo); } return(populacaoinicial); }
public override float CalculatesEvaluation(Chromosome <string> chromosome) { if (Param1 == null || Param2 == null) { return(base.CalculatesEvaluation(chromosome)); } Semaforos = (List <Semaforo>)Param1; Ruas = (List <Rua>)Param2; if (Semaforos == null || Ruas == null) { throw new NullReferenceException("Null parameters"); } float avaliacao = 0; var semaforosCromossomo = ConverteCromossomoParaSemaforo(chromosome.Genes); for (int i = 0; i < Semaforos.Count() - 1; i++) { avaliacao += FatorCromossomo(i, semaforosCromossomo[i], semaforosCromossomo[i + 1]); } return(avaliacao); }