コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }