Autor Tema: Distribuir horarios de asignaturas en forma eficiente

0 Usuarios y 1 Visitante están viendo este tema.

31 Octubre, 2021, 10:30 pm
Leído 2033 veces

manooooh

  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,791
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Hola!

Hace tiempo vengo pensando la necesidad de ayudar al área de Secretaría en la escuela donde trabajo para informatizar la manera en que organizan los horarios de los diferentes cursos. Es una tarea muy difícil para dejar satisfechos a todos, y muchas veces por algunos errores que cometen al planificar, no sale del todo bien.

Pero es razonable. En un horario de 07:00 a 12:45 de lunes a viernes, puede que no se cumplan todos los criterios que uno quisiera tener. Por ejemplo, no dejar Matemática los primeros 2 módulos del día pues los adolescentes suelen estar más dormidos para tener una ciencia dura, o no dividir una materia por un recreo.

Por eso quiero consultarles si conocen de algún software gratuito, libre, confiable y que cumpla con las expectativas de organizar el horario lo más eficiente posible de acuerdo a algunos criterios que debo imponer. O, ya que tiene que ver matemática y heurística, si conocen de algún algoritmo que pueda implementarse con algún lenguaje de programación con compilador online (como C).

Hasta recién no tenía fe de que encontrara algo en Internet, pero parece que es un tema muy común:

- Advanced Scheduling: https://www.teacherease.com/advancedscheduling.aspx

- An Algorithm to Automatically Generate Schedule for School Lectures Using a Heuristic Approach: https://www.researchgate.net/publication/271297445_An_Algorithm_to_Automatically_Generate_Schedule_for_School_Lectures_Using_a_Heuristic_Approach

- Time tables: https://www.asctimetables.com/timetables_es.html

- Class Scheduling algorithm to show best match with criteria?: https://stackoverflow.com/questions/7705782/class-scheduling-algorithm-to-show-best-match-with-criteria

Como ven, las herramientas son pagas (cosa que no desearía) y lo que son algoritmos, no tengo el tiempo para aprender a implementarlo usando PHP, MySQL etcétera.

Cosas a tener en cuenta:

1) Históricamente los profesores todos los años envían la Disponibilidad horaria en un Word, detallando, para cada día y módulo (que duran 40 minutos), si en esa franja horaria está libre para dar clases. Aclaración: Hay docentes que enseñan en más de una asignatura/curso, pero en varios casos no es relevante el orden que se pongan, pues a ellos les da igual explicar primero Historia 1 en 2ºB y luego Historia 2 en 3ºB o al revés.

2) El programa debe poder permitir agregar algunos horarios de forma manual, por decir algo todos los años el curso 1ºB tiene Historia las horas 3 y 4 y eso debe poder agregarse manualmente.

3) Se deben poder agregar criterios. Por ejemplo, que no haya tres asignaturas prestablecidas en la misma franja horaria (por ejemplo, si hay 2 salas físicas de Computación y en el mismo horario hay 3 materias que requieren las salas, se genera un conflicto de disponibilidad de salas). O que no haya una asignatura "dividida" por un recreo o en módulos de 1 hora por día, o si una asignatura tiene 4 módulos no ponerlos todos en un mismo día (pues los alumnos y docente se cansan) sino dividirlos en 2 y 2, o no poner algunas materias en ciertos horarios.

4) Se debe poder actualizar la información en caso de que algún criterio cambie (eliminar asignaturas, cambiar nombres de profesores), tratando de dejar los horarios lo más intacto posible (pues puede que a mitad de año cambie de profesor y ya trabajen en otras escuelas).

5) He visto que algunos autores requieren conocer la cantidad de alumnos por materia para aplicar su algoritmo. En mi caso NO es necesario que un dato sea la cantidad de alumnos, ni tampoco un criterio.

6) Mi idea, para que sea aun más automático, es trabajar con Formularios de Google y Google Sheets, como hice en un proyecto anterior. Lo ideal sería que el docente complete un formulario con su nombre y apellido, cursos, materias a cargo y disponibilidad horaria, eso vaya a parar a una planilla de cálculo, y en base al algoritmo volcar los datos en una tabla de Google Docs optimizada, para que se pueda descargar. Pero si no es posible hacerlo con Google Scripts no hay problema.

Si conocen de alguna herramienta online que haga todo esto o se pueda programar sin ser programador avanzado, les agradecería.

Gracias!
Saludos

Agregado: Investigando un poco más encontré que varios aseguran que se trata de un problema NP-completo (¡incluso dicen NP-insane!): Algorithm for creating a school timetable. Si se pueden agregar cursos manualmente, entonces podríamos fijar algunos horarios para que el número de posibilidades se reduzca notablemente, es decir introducir a nuestro criterio horarios en que sepamos que no haya inconvenientes (Matemática de 4ºA en las horas 5, 6 y 7 de los jueves, por ejemplo).

01 Noviembre, 2021, 02:24 pm
Respuesta #1

Juan Pablo Sancho

  • Moderador Global
  • Mensajes: 6,562
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
No sé si esto pueda ayudar:
El programa FET, que está en linux y windows.

01 Noviembre, 2021, 11:44 pm
Respuesta #2

manooooh

  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,791
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Muchas gracias Juan Pablo! Le voy a echar una mirada.

Mientras sigo leyendo opiniones, sugerencias, recomendaciones.

Saludos

08 Noviembre, 2021, 05:56 am
Respuesta #3

C. Enrique B.

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 603
  • País: es
  • Karma: +0/-0
    • Mi página en WikiPedia.
-
Es un asunto agradable. Lo ví cuando lo publicaste y ahora esperaba encontrar màs respuestas (aunque quizá ya te ha bastado con la de nuestro compañero).

Juraría que hay un montón de aplicaciones de éstas ya que he visto con cierta frecuencia publicidad diversa (y por supuesto los debe de haber fiables y gratuitos, aunque con funciones disminuidas, quizá). Me imagino que serán programas "hermanos" o idénticos a esos de organización de tareas o agendas personales complejas.

También diría que, como indicas, uno mismo debería poder realizarlo sin excesivo problema, y además en ese caso tendría grandes ventajas de adaptación y mejoras.

¿Qué tal lo llevas en este momento? Espero que este post mío ayude a que alguien más intervenga -seguro que varias personas de aquí están cerca de esa problemática-.
____________________


Por mi parte. Me agradaría colaborar en cosillas como ésta (sobre todo en la creación de un programa ad hoc). De hecho, como he manifestado repetidamente, tengo la "necesidad vital" de programar el montonazo de ideas que albergo -y además ansío la colaboración grupal en los proyectos-. Y precisamente ahora (como también he colocado por ahí, en algún hilo) estoy más intensamente conformando "vías fáciles" de programación -ahora estoy con el tablero virtual de Ajedrez Continuo, en SmallBasic, de Microsoft-.

SmallBasic es un entorno ideado para que también los niños puedan programar (y también contiene cierta complejidad de código), y quizá sea suficiente. De todas formas tu dices conocer y estar habituado a "C". El problema es que no me considero todavía preparado para aportar algo sólido -pero SI para una colaboración modesta, e ir avanzando poco a poco; al fin y al cabo se trata sólo de idear algoritmos adecuados-.
____________________


¡Ah, ahora acabo de ver el texto rojo! (me encanta que sea del rollo NP). ¡Pero bueno!, eso no debería preocuparnos, ¿no? El caso es ajustar con sencillez la mayor parte de una posible solución, y añadir retoques "a mano", es decir, o bien hacer un programa flexible, o quizá más cómodamente, hacer un programa estricto, que entregue varias alternativas y que deje abiertas algunas variaciones para realizar "a mano".
-
-- FALTAN LAS MUJERES en muchos ámbitos sociales. Yo no me siento perteneciente al bando masculino; soy del bando de las personas. Chicas, manifestáos; no concibo charlar sobre un tema si no estáis vosotras: es impropio, casi absurdo.