コード例 #1
0
        private void ResuelveEmpalme(ListaVariables empalme)
        {
            ListaGrupos    Temp;
            ListaVariables aux;
            Salon          s;

            aux = empalme.Empalmados();

            //Chequeo de empalme
            if (aux.Count > 1 && permiteEmpalmes.busca(aux[0].Cve_espacio) == null)
            {
                s = salones.busca(empalme[0].Cve_espacio);
                if (s == null)
                {
                    return;             //Si no encuentra el salon es porque es algo como Campo o asi. Se valen los empalmes
                }
                aux.SetSalones(salones);

                Temp = new ListaGrupos(empalme.EnSalonesFijos().Where(g => g.Salon_fijo == s.Cve_espacio).ToList());

                if (Temp.Count() != 0)//Solo uno tiene preferencia, y a ese se le va a dar
                {
                    AsignacionPreferencial(empalme, s);
                }
                else    // Si no hay preferencial entonces se elegira por otro medio
                {
                    AsignacionMejorEleccion(empalme, s);
                }
            }

            grupos.Actualiza(empalme);
        }
コード例 #2
0
        /// <summary>
        /// Checa si el salon se puede asignar, y si no evalua los cambios que hay que hacer y si los hace
        /// </summary>
        /// <param name="grupo">Grupo a asignar</param>
        /// <param name="s">Salon en que se quiere asignar</param>
        /// <returns></returns>
        private bool AsignaEnSalon(Variable grupo, Salon s)
        {
            try
            {
                //Checa si es apto para el grupo
                if (grupo.CalculaPuntos(s) <= 0 ||
                    grupo.Cupo >= s.Cupo)
                {
                    return(false);
                }

                if (s.Disponible(grupo.horario))
                {
                    grupo.Salon = s;
                    return(true);
                }

                //Obtiene los grupos que estan asignados de este salon
                ListaVariables enSalon = new ListaVariables(Grupos.EnSalon(s.Cve_espacio));

                //Obtiene los grupos con los que se crusaria
                ListaVariables conEmpalme = enSalon.Empalmados(grupo);

                //Compara el maximo puntaje de los grupos contra el que tendria estre grupo
                if (grupo.CalculaPuntos(s) > conEmpalme.MaxPuntos())
                {
                    //Quita la asignacon de los grupos y asigna al nuevo grupo
                    foreach (Variable g in conEmpalme)
                    {
                        g.Salon = null;
                    }

                    if (s.Disponible(grupo.horario))    //Checa si no hay problemas con grupos de otras horas
                    {
                        Grupos.Actualiza(conEmpalme);   //actualiza los grupos en otros horarios

                        grupo.Salon = s;

                        return(true);
                    }
                    else
                    {
                        foreach (Variable g in conEmpalme)
                        {
                            g.Salon = s;
                        }
                    }
                }
            }
            catch (Exception) { }

            return(false);
        }