void Update()
 {
     if (Input.GetKey("space"))
     {
         AlgoritmoGenetico.AvanzarGeneracion();
     }
 }
예제 #2
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                if (Context.User.Identity.GetUserId() != null)
                {
                    System.Diagnostics.Debug.WriteLine("Iniciando");
                    List <Cancion> lst = new List <Cancion>();
                    using (DBManualConnection db = new DBManualConnection())
                    {
                        lst = db.getCanciones(idUsuario: Context.User.Identity.GetUserId());
                    }

                    if (lst.Count != 0)
                    {
                        AlgoritmoGenetico ag = new AlgoritmoGenetico(lst);
                        ag.calcularAptitudPoblacionInicial();
                        List <List <Tag> > lstTagsHijos = new List <List <Tag> >();
                        lstTagsHijos = ag.generarParejas();

                        //Conversion para desplagar los tags en web

                        /*
                         * List<String> tagsCancionesHijas = new List<String>();
                         * String renglonTag = "";
                         * foreach (List<Tag> lstTag in lstTagsHijos)
                         * {
                         *  renglonTag = "";
                         *  foreach (Tag tag in lstTag)
                         *  {
                         *      renglonTag += tag.Nombre + ", ";
                         *  }
                         *  tagsCancionesHijas.Add(renglonTag);
                         * }
                         * grd1.DataSource = tagsCancionesHijas;
                         * grd1.DataBind();
                         */

                        //Obteniendo canciones recomendadas por los tags creados
                        List <Cancion> lstCancionesRecomendadas = new List <Cancion>();
                        foreach (List <Tag> lstTag in lstTagsHijos)
                        {
                            using (DBManualConnection db = new DBManualConnection())
                            {
                                lstCancionesRecomendadas.AddRange(db.obtenerListaCancionesRecomendadas(lstTag));
                            }
                        }
                        List <Cancion> lstCancionesRecomendadasSinRepetir = lstCancionesRecomendadas.GroupBy(x => x.Id).Select(x => x.First()).ToList();
                        //grd2.DataSource = lstCancionesRecomendadasSinRepetir;
                        //grd2.DataBind();
                        rep1.DataSource = lstCancionesRecomendadasSinRepetir;
                        rep1.DataBind();
                    }
                }
            }

            string strGUID = Context.User.Identity.GetUserId();
        }
    void Awake() //Ponemos acá todas las funciones de inicialización
    {
        Ayudante.Inicializar();
        AlgoritmoGenetico.Inicializar();
        GameObject.Find("FraseModelo").GetComponent <FraseModelo>().Inicializar();

        GameObject.Find("populationN").GetComponent <Text>().text = "N° de pobladores: " + Config.nPobladores;
        GameObject.Find("mutation%").GetComponent <Text>().text   = "% de mutación: " + Config.mutationRate;
    }
예제 #4
0
    /**
     * Abaixa a prioridade da câmera e fala pro
     * algoritmo genético para morrer.
     */
    public void Morrer()
    {
        if (!morto)
        {
            cameraCinemachine.Priority = 0;
            CancelInvoke();

            AlgoritmoGenetico alg = FindObjectOfType <AlgoritmoGenetico>();
            alg.MatarIndividuo(this);
        }
    }
예제 #5
0
    void Awake()
    {
        this.AlgoritmoGenetico = new AlgoritmoGenetico();

        AlgoritmoGenetico.TxtVelocidad  = txtVelocidad;
        AlgoritmoGenetico.TxtGeneracion = txtGeneracion;
        AlgoritmoGenetico.TxtIndividuo  = txtIndividuo;
        AlgoritmoGenetico.TxtRotacion   = txtRotacion;
        AlgoritmoGenetico.TxtMatriz     = txtMatriz;

        this.AlgoritmoGenetico.Evolucionar();
    }
예제 #6
0
        private void btnInicializar_Click(object sender, EventArgs e)
        {
            int    tamanhoPopulacao = Convert.ToInt32(txtQuantidadePopulacao.Text);
            double taxaDeMutacao    = Convert.ToDouble(txtTaxaDeMutacao.Text);
            int    maximoDeGeracoes = Convert.ToInt32(txtMaximoDeGeracoes.Text);

            AlgoritmoGenetico algoritmoGenetico = new AlgoritmoGenetico(tamanhoPopulacao, taxaDeMutacao, maximoDeGeracoes);

            algoritmoGenetico.Evolucao();

            txtGeracoes.Text = algoritmoGenetico.QuantidadeDeGeracoes.ToString();

            int[] populacao = algoritmoGenetico.Populacao;
            PreencheListBox(populacao);
        }
예제 #7
0
    public List <Vehiculo> getSolution()
    {
        List <Linea>    lineas    = obtenerListaLineas();
        List <Vehiculo> vehiculos = obtenerListaVehiculos();

        AlgoritmoGenetico AG       = new AlgoritmoGenetico(vehiculos, lineas);
        Individuo         solucion = AG.IniciarGenetico();

        Debug.Log("GENERACION #" + AG.getGeneracionActual() + "\n");
        Debug.Log(solucion.PrintStringIndividuo());
        // Vehiculos a la linea a la que pertenecen.
        List <Vehiculo> lista = solucion.GetVehiculos();

        return(lista);
    }
예제 #8
0
        private void btnExecutar_Click(object sender, EventArgs e)
        {
            buttonCriarPop.Enabled = false;

            int torneio = int.Parse(labelTamannhoTorneio.Text);

            evolucoes += int.Parse(labelEvolucao.Text);

            positivoInfinito = double.PositiveInfinity;

            Configuracao.numeroCompetidores = torneio;

            Configuracao.Tipo tipo = Configuracao.Tipo.FIXO;

            if (rbDHM_ILC.Checked)
            {
                tipo = Configuracao.Tipo.DHM_ILC;
            }
            else if (rbILM_DHC.Checked)
            {
                tipo = Configuracao.Tipo.ILM_DHC;
            }

            Configuracao.tipo = tipo;

            AlgoritmoGenetico algoritmoGenetico = new AlgoritmoGenetico();

            algoritmoGenetico.aptidao      = new AptidaoDistancia(mapa);
            algoritmoGenetico.selecao      = new SelecaoTorneio(Configuracao.numeroCompetidores, Configuracao.aleatorio);
            algoritmoGenetico.mutacao      = mutacao = new MutacaoDoisGenes(Configuracao.taxaMutacao, Configuracao.aleatorio);
            algoritmoGenetico.solucao      = new SolucaoLimiteGeracao(evolucoes);
            algoritmoGenetico.crossover    = crossover = new CrossoverPmx(Configuracao.aleatorio, Configuracao.taxaCrossover);
            algoritmoGenetico.substituicao = new SubstituicaoTotal();
            algoritmoGenetico.observadores.Add(this);
            algoritmoGenetico.execute(populacao);

            g.Clear(Color.White);
            desenharLinhas(populacao, Color.Blue);
            desenharPontos();

            botaoExportarMelhorIndiv.Enabled = true;
        }
 void Start()
 {
     AlgoritmoGenetico.GenerarPoblacion();
 }
예제 #10
0
 // Use this for initialization
 void Start()
 {
     algGen = FindObjectOfType <AlgoritmoGenetico>();
 }
        private void BtnExecutar_Click(object sender, EventArgs e)
        {
            count_exec++;

            #region  Desativar os botões enquanto executa

            btnDicas.Enabled        = false;
            btnInformacao.Enabled   = false;
            btnGrafico.Enabled      = false;
            btnDicas.Enabled        = false;
            btnCriarPop.Enabled     = false;
            btnExecutar.Enabled     = false;
            btnSair.Enabled         = false;
            btnConfiguracao.Enabled = false;
            btnLimpar.Enabled       = false;
            btnInserir.Enabled      = false;
            btnImportar.Enabled     = false;
            btnSalvar.Enabled       = false;

            #endregion

            var deuErro = false;

            //Valida se o campo esta nulo
            txtTamPop.Text = txtTamPop.Text.Equals("") ? "1" : txtTamPop.Text;

            //Altera o tamanho da população sem a necessida de pressionar o botão criar pop
            if (popTamAux != int.Parse(txtTamPop.Text))
            {
                ConfigurationGA.tamPopulacao = int.Parse(txtTamPop.Text);
                //Caso a população esteja em 0 ou Nulla é setada como 1
                if (ConfigurationGA.tamPopulacao == 0)
                {
                    ConfigurationGA.tamPopulacao = 1;
                    txtTamPop.Text = "1";
                }
                popTamAux = int.Parse(txtTamPop.Text);
                pop       = new Population();
            }

            #region Configuração do AG // Tratamento de entrada de dados nos campos

            //Configurar AG
            txtTaxaMutacao.Text = txtTaxaMutacao.Text.Equals(" ,") ? "0" : txtTaxaMutacao.Text;
            float taxaMutacao = float.Parse(txtTaxaMutacao.Text);

            txtTaxaCrossover.Text = txtTaxaCrossover.Text.Equals(" ,") ? "0" : txtTaxaCrossover.Text;
            float taxaCrossover = float.Parse(txtTaxaCrossover.Text);

            txtQtdeTorneio.Text = txtQtdeTorneio.Text.Equals("") ? "0" : txtQtdeTorneio.Text;
            int torneio = int.Parse(txtQtdeTorneio.Text);

            txtEvolucao.Text = txtEvolucao.Text.Equals("") ? "1" : txtEvolucao.Text;
            evolucoes       += int.Parse(txtEvolucao.Text);

            ConfigurationGA.taxaCruzamento = taxaCrossover;
            ConfigurationGA.taxaMutacao    = taxaMutacao;
            ConfigurationGA.numCompetidor  = torneio;
            ConfigurationGA.Mutation mutacao = ConfigurationGA.Mutation.NovoInd;

            #endregion


            //Verifica o tipo de mutação selecionado
            if (rbNovoIndividuo.Checked)
            {
                mutacao = ConfigurationGA.Mutation.NovoInd;
            }
            else if (rbPopulacao.Checked)
            {
                mutacao = ConfigurationGA.Mutation.NaPopulacao;
            }
            ConfigurationGA.mutationType = mutacao;

            //Verifica se o elitismo foi checkado
            if (checkElitismoo.Checked)
            {
                ConfigurationGA.elitismo = true;

                txtQtdeelitismoo.Text       = txtQtdeelitismoo.Text.Equals("") ? "0" : txtQtdeelitismoo.Text;
                ConfigurationGA.tamElitismo = int.Parse(txtQtdeelitismoo.Text);
            }
            else
            {
                ConfigurationGA.elitismo = false;
            }

            //Inicia uma instancia do AG (Metodo responsavel por aplicar o ciclo de evolução)
            AlgoritmoGenetico AG = new AlgoritmoGenetico();

            for (i = iTemp; i < evolucoes; i++)
            {
                iTemp++;
                lbEvolucoes.Text = i.ToString();
                lbEvolucoes.Refresh();

                try
                {
                    //Recebe a população evoluida
                    pop = AG.ExecuteGA(pop);
                }
                catch (IndexOutOfRangeException)
                {
                    //Mostra a mensagem de erro apenas uma vez
                    if (deuErro == false)
                    {
                        MessageBox.Show("Favor, adicionar mais que uma cidade", "AG - TSP");
                        deuErro = true;
                    }
                    //Limpa o necessario para recomeçar
                    ForcarLimpeza();
                    break;
                }

                //Pega o individuo com o melhor fitness
                pop.GetBest().CalcFitness();

                //Verifica se o usario optou pelo 2opt
                if (twoOptCheck.Checked)
                {
                    Utils.TwoOpt(pop.GetBest());
                }

                //Ápos o 2opt pega o melhor individuo novamente, pois o 2opt fez uma nova melhoria
                pop.GetBest().CalcFitness();

                //Limpa o grafico da media da população
                zedMedia.GraphPane.CurveList.Clear();
                zedMedia.GraphPane.GraphObjList.Clear();

                //Fazemos o calcula da media do fitness da população e jogamos no grafico
                double mediaPop = pop.GetMediaPop();
                mediaPopulacao.Add(i, mediaPop);

                //Pegamos o fitness do melhor individuo
                double bestFitness = pop.GetBest().GetFitness();

                //Desenha no grafico
                LineItem media = paneMedia.AddCurve("Média", mediaPopulacao, Color.Red, SymbolType.None);

                //Print linhas a cada 6 evolucoes, entra no if apenas quando o individuo da evolução corrente for melhor do que os individuos das evoluções anteriores
                if (bestFitness < bestAux)
                {
                    bestAux = bestFitness;
                    g.Clear(Color.White);
                    PlotLines(pop, Color.Blue);
                    PlotPoints();

                    //Atualiza laber com a distancia do melhor individuo
                    lbMenorDistancia.Text = bestFitness.ToString("0.0");
                    lbMenorDistancia.Refresh();

                    lbMenorDistancia2.Text = bestFitness.ToString("0.0");
                    lbMenorDistancia2.Refresh();
                }

                //Redesenhamos o grafico
                zedMedia.AxisChange();
                zedMedia.Invalidate();
                zedMedia.Refresh();
            }

            #region Ativa os botoes novamente

            btnDicas.Enabled        = true;
            btnInformacao.Enabled   = true;
            btnGrafico.Enabled      = true;
            btnDicas.Enabled        = true;
            btnExecutar.Enabled     = true;
            btnSair.Enabled         = true;
            btnConfiguracao.Enabled = true;
            btnLimpar.Enabled       = true;
            btnInserir.Enabled      = true;
            btnImportar.Enabled     = true;
            btnSalvar.Enabled       = true;

            #endregion
        }
예제 #12
0
        private void iniciarEvolucion(object sender, EventArgs e)
        {
            List <Imagen> imagenesFinales = new List <Imagen>();

            if (!validateInput())
            {
                MessageBox.Show("Por favor inserte parámetros correctos.", "Error en las configuraciones",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            button1.Text = "Detener";
            SingletonCache singleton = SingletonCache.Instance;

            singleton.DistGChecked         = DistanciaGCheck.Checked;
            singleton.DistManChecked       = DistanciaManCheck.Checked;
            singleton.histColorChecked     = histColorCheck.Checked;
            singleton.histFormaChecked     = histFormaCheck.Checked;
            singleton.tamPoblacion         = Int32.Parse(entryPoblacion.Text);
            singleton.porcCruses           = float.Parse(entryCruces.Text, System.Globalization.CultureInfo.InvariantCulture.NumberFormat);
            singleton.porcMenosApt         = float.Parse(entryMenosApt.Text, System.Globalization.CultureInfo.InvariantCulture.NumberFormat);
            singleton.porcMutacion         = float.Parse(entryMutacion.Text, System.Globalization.CultureInfo.InvariantCulture.NumberFormat);
            singleton.cantidadItereaciones = Int32.Parse(entryIteraciones.Text);
            SingletonCache.crearEstadisticas();
            AlgoritmoGenetico.primeraGeneracion(pixel);
            imagenGenerada.Image       = singleton.poblacion[0].image;
            singleton.indMenosAptoHist = singleton.poblacion[singleton.tamPoblacion - 1];
            singleton.indMasAptoHist   = singleton.poblacion[0];
            updateStatistics();
            singleton.objetivo.calcularDiferencia(singleton.objetivo);
            Console.WriteLine(singleton.objetivo.diferencia);
            bool trampa = conTrampaCheck.Checked;

            if (trampa)
            {
                for (int i = 1; i < SingletonCache.Instance.cantidadItereaciones; i++)
                {
                    if (continuar)
                    {
                        trampa = false;
                        if (i % 10 == 0)
                        {
                            trampa = true;
                        }
                        AlgoritmoGenetico.siguienteGeneracion(trampa);
                        SingletonCache.Instance.numGeneracion++;
                        updateStatistics();
                        if ((i - 1) % (SingletonCache.Instance.cantidadItereaciones / 10) == 0)
                        {
                            imagenesFinales.Add(SingletonCache.Instance.indMasAptoGen);
                            SingletonCache.agregarGeneracion();
                        }
                    }
                    else
                    {
                        break;
                    }
                }
            }
            else
            {
                int boosts = (SingletonCache.Instance.cantidadItereaciones / 5);

                for (int i = 1; i < SingletonCache.Instance.cantidadItereaciones; i++)
                {
                    if (continuar)
                    {
                        trampa = false;
                        if (i % boosts == 0)
                        {
                            trampa = true;
                        }
                        AlgoritmoGenetico.siguienteGeneracion(trampa);
                        SingletonCache.Instance.numGeneracion++;
                        updateStatistics();
                        if ((i - 1) % (SingletonCache.Instance.cantidadItereaciones / 10) == 0)
                        {
                            imagenesFinales.Add(SingletonCache.Instance.indMasAptoGen);
                            SingletonCache.agregarGeneracion();
                        }
                    }
                    else
                    {
                        break;
                    }
                }
            }
            if (continuar)
            {
                Form2 muestraResultados = new Form2(this);
                singleton.imagenesFinales            = imagenesFinales;
                muestraResultados.pictureBox1.Image  = (imagenesFinales[0].image);
                muestraResultados.pictureBox2.Image  = (imagenesFinales[1].image);
                muestraResultados.pictureBox3.Image  = (imagenesFinales[2].image);
                muestraResultados.pictureBox4.Image  = (imagenesFinales[3].image);
                muestraResultados.pictureBox5.Image  = (imagenesFinales[4].image);
                muestraResultados.pictureBox6.Image  = (imagenesFinales[5].image);
                muestraResultados.pictureBox7.Image  = (imagenesFinales[6].image);
                muestraResultados.pictureBox8.Image  = (imagenesFinales[7].image);
                muestraResultados.pictureBox9.Image  = (imagenesFinales[8].image);
                muestraResultados.pictureBox10.Image = (imagenesFinales[9].image);
                muestraResultados.Visible            = true;
                Visible = false;
            }
            else
            {
                MessageBox.Show("Se ha detenido el programa", "Detención manual", MessageBoxButtons.OK, MessageBoxIcon.Information);
                Restablecer();
            }
        }
        public JsonResult EjecutaOperaciones(string hora, int[] operaciones, string ciclo, string excel, string hoja)
        {
            //-empalmes -preasignacion -otrosSemestres -algoritmo
            string res      = "<strong>Asignacion Fallida</strong>\n";
            string detalles = "";

            try
            {
                Conexion       c       = new Conexion(Conexion.datosConexion, Server.MapPath("~/Archivos/" + excel), ciclo);
                ListaVariables grupos  = new ListaVariables(c.Grupos_EmpiezanA(ciclo, Convert.ToInt32(hora), false));
                ListaSalones   salones = new ListaSalones(c, c.Salones(), Convert.ToInt32(hora));
                salones.SetHorarios(c, Ciclo);

                int        numero_Operacion = 0;
                IOperacion operacion        = null;

                foreach (int op in operaciones)
                {
                    numero_Operacion++;

                    switch ((byte)op)  //Fabrica abstracta
                    {
                    case (byte)EOperaciones.algoritmoGenetico:
                        operacion = new AlgoritmoGenetico(grupos, salones, Convert.ToInt32(hora), 100, 1000);
                        break;

                    case (byte)EOperaciones.empalmes:
                        operacion = new RevisionEmpalmes(grupos, salones);
                        break;

                    case (byte)EOperaciones.otrosSemestres:
                        operacion = new AsignacionOtrosSemestres(grupos, salones);
                        break;

                    case (byte)EOperaciones.preasignacion:
                        operacion = new AsignacionPreferencial(grupos, salones);
                        break;
                    }

                    if (operacion != null)
                    {
                        operacion.Ejecuta();
                        if (operacion.Resultado.Count != 0)
                        {
                            grupos.Actualiza(operacion.Resultado);
                            detalles += Grupos2Table(operacion.Resultado.OrderBy(g => g.Cve_espacio).ToList(), operacion.NombreOperacion);
                        }
                        else
                        {
                            detalles += string.Format("{0} sin grupos modificados", operacion.NombreOperacion);
                        }

                        detalles += "<br>";
                    }
                }

                c.Grupos_Carga(grupos, hoja, c.Materias_AsDictionary(), c.Profesores_AsDicctionary());

                res = string.Format("Asignacion de {0} completada<br>{1}", hora, detalles);
            }
            catch (Exception ex)
            {
                res += "\n" + ex.Message;
            }

            return(new JsonResult()
            {
                Data = res, JsonRequestBehavior = JsonRequestBehavior.AllowGet
            });
        }