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); }
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); }
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())); }
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; } } }
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 = ""; } }
/// <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(); }
/// <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); } }
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) { }
public AsignacionPreferencial(ListaVariables Grupos, ListaSalones Salones) : base(Grupos, Salones) { }
public AlgoritmoGenetico(ListaGrupos grupos, ListaSalones salones, int hora, int _tamPoblacion = 5, int _generaciones = 50) : base(grupos, salones, hora, _tamPoblacion, _generaciones) { }
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; }