Esempio n. 1
0
        private void asignacionAleatoria(Variable v, ListaSalones s)
        {
            Aleatorio r = new Aleatorio(s.Count);
            int       val;
            Salon     salon;

            do
            {
                val = r.Next();

                if (val != -1)
                {
                    salon = s[val];
                    if (v.EsValido(salon) && salon.Disponible_para_grupo(v))
                    {
                        v.Salon = salon;
                        r.Reinicia();
                        break;
                    }
                }
                else
                {
                    Errores.Add(v);
                    r.Reinicia();
                    break;
                }
            } while (true);
        }
Esempio n. 2
0
        public ActionResult _Grupos(string consulta)
        {
            Conexion       c = new Conexion(Conexion.datosConexion);
            ListaVariables list;
            ListaSalones   s = new ListaSalones(c, c.Salones());

            switch (consulta)
            {
            case "sinAsignar": list = new ListaVariables(c.IGrupos_sinAsignar(Session["ciclo"].ToString()));
                break;

            case "asignados": list = new ListaVariables(c.IGrupos_Asignados(Session["ciclo"].ToString()));
                break;

            case "sobrecupo": list = new ListaVariables(c.IGrupos_Sobrecupo(Session["ciclo"].ToString()));
                break;

            default: list = new ListaVariables(c.IGrupos_Light(Session["ciclo"].ToString()));
                break;
            }

            list.SetSalones(s);

            return(PartialView(list));
        }
        public void Conexion_GetSalon_Test()
        {
            Conexion     c       = new Conexion();
            ListaSalones salones = new ListaSalones(c, c.Salones());

            Assert.IsFalse(salones.Count == 0);
        }
Esempio n. 4
0
        private void asignandoXArea(List <Variable> asignando, ListaSalones s)
        {
            Grupo gAnterior;
            Salon sAnterior;

            foreach (Variable v in asignando)
            {
                gAnterior = v.GHoraAnterior;
                if (gAnterior == null)
                {
                    asignacionAleatoria(v, s);
                }
                else
                {
                    sAnterior = s.busca(gAnterior.Cve_espacio);
                    if (sAnterior != null && sAnterior.Disponible_para_grupo(v))
                    {
                        v.Salon = sAnterior;
                    }
                    else
                    {
                        asignacionAleatoria(v, s);
                    }
                }
            }
        }
        /// <summary>
        /// busca salon a salon los que esten ocupados entre las horas designadas y los dias
        /// </summary>
        /// <param name="salones">Grupo de salones validos para checar</param>
        /// <param name="ini">hora inicial para el rango de horas</param>
        /// <param name="fin">hora final para el rango de horas</param>
        /// <param name="dias">dias que se van a buscar. L-M-Mi-J-V-S Marcar con un 1 los dias que quieres obtener</param>
        /// <returns></returns>
        public ListaSalones Ocupados(ListaSalones salones, int ini, int fin, string dias = "111111")
        {
            var query = from s in salones
                        where EnHoras(ini, fin, s.Cve_espacio, dias).Count == 0
                        select s;

            return(new ListaSalones(query.ToList()));
        }
Esempio n. 6
0
 public Individuo(Individuo individuo)
 {
     cromosomas = new List <Variable>();
     salones    = new ListaSalones(individuo.salones);
     foreach (Variable v in individuo.cromosomas)
     {
         cromosomas.Add(new Variable(v));
     }
 }
        public ActionResult _Busqueda()
        {
            Conexion                 c       = new Conexion(Conexion.datosConexion);
            ListaSalones             salones = new ListaSalones(c, c.Salones());
            Dictionary <int, string> equipo  = c.Equipos();

            object[] model = new object[2];

            model[0] = salones;
            model[1] = equipo;

            return(PartialView(model));
        }
        public void SetSalones(ListaSalones salones)
        {
            Salon s;

            foreach (Variable v in this as IList <Variable> )
            {
                s = salones.busca(v.Cve_espacio);
                if (s != null)
                {
                    v.Salon = s;
                }
            }
        }
Esempio n. 9
0
        public ActionResult _Grupos(string ini, string fin, string dias)
        {
            Conexion       c    = new Conexion(Conexion.datosConexion);
            ListaVariables list = new ListaVariables(new ListaGrupos(
                                                         c.IGrupos_Light(Session["ciclo"].ToString(), Convert.ToInt32(ini), Convert.ToInt32(fin)),
                                                         c.Profesores(),
                                                         c.Materias()));
            ListaSalones s = new ListaSalones(c, c.Salones());

            list = list.EnDias(dias);
            list.SetSalones(s);

            return(PartialView(list));
        }
 public ChecaEmpalmes(ListaGrupos _grupos, IList <Salon> _salones)
 {
     EmpalmesResueltos = new List <Grupo>();
     grupos            = new ListaVariables(_grupos);
     salones           = new ListaSalones(_salones);
     permiteEmpalmes   = salones.PermiteEmpalmes();
     if (Grupos.Count != 0)
     {
         ciclo = Grupos[0].Ciclo;
     }
     else
     {
         ciclo = "";
     }
 }
Esempio n. 11
0
        /// <summary>
        /// Asigna los grupos a los salones usando un random y los salones marcados.
        /// --08/06/2016 Modifique la parte de las variables y tambien los metodos, este ahora asinara salones a los grupos.
        /// </summary>
        public void asignaSalones(ListaSalones Salones)
        {
            Errores = new List <Variable>();

            salones = new ListaSalones(Salones);

            for (int i = 2; i <= 7; i++)
            {
                separacionXArea(i);
            }

            separacionXArea(1);

            arreglaErrores();
        }
Esempio n. 12
0
        /// <summary>
        /// Constructor de la iteracion del algoritmo
        /// </summary>
        /// <param name="grupos">Lista de grupos a asignar</param>
        /// <param name="salones">Lista de salones disponibles para asignar</param>
        public Algoritmo(ListaGrupos grupos, ListaSalones salones, int hora, int _tamPoblacion = 5, int _generaciones = 50)
        {
            this.grupos  = new ListaVariables(grupos.SinAsignar());
            this.grupos  = this.grupos.EnHoras(hora, hora + 1);
            this.grupos  = this.grupos.EnDias();
            this.salones = salones.Asignables();
            this.hora    = hora;
            tamPoblacion = _tamPoblacion;
            generaciones = _generaciones;
            errores      = new ListaVariables();

            poblacion      = new Individuo[tamPoblacion];
            mejorPoblacion = new Individuo[tamPoblacion];

            for (int i = 0; i < tamPoblacion; i++)
            {
                poblacion[i] = new Individuo(Grupos, hora);
                poblacion[i].asignaSalones(Salones);
            }
        }
Esempio n. 13
0
        static void Main(string[] args)
        {
            inicializaConeccion();
            TimeSpan       stop;
            TimeSpan       start = new TimeSpan(DateTime.Now.Ticks);
            Algoritmo      alg;
            ChecaEmpalmes  emp;
            PreAsignacion  pre;
            ListaVariables grupos  = new ListaVariables(c.Grupos("2016-2017/II"));
            ListaSalones   salones = new ListaSalones(c, c.Salones());
            ListaVariables gruposActuales;

            for (int i = 7; i < 22; i++)
            {
                gruposActuales = new ListaVariables(grupos.EnHoras(i, i + 1));

                emp = new ChecaEmpalmes(grupos, salones);
                emp.ejecuta();
                grupos.Actualiza(emp.Grupos);

                pre = new PreAsignacion(grupos, salones);
                pre.preferencial();
                pre.semestres_anteriores();
                grupos.Actualiza(pre.Grupos);

                alg = new Algoritmo(grupos, salones, i, 5, 50);
                alg.AsignaSalones();
                grupos.Actualiza(alg.GruposAsignados);

                c.Grupos_Carga(gruposActuales);
            }
            stop = new TimeSpan(DateTime.Now.Ticks);
            Console.Write("***Pulsa una tecla para continuar****\n");
            Console.WriteLine("Tiempo del proceso: " + (stop.Subtract(start).TotalMilliseconds / 1000) + " segundos");

            while (Console.ReadKey().Key != ConsoleKey.Enter)
            {
                ;
            }
        }
        public void Grupo_Constructores_Test()
        {
            Grupo        g1, g2;
            Conexion     c = new Conexion();
            ListaSalones s = new ListaSalones(c, c.Salones(), 0);

            g1 = new Grupo(c.Grupo("100101", "2016-2017/I"));
            Assert.IsFalse(g1 == null);
            g1 = new Grupo(c.Grupo("100101", "2016-2017/I"), c);
            Assert.IsFalse(g1 == null);
            g1 = new Grupo(c.Grupo("100101", "2016-2017/I"), null, s);
            Assert.IsFalse(g1 == null);
            g1 = new Grupo(c.Grupo("100101", "2016-2017/I"), c, s);
            Assert.IsFalse(g1 == null);

            g2 = new Grupo(g1);
            Assert.IsFalse(g2 == null);
            g2 = new Grupo(g1, c);
            Assert.IsFalse(g2 == null);
            g2 = new Grupo(g1, null, s);
            Assert.IsFalse(g2 == null);
            g2 = new Grupo(g1, c, s);
            Assert.IsFalse(g2 == null);
        }
 public AsignacionOtrosSemestres(ListaVariables Grupos, ListaSalones Salones) : base(Grupos, Salones)
 {
 }
Esempio n. 16
0
 public AsignacionPreferencial(ListaVariables Grupos, ListaSalones Salones) : base(Grupos, Salones)
 {
 }
Esempio n. 17
0
 public AlgoritmoGenetico(ListaGrupos grupos, ListaSalones salones, int hora, int _tamPoblacion = 5, int _generaciones = 50) : base(grupos, salones, hora, _tamPoblacion, _generaciones)
 {
 }
Esempio n. 18
0
        public async void Execute(object control)
        {
            if (control.Equals("Nuevo"))
            {
                LimpiarCampos();
                ActivarControles();
                this._accion = ACCION.NUEVO;
            }
            else if (control.Equals("Eliminar"))
            {
                if (Elemento != null)
                {
                    MessageDialogResult resultado = await this._dialogCoordinator.ShowMessageAsync(
                        this,
                        "Eliminar Salon",
                        "Esta seguro de eliminar el registro?",
                        MessageDialogStyle.AffirmativeAndNegative);

                    if (resultado == MessageDialogResult.Affirmative)
                    {
                        try
                        {
                            _db.Salones.Remove(Elemento);
                            _db.SaveChanges();
                            this.ListaSalones.Remove(Elemento);
                            LimpiarCampos();
                        }
                        catch (Exception ex)
                        {
                            await this._dialogCoordinator.ShowMessageAsync(
                                this,
                                "Eliminar Salon",
                                ex.Message);
                        }
                    }
                }
                else
                {
                    await this._dialogCoordinator.ShowMessageAsync(
                        this,
                        "Eliminar Salon",
                        "Debe seleccionar un elemento");
                }
            }
            else if (control.Equals("Guardar"))
            {
                switch (this._accion)
                {
                case ACCION.NINGUNO:
                    break;

                case ACCION.NUEVO:
                    try
                    {
                        var registro = new Salon
                        {
                            Descripcion = this.Descripcion
                        };

                        _db.Salones.Add(registro);
                        _db.SaveChanges();
                        this.ListaSalones.Add(registro);
                    }
                    catch (Exception ex)
                    {
                        await this._dialogCoordinator.ShowMessageAsync(
                            this,
                            "Guardar Salon",
                            ex.Message);
                    }
                    finally
                    {
                        DesactivarControles();
                        this._accion = ACCION.NINGUNO;
                    }
                    break;

                case ACCION.GUARDAR:
                    try
                    {
                        int posicion = ListaSalones.IndexOf(Elemento);
                        var registro = _db.Salones.Find(Elemento.SalonId);

                        if (registro != null)
                        {
                            registro.Descripcion      = this.Descripcion;
                            _db.Entry(registro).State = EntityState.Modified;
                            _db.SaveChanges();
                            ListaSalones.RemoveAt(posicion);
                            ListaSalones.Insert(posicion, registro);
                        }
                    }
                    catch (Exception ex)
                    {
                        await this._dialogCoordinator.ShowMessageAsync(
                            this,
                            "Editar Salon",
                            ex.Message);
                    }
                    finally
                    {
                        DesactivarControles();
                        this._accion = ACCION.NINGUNO;
                    }
                    break;

                default:
                    break;
                }
            }
            else if (control.Equals("Editar"))
            {
                if (Elemento != null)
                {
                    ActivarControles();
                    this._accion = ACCION.GUARDAR;
                }
                else
                {
                    await this._dialogCoordinator.ShowMessageAsync(
                        this,
                        "Editar Salon",
                        "Debe seleccionar un elemento");
                }
            }
            else if (control.Equals("Cancelar"))
            {
                DesactivarControles();
                this._accion = ACCION.NINGUNO;
            }
        }
        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
            });
        }
 public PreAsignacion(ListaVariables _g, ListaSalones _s)
 {
     GruposModificados = new ListaVariables();
     grupos            = _g;
     salones           = _s;
 }