Esempio n. 1
0
        public static RodouAG RodarAg()
        {
            var text1 = "";
            var text2 = "";
            var text3 = "";

            //Define a solu��o
            AlgGenetico.Algoritimo.Solucao = Convert.ToInt32(config.SolucaoMax);
            // Ler o arquivo com os genes e respectivos valores e configura as vari�veis de Jobs e Maquinas que est�o no arquivo TXT
            AlgGenetico.Algoritimo.lerArquivo(Convert.ToInt32(HttpContext.Current.Session["idUsuario"]));
            //taxa de crossover de 60%
            AlgGenetico.Algoritimo.TaxaDeCrossover = config.TaxaCrossover;
            //taxa de muta��o de 3%
            AlgGenetico.Algoritimo.TaxaDeMutacao = config.TaxaMutacao;
            //elitismo
            bool eltismo = config.Eltismo;
            //tamanho da popula��o
            int tamPop = config.TotalPopulacao;
            //numero m�ximo de gera��es
            int numMaxGeracoes = config.TotalGeracao;

            //define o n�mero de genes do indiv�duo baseado na solu��o
            int numGenes = AlgGenetico.Algoritimo.Jobs.Length;

            if(numGenes == 0)
            {
                return new RodouAG() { text1 = "O algotirimo não pode trabalhar sem nenhum dado lançado!", text2 = "", text3 = "" };
            }

            //cria a primeira popula��o aleat�ria
            AlgGenetico.Populacao populacao = new AlgGenetico.Populacao(numGenes, tamPop);

            bool temSolucao = false;
            int geracao = 0;

            text1 = "Iniciando... Aptidão da solução: " + AlgGenetico.Algoritimo.Solucao;

            //loop at� o crit�rio de parada
            while (!temSolucao && geracao < numMaxGeracoes)
            {
                geracao++;

                //cria nova populacao
                populacao = AlgGenetico.Algoritimo.novaGeracao(populacao, eltismo);

                text2 = "Geração " + geracao + " | Aptidão: " + populacao.getIndivduo(0).Aptidao + " | Melhor: ";

                for (int i = 0; i < populacao.getIndivduo(0).Genes.Length; i+=4)
                {
                    text2 += populacao.getIndivduo(0).Genes.Substring(i, 4) + "\n";
                }

                temSolucao = populacao.temSolocao(AlgGenetico.Algoritimo.Solucao);
            }

            if (geracao == numMaxGeracoes)
            {
                text3 = "Número Maximo de Gerações atingido! Solução acima foi a melhor encontrada!\n\n";
            }

            if (temSolucao)
            {
                text3 = "Encontrado resultado na geração " + geracao + "\n\n";
            }

            var t = populacao.getIndivduo(0).Genes;

            lstGenes = new List<Genes>();
            DAO dao;

            for (int i = 0; i < t.Length; i += 4)
            {
                var sku = t.Substring(i, 4).Substring(0, 3);
                var maq = t.Substring(i, 4).Substring(3, 1);

                dao = new DAO();
                var vlr = dao.getValorGene(sku, maq, Convert.ToInt32(HttpContext.Current.Session["idUsuario"]));

                DateTime inicio;
                DateTime fim;

                inicio = DateTime.Now.Date.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute);
                fim = DateTime.Now.Date.AddHours(DateTime.Now.Hour).AddMinutes(vlr * 60).AddMinutes(DateTime.Now.Minute);

                foreach (var item in lstGenes)
                {
                    if(maq == item.Maq) {
                        inicio = item.Final.AddMinutes(30);
                        fim = inicio.AddMinutes(60 * vlr);
                    }
                }

                lstGenes.Add(new Genes() { Sku = sku, Maq = maq, Inicio = inicio, Final = fim });
            }

            dao = new DAO();
            dao.setarResultado(lstGenes, Convert.ToInt32(HttpContext.Current.Session["idUsuario"]));

            return new RodouAG() { text1 = text1, text2 = text2, text3 = text3 };
        }