Example #1
0
        public float FatorCromossomo(int index, semaforoTemporario configuracao, semaforoTemporario proximaConfiguracao)
        {
            var   ruasEntrada        = Semaforos[index].RuasOrigem;
            var   ruasDestino        = Semaforos[index].RuasDestino;
            float somatorioLivre     = Ruas.Where(x => ruasEntrada.Contains(x.Id)).Select(x => (x.Comprimento * x.EspacoOcupado.Count) - x.EspacoOcupado.Sum()).Sum();
            float somatorioOcupado   = Ruas.Where(x => ruasEntrada.Contains(x.Id)).Select(x => x.EspacoOcupado.Sum()).Sum();
            float espacoLivreProximo = Ruas.Where(x => ruasDestino.Contains(x.Id)).Select(x => (x.Comprimento * x.EspacoOcupado.Count) - x.EspacoOcupado.Sum()).Sum();

            float fator1 = (somatorioLivre + somatorioOcupado) / (somatorioOcupado + configuracao.aberto);
            float fator2 = (espacoLivreProximo - (somatorioOcupado / configuracao.aberto));

            if (fator2 < 0)
            {
                fator2 *= -1;
            }
            fator2 = fator2 - proximaConfiguracao.aberto;
            var retorno = fator1 - fator2;

            if (retorno < 0)
            {
                retorno = 0;
            }
            if (configuracao.aberto <= maxValue && configuracao.fechado >= minValue)
            {
                retorno += 30;
            }
            else
            {
                retorno = 0;
            }
            return(retorno);
        }
Example #2
0
        public List <semaforoTemporario> ConverteCromossomoParaSemaforo(List <string> Cromossomo)
        {
            var retorno            = new List <semaforoTemporario>();
            int qtdGenesCromossomo = Cromossomo.Count / Semaforos.Count; // numeros de genes por cromossomo
            int pat = 0;                                                 // posicao atual

            for (int i = 0; i < Semaforos.Count; i++)
            {
                StringBuilder sm = new StringBuilder();
                for (int j = 0; j < qtdGenesCromossomo; j++)
                {
                    sm.Append(Cromossomo[pat + j]);
                }
                pat += qtdGenesCromossomo;
                var semaforo = new semaforoTemporario
                {
                    aberto  = Convert.ToInt32(sm.ToString().Substring(0, qtdGenesCromossomo / 2), 2),
                    fechado = Convert.ToInt32(sm.ToString().Substring(qtdGenesCromossomo / 2), 2)
                };
                retorno.Add(semaforo);
            }
            return(retorno);
        }