Ver Mensaje Individual
  #15 (permalink)  
Antiguo 19/08/2012, 23:46
Avatar de raco_hernandez
raco_hernandez
 
Fecha de Ingreso: agosto-2012
Mensajes: 39
Antigüedad: 11 años, 8 meses
Puntos: 4
Respuesta: Algoritmo Genetico Horarios Escolares

Hice una lista de posibles materias para cada dia-hora



Y califico asi mira

Cita:
function Evalua_Bloque($idgrupos,$idhorarios,$dia,$pos_posi ble){
$posible=$_SESSION["Posibilidades"][$idgrupos][$idhorarios][$dia][$pos_posible];
$idmateria=$posible["idmateria"];

//PROMEDIO DE HORAS LABORALES
$horas_turno=$_SESSION["Horas_Turno"][$_SESSION["GruposID"][$idgrupos]["turno"]]*5;
$Sujeridas=$_SESSION["ProfesoresID"][$posible["idprofesores"]][$_SESSION["GruposID"][$idgrupos]["turno"]];
@$por_sujeridas=100/((100/$horas_turno)*$Sujeridas);
$por_sujeridas=($por_sujeridas=="")?0:$por_sujerid as;
$Horas_Asignadas=$_SESSION["ProfesoresID"][$posible["idprofesores"]]["Total"][$_SESSION["GruposID"][$idgrupos]["turno"]];
$Horas_Uso=($_SESSION["Horas_Uso_Profesor"][$posible["idprofesores"]]=="")?0:$_SESSION["Horas_Uso_Profesor"][$posible["idprofesores"]];
$Pendiente=$Horas_Asignadas-$Horas_Uso;
$Horas_Grupo=$_SESSION["Horas_Profesores"][$idgrupos][$posible["idprofesores"]];
@$Promedio=((100/$Pendiente*$Horas_Grupo)/$Horas_Grupo);
$Promedio=($Promedio=="")?0:$Promedio;
$calificacion=number_format($por_sujeridas+$Promed io,2);

//SI EL PROFESOR TIENE HORAS CRUZADAS
$HorasP=Cuenta_Horas_Profesor($idhorarios,$dia,$po sible["idprofesores"]);
if($HorasP>1) $calificacion-=5;

//SI ESE GRUPO TIENE MAS HORAS DE LAS REQUERIDAS
$Horas=Cuenta_Horas_Materia($idgrupos,$idmateria);
if($Horas>$posible["horas"]) $calificacion-=5;

//SI ESTA MAS DE DOS VECES POR DIA
$horas_dia=0;
for($hP=0;$hP<count($_SESSION['Horarios']);$hP++){
$idhorarios2=$_SESSION['Horarios'][$hP]["idhorarios"];
if($idhorarios2!=$idhorarios and $_SESSION['Horario_Grupo'][$idgrupos][$idhorarios2][$dia]["uso"]==$idmateria)$horas_dia++;
}
if($horas_dia>=2) $calificacion-=5;
return $calificacion;
}
La que esta marcada en azul es la mejor según la calificación y al asignarla me afecta a la variable $Horas_Uso que es la que lleva el conteo de las horas que se le han asignado así si empezó con 0 horas y se asigno al siguiente bloque ya vale 1 y así, pero de todas maneras deja bloques en blanco que fueron los que no pudo rellenar porque anteriormente ya se habían seleccionado a esa hora

La estructura de la tablita es así

IDMaestro | IDProfesores | Calificacion