コード例 #1
0
ファイル: espacio.py プロジェクト: yo-alan/horarios
 def poblacion(self, ):
     try:
         return self._poblacion
     except AttributeError:
         
         from calendario import Calendario
         
         self._poblacion = []
         
         for calendario in Calendario.objects.filter(espacio=self):
             
             calendario = Calendario.create(calendario.id)
             
             self._poblacion.append(calendario)
         
         return self._poblacion
コード例 #2
0
ファイル: espacio.py プロジェクト: yo-alan/horarios
 def generarpoblacioninicial(self, ):
     """
     Genera individuos desde cero y
     los guarda en el atributo 'poblacion'.
     
     @Parametros:
     None.
     
     @Return:
     None.
     """
     
     from calendario import Calendario
     from horario import Horario
     
     cant_horas = 0
     individuos = []
     
     # Iteramos generando todas las combinaciones de horarios
     # posibles. Y por cada uno creamos un calendario.
     
     # Contamos la cantidad total de horas.
     for coordinador in self.coordinadores:
         cant_horas += coordinador.especialidad.carga_horaria_semanal
     
     # Cantidad de iteraciones por los dias.
     for dia in self.dias_habiles:
         
         # Cantidad de iteraciones por las horas.
         for hora in self.horas:
             
             # Iteracion por cada coordinador.
             for coordinador in self.coordinadores:
                 
                 # Se crea un Calendario.
                 calendario = Calendario.create()
                 # Se le asigna este espacio.
                 calendario.espacio = self
                 # A su vez el Calendario es agregado a la poblacion.
                 individuos.append(calendario)
                 
                 # Se crea un Horario.
                 horario = Horario()
                 # Se le asigna el Coordinador.
                 horario.coordinador = coordinador
                 # Se le asigna una hora desde.
                 horario.hora_desde = hora.hora_desde
                 # Se le asigna una hora hasta.
                 horario.hora_hasta = hora.hora_hasta
                 # Se le asigna un dia de la semana.
                 horario.dia_semana = dia.dia
                 # El Horario es agregado al Calendario.
                 calendario.agregar_horario(horario)
             
             # La cantidad total de horas no fue cubierta, quiere
             # decir que en el calendario deben haber horas libres.
             if len(self.dias_habiles) * len(self.horas) != cant_horas:
                 
                 # Cantidad de iteraciones por los dias.
                 for dia in self.dias_habiles:
                     
                     # Cantidad de iteraciones por las horas.
                     for hora in self.horas:
                         
                         # Se crea un Calendario.
                         calendario = Calendario.create()
                         # Se le asigna este espacio.
                         calendario.espacio = self
                         # A su vez el Calendario es agregado a la poblacion.
                         individuos.append(calendario)
                         
                         # Se crea un Horario.
                         horario = Horario()
                         # Se le asigna una hora desde.
                         horario.hora_desde = hora.hora_desde
                         # Se le asigna una hora hasta.
                         horario.hora_hasta = hora.hora_hasta
                         # Se le asigna un dia de la semana.
                         horario.dia_semana = dia.dia
                         # El Horario es agregado al Calendario.
                         calendario.agregar_horario(horario)
     
     # Rellenamos los calendarios generando Horarios aleatoriamente.
     
     coordinadores_asig_global = []
     
     for coordinador in self.coordinadores.all():
         
         carga_horaria = coordinador.especialidad.carga_horaria_semanal
         
         for i in range(carga_horaria):
             
             coordinadores_asig_global.append(copy.copy(coordinador))
     
     for individuo in individuos:
         
         # Se crea la lista de coordinadores a asignar.
         coordinadores_asig = copy.copy(coordinadores_asig_global)
         
         for coordinador in coordinadores_asig_global:
             
             if coordinador == individuo.horarios[0][0].coordinador:
                 coordinadores_asig.remove(coordinador)
                 break
         
         horas_libres = abs(len(self.dias_habiles) * len(self.horas) - cant_horas)
         
         for i in range(horas_libres):
             
             coordinadores_asig.append(None)
             
         # Iteramos por la cantidad de dias.
         for dia in self.dias_habiles:
             
             # Tambien por la cantidad de horas.
             for hora in self.horas:
                 
                 if len(coordinadores_asig) == 0:
                     break
                 
                 indice = randint(0, len(coordinadores_asig)-1)
                 
                 coordinador = coordinadores_asig[indice]
                 
                 # Se crea un Horario.
                 horario = Horario()
                 # Se le asigna el Coordinador.
                 horario.coordinador = coordinador
                 # Se le asigna una hora desde.
                 horario.hora_desde = hora.hora_desde
                 # Se le asigna una hora hasta.
                 horario.hora_hasta = hora.hora_hasta
                 # Se le asigna un dia de la semana.
                 horario.dia_semana = dia.dia
                 
                 # Comprobamos que el Horario generado
                 # no exista en el Calendario.
                 existe = False
                 for franja_horaria in individuo.horarios:
                     for horario_comp in franja_horaria:
                         if horario == horario_comp:
                             existe = True
                 
                 # Si ya existia continuamos generando.
                 if existe:
                     continue
                 
                 coordinadores_asig.remove(coordinador)
                 
                 # Lo agregamos a la lista de horarios del Calendario.
                 individuo.agregar_horario(horario)
         
         self.poblacion.append(individuo)