Viktor es el algoritmo propietario de Foris para la generación automatizada de horarios académicos. Opera como el cerebro computacional del portal Darwin: recibe toda la información del ciclo académico —asignaturas, demanda, docentes, aulas, restricciones— y produce una propuesta de horario óptima que cumple simultáneamente con decenas de restricciones institucionales.
¿Qué es Viktor?
Viktor es el algoritmo propietario de Foris para la generación automatizada de horarios académicos. Opera como el cerebro computacional del portal Darwin: recibe toda la información del ciclo académico —asignaturas, demanda, docentes, aulas, restricciones— y produce una propuesta de horario óptima que cumple simultáneamente con decenas de restricciones institucionales.
No es un sistema de reglas simples ni una heurística básica. Viktor implementa un algoritmo evolutivo multi-fase que explora millones de combinaciones posibles en segundos, con capacidad para manejar la complejidad real de una universidad mediana o grande.
El Problema que Resuelve
La programación académica es uno de los problemas de optimización combinatoria más complejos del mundo real:
- Miles de estudiantes con currículos diferentes y requisitos académicos distintos
- Docentes con disponibilidades parciales, cargas máximas y asignaturas habilitadas
- Aulas con capacidades heterogéneas, tipos específicos (laboratorio, auditorio, sala de cómputo) y distancias entre edificios
- Restricciones de créditos por período, compatibilidad entre asignaturas, crosslists y grupos espejo
- Sinópticos (paquetes horarios) que deben ser factibles para cada cohorte de estudiantes
Resolver esto manualmente toma semanas y produce resultados subóptimos. Viktor lo hace en minutos, con métricas cuantificables de calidad.
Cómo Funciona
Fases del Algoritmo
Viktor ejecuta un pipeline multi-fase estructurado, donde cada etapa prepara la entrada para la siguiente:
| Fase | Descripción |
|---|---|
| Registry | Carga y valida todos los datos de entrada: asignaturas, formatos, instructores, aulas, grillas horarias, demandas, cohortes |
| Cube Creation | Construye el "cubo" de scheduling: determina cuántas secciones y subsecciones crear por demanda, aplicando el algoritmo de mincing para distribución óptima |
| Layerización | Divide el cubo en capas según intervalos del ciclo académico (semanas, módulos) para procesamiento eficiente |
| Cube Merge | Fusiona el cubo dinámico recién creado con el cubo estático (horario ya existente con sesiones bloqueadas) |
| Selección de Sinópticos | Etiqueta paquetes horarios por cohorte, verificando que no haya colisiones entre asignaturas obligatorias |
| Inicialización | Crea la población inicial de soluciones candidatas (cromosomas), asignando timeslots, salas e instructores |
| Loop Genético | Itera sobre la población de soluciones aplicando operadores evolutivos y búsqueda local para minimizar conflictos y maximizar calidad |
| Post-procesamiento | Refina la mejor solución: mejora la cardinalidad de instructores, la calidad de sinópticos y la asignación de aulas |
Motor Genético
El corazón de Viktor es un algoritmo genético con búsqueda local, donde cada solución candidata (cromosoma) representa una asignación completa de sesiones a bloques horarios. El algoritmo evalúa cada solución con una función de penalización que considera:
- HCV (Hard Constraint Violations) — Violaciones inaceptables: doble uso de sala, docente asignado en conflicto horario, exceso de capacidad.
- SCV (Soft Constraint Violations) — Preferencias deseables pero no obligatorias: compacidad horaria, distribución equilibrada de carga docente, minimización de desplazamientos entre edificios.
El algoritmo mantiene una estructura de memoria evolutiva (MEM) que acumula conocimiento de buenas asignaciones parciales entre generaciones, orientando la búsqueda hacia regiones prometedoras del espacio de soluciones.
Moves de Scheduling
Para explorar el espacio de soluciones, Viktor define cuatro tipos de movimientos:
- Move 0 — Reasignación de bloque horario a una sesión
- Move 1 — Intercambio de bloques entre dos sesiones
- Move 2 — Cadena de intercambios para destrabar conflictos
- Move 3 — Reasignación compuesta con validación de sinópticos
Datos de Entrada
Viktor consume información estructurada proveniente de Darwin:
| Tipo de dato | Descripción |
|---|---|
| Asignaturas y formatos | Qué se imparte y cómo (Teoría, Práctica, Laboratorio), sesiones y eventos por intervalo, prioridad de aulas |
| Demandas | Cuántos estudiantes necesitan cada asignatura en cada ciclo y sede |
| Docentes | Disponibilidades horarias, asignaturas habilitadas, carga mínima y máxima, docentes clave |
| Aulas | Capacidad, tipo, edificio, distancias entre edificios |
| Grillas horarias | Estructura de días y módulos por sede y jornada |
| Cohortes | Grupos de estudiantes que comparten un conjunto de asignaturas y necesitan paquetes horarios compatibles |
| Cubo estático | Sesiones ya existentes con bloqueos manuales (horario fijo del docente, sala reservada, etc.) |
Resultados Generados
| Output | Visible en Darwin como |
|---|---|
| Secciones | Agrupaciones de sesiones para cada demanda |
| Sesiones | Bloques de clase con día, módulo, sala e instructor asignados |
| Grupos | Grupos de inscripción disponibles para estudiantes |
| Sinópticos | Paquetes horarios compatibles por cohorte |
| Reportes | Métricas del algoritmo: penalizaciones, calidad, estadísticas de ejecución |
Configuración
La institución puede ajustar el comportamiento de Viktor mediante:
- Reglas del algoritmo — Configuradas en el módulo de Reglas de la Plataforma de Procesos. Definen restricciones específicas: qué salas son aptas para ciertos formatos, cómo seleccionar el canon de un crosslist, qué sesiones desbloquear automáticamente, cómo distribuir formatos en sinópticos.
- Parámetros del algoritmo — Controlan el comportamiento del motor genético: tamaño de población, número de generaciones, tiempos máximos, estrategias de búsqueda local, cobertura mínima de sinópticos.
- Bloqueos manuales — En el Editor de Horarios de Darwin, los usuarios pueden fijar manualmente sesiones, salas o docentes. Viktor respeta estos bloqueos al ejecutarse, integrando el juicio humano con la optimización automática.
Propuesta de Valor
| Métrica | Impacto |
|---|---|
| Tiempo de generación | De semanas a minutos para un ciclo académico completo |
| Calidad del horario | Menos conflictos, mejor distribución de carga docente, mayor cobertura de cohortes |
| Control institucional | Las reglas son configurables sin código; el equipo académico puede ajustar restricciones sin intervención técnica |
| Hybrid scheduling | Viktor y el equipo trabajan juntos: el algoritmo genera, el equipo edita, Viktor re-ejecuta respetando los cambios |
| Escalabilidad | Maneja universidades con miles de secciones, cientos de docentes y múltiples sedes |
Integración
Viktor opera dentro del ciclo de trabajo de Darwin:
- Paul proyecta la demanda del próximo período → informa el número de secciones requeridas.
- Darwin prepara los datos del escenario y lanza Viktor como proceso.
- Viktor genera el horario optimizado y lo escribe de vuelta en Darwin.
- El equipo académico revisa y edita en el Editor de Horarios.
- Las ediciones manuales pueden re-alimentar a Viktor en iteraciones sucesivas.