O Scheduler-ClassAssistant é uma ferramenta robusta para criação e otimização de horários acadêmicos. Ele utiliza conceitos de programação matemática, como algoritmos genéticos e métodos inteiros, para resolver problemas complexos de alocação de recursos e restrições. Este projeto foi projetado para facilitar o gerenciamento de horários, levando em conta critérios como:
- Disponibilidade de professores.
- Capacidade de salas.
- Restrições de horários (preferências e indisponibilidades).
- Otimização de tempos ociosos entre aulas.
Com uma interface gráfica intuitiva, o sistema possibilita visualização e ajustes nos cronogramas gerados, unindo o poder de técnicas avançadas de otimização com usabilidade prática.
A construção do Scheduler-ClassAssistant é baseada em dois pilares principais de otimização:
Os algoritmos genéticos são inspirados pela seleção natural. Neste projeto, eles são utilizados para encontrar soluções quase ótimas para o problema de alocação de horários. A abordagem envolve os seguintes passos:
-
População Inicial:
- Cada solução (indivíduo) representa um conjunto de horários gerado aleatoriamente.
- Soluções são representadas como cromossomos, onde genes são elementos do cronograma.
-
Função de Aptidão:
- Avalia quão boa é uma solução, considerando:
- Conflitos de horário (ex.: dois professores alocados na mesma sala).
- Preferências de professores e alunos.
- Minimização de tempos ociosos.
- Quanto menor o número de conflitos e mais próximo das preferências, maior a pontuação da solução.
- Avalia quão boa é uma solução, considerando:
-
Operadores Genéticos:
- Seleção: Soluções com maior aptidão têm maior chance de reprodução.
- Cruzamento (Crossover): Combina partes de dois indivíduos para criar uma nova solução.
- Mutação: Introduz pequenas alterações para explorar mais o espaço de busca e evitar estagnação.
-
Evolução:
- Iterativamente, novas gerações de soluções são criadas até que um critério de parada seja alcançado (ex.: número de gerações ou aptidão satisfatória).
Para situações em que soluções mais rígidas são necessárias, métodos inteiros são utilizados para modelar e resolver o problema de forma determinística.
- ( x_{ad} ): Indica se o monitor ( a ) é alocado para a disciplina ( d ) (1 para alocado, 0 para não alocado).
- ( y_d ): Indica se a disciplina ( d ) não possui monitor (1 para não atendida, 0 para atendida).
O objetivo é maximizar a pontuação total dos monitores alocados às disciplinas, priorizando as maiores notas dos monitores e minimizando o número de disciplinas sem monitores. A pontuação é calculada como:
- Soma ponderada das médias dos monitores alocados às disciplinas.
- Penalização pelo número de disciplinas sem monitores.
Isso garante um equilíbrio entre maximizar o desempenho acadêmico e atender ao maior número possível de disciplinas.
-
Alocação por disciplina:
- Cada disciplina deve ter no máximo um monitor alocado.
- Se nenhum monitor for alocado, a disciplina é marcada como "não atendida".
-
Limite por monitor:
- Cada monitor pode ser alocado a, no máximo, uma disciplina.
-
Preferências dos monitores:
- Um monitor só pode ser alocado a uma disciplina se tiver manifestado interesse nela.
-
Natureza das variáveis:
- As variáveis ( x_{ad} ) e ( y_d ) são binárias (0 ou 1).
- ( A ): Conjunto de monitores disponíveis.
- ( D ): Conjunto de disciplinas disponíveis.
- ( s_{ad} ): Indica se o monitor ( a ) está disposto a monitorar a disciplina ( d ) (1 para disponível, 0 para indisponível).
- ( N_a ): Nota média do monitor ( a ), utilizada como critério de priorização para alocação.
Um executável para Windows está disponível. Basta executar a instalação e rodar o programa normalmente. Os arquivos de entrada para teste também estão disponíveis:
Durante a execução do programa, é possível baixar os templates que demonstram como os arquivos de entrada devem estar formatados. Também é possível inserir os dados manualmente.
Após a inserção dos dados, basta selecionar o modelo, configurar os parâmetros (opcional) e rodar.
As métricas da execução e uma tabela com os resultados serão exibidas. É possível fazer o download dos resultados em formato xlsx ou csv.
Caso queira rodar o programa em um ambiente de desenvolvimento, siga os passos a seguir.
Python 3.8 ou superior.
Instale as dependências com:
pip install -r back/requirements.txt
Node.js e PNPM.
Instale as dependências com:
cd front
pnpm install
Primeiro, gere os executáveis dos scripts Python:
cd back
make
Depois, rode o projeto:
cd front
pnpm run dev
cd front
pnpm tauri build
- Python: Linguagem principal para processamento e algoritmos.
- DEAP: Biblioteca para implementação de algoritmos genéticos.
- SciPy/PuLP: Bibliotecas para resolução de problemas lineares.
- Node.js e PNPM: Ferramentas para o desenvolvimento e gerenciamento do frontend.
- Tauri: Framework para construção de aplicações desktop.
- Tailwind CSS: Estilização responsiva para interfaces modernas.
- Flexibilidade: Combina métodos heurísticos (algoritmos genéticos) com abordagens exatas (programação inteira).
- Otimização Personalizada: Adapta-se a diferentes critérios de priorização (ex.: minimizar tempos ociosos ou maximizar preferências).
- Escalabilidade: Projetado para lidar com grandes volumes de dados (várias turmas, professores e horários).
- Eficiência Computacional: Algoritmos otimizados para rápida convergência.
O projeto Scheduler Class Assistant tem licença MIT, frisando-se que não nos responsabilizamos por eventuais danos que o uso do programa possa causar.
- Carlos Filipe de Castro Lemos
- Gabriel Barbosa de Oliveira
- Henrique Souza Marques
- João Pedro Matos de Deus
- Lucas Greff Meneses