Como funciona o gerador de grade — e como medimos
Atualizado em .
A Sky traduz as regras que você escreve; um motor de otimização (Timefold) posiciona cada aula. Nas regras obrigatórias não há choque: professor, turma e sala nunca ficam em dois lugares ao mesmo tempo. Quando as regras da escola não cabem juntas, a grade mostra quais aulas ficaram de fora e por quê.
Resposta rápida
O gerador tem duas peças. A Sky lê frases como “Profa. Ana só de manhã” e grava cada uma como regra da escola. O motor Timefold aplica 34 regras, separadas em obrigatórias e preferências, e procura a melhor grade. No teste de 24/10/2026, com escolas sintéticas de 40 a 80 turmas, os 30 solves terminaram com todas as aulas na grade e nenhum choque nas regras obrigatórias. Esses choques foram zerados em 0,9 a 2,4 s (4,0 a 6,1 s no primeiro solve de cada JVM); o resto do tempo, até o limite de 69 a 120 s, foi usado para refinar preferências.
1. Dois papéis: a Sky entende, o motor decide
Sky (linguagem natural)
Transforma uma frase em regra: quem, o quê, quando e se a regra é obrigatória ou só uma preferência. Cada regra fica listada na escola; a coordenação confere e apaga a que não quiser. A Sky não escolhe horário de aula nenhuma.
Motor de otimização (Timefold)
Recebe turmas, professores, disciplinas, salas, horários e as regras. Dá a cada aula um horário e uma sala, mede a grade pelas regras e troca aulas de lugar enquanto a grade melhora ou até o tempo-limite.
Por que separar
Um chat sozinho escreve uma grade que parece certa e pode ter o mesmo professor em duas salas. Aqui quem posiciona a aula é o motor, que mede cada choque. A IA só traduz.
2. Regras obrigatórias e preferências
O motor tem 34 regras. Treze delas a escola marca como obrigatória ou como preferência; contando as duas versões, são 47 restrições no código (arquivo TimetableConstraintProvider). Uma regra obrigatória não pode ser ferida: a grade que a fere não é aceita como pronta. Uma preferência pesa na nota da grade, e o motor tenta cumpri-la o máximo possível.
| Tipo | Regras |
|---|---|
| Sempre obrigatórias (10) | Toda aula precisa de horário e sala · professor sem duas aulas no mesmo horário · turma sem duas aulas no mesmo horário · sala sem duas aulas no mesmo horário · sala com o recurso exigido (laboratório, quadra) · capacidade da sala · turma dentro do seu turno · professor dentro dos turnos dele · indisponibilidade do professor por faixa de horário · aula geminada obrigatória em blocos de 2 |
| Sempre preferências (11) | Turma na sua sala · evitar a mesma disciplina em aulas vizinhas (fora das geminadas) · horário que o professor prefere evitar · horário que o professor prefere · geminada desejada em blocos de 2 · excesso da mesma disciplina em sequência · janela do professor · janela da turma (pesa três vezes a do professor) · máximo da mesma disciplina por dia · distribuir a disciplina na semana · variar o horário da disciplina |
| A escola escolhe (13) | Indisponibilidade do professor · sala preferida da disciplina · máximo de aulas por dia da turma · mínimo de dias por semana da disciplina · disciplina não antes do período N · disciplina não depois do período N · disciplina exige recurso de sala · máximo de aulas por dia do professor · máximo de aulas consecutivas do professor · máximo de dias por semana do professor · máximo de aulas seguidas da turma · limite de janela do professor · limite de janela da turma |
“Sem choque” quer dizer: nenhuma regra obrigatória ferida na grade entregue. Não quer dizer que toda preferência foi cumprida, nem que o motor sabe de uma regra que ninguém cadastrou.
3. Quando as regras não cabem juntas
Algumas combinações não têm solução. Exemplo ilustrativo: a escola escreve “Profa. Ana só de manhã” como obrigatória, e a Profa. Ana tem 30 aulas por semana, mas a manhã tem 25 horários. Não existe grade que cumpra as duas coisas. O motor não coloca a aula num horário proibido para fingir que fechou: as 5 aulas que sobram aparecem como não alocadas, e cada uma traz o motivo numa frase, no formato “Profa. Ana tem 30 aulas na semana e só 25 horários livres.”
O que a tela mostra
A grade com as aulas que couberam, a lista das que ficaram de fora e o motivo de cada uma: falta de horário da turma, professor sem horário livre, indisponibilidade, limite de aulas por dia, falta de sala livre. Quando a conta não nomeia a causa, o motor aponta a regra obrigatória que o encaixe feriria.
O que a escola faz
Afrouxa uma regra (vira preferência), muda a disponibilidade ou divide a carga, e gera de novo. A grade incompleta não é apresentada como pronta.
Tempo esgotado
Se o motor para no tempo-limite com aula de fora, ou se a escola é maior do que o plano compra, a grade sai marcada como “parou no tempo”: é a melhor encontrada até ali, não a melhor possível.
4. Como medimos o tempo: o teste de 24/10/2026
Rodamos o motor do Skedavo num teste automatizado, com o código do commit b11483910e7e, das 22h42 às 23h30 de 24/10/2026 (UTC−4). Cinco tamanhos de escola sintética, gerados pelo próprio teste, cada um com 23 aulas por turma. Cada tamanho rodou em 3 configurações de container e 2 tetos de tempo do plano (90 e 120 s): 30 solves no total.
| Turmas | Aulas | Tempo-limite do motor (teto 90 / 120) | Choques obrigatórios zerados em | Aulas fora da grade |
|---|---|---|---|---|
| 40 | 920 | 69 s / 69 s | 4,0 a 6,1 s* | 0 nos 6 solves |
| 50 | 1.150 | 86 s / 86 s | 0,9 a 1,6 s | 0 nos 6 solves |
| 60 | 1.380 | 90 s / 104 s | 1,0 a 1,8 s | 0 nos 6 solves |
| 70 | 1.610 | 90 s / 120 s | 1,1 a 2,0 s | 0 nos 6 solves |
| 80 | 1.840 | 90 s / 120 s | 1,1 a 2,4 s | 0 nos 6 solves |
* O primeiro solve de cada JVM foi sempre o de 40 turmas, com a JVM ainda fria (compilação JIT). Tempos lidos do relógio do Timefold. “Zerados” = fim da fase de construção e da fase de encaixe, com zero choque nas regras obrigatórias.
O que os números dizem
Os 30 solves fecharam com todas as aulas na grade e nenhuma regra obrigatória ferida. Nenhum parou antes do limite por falta de melhora: o motor seguiu refinando preferências até o fim. Com 70 e 80 turmas, o teto de 120 s deu preferências cerca de 10 a 17% melhores que o de 90 s.
Máquina e limites
Notebook Intel Core i9-13900H, Docker dentro do WSL2 com 4 vCPUs e 7,76 GiB. Containers de 4 CPUs e 2 GB, 4 CPUs e 8 GB (o 8 GB é só nominal: a VM não tinha tudo isso) e 2 CPUs e 3 GB. Java 21. O motor usa uma thread, por isso as três configurações deram resultados praticamente iguais.
Tempo-limite
O tempo que o motor recebe cresce com o número de aulas (cerca de 0,075 s por aula), com piso de 8 s e o teto do plano. Ele também para antes se passar metade desse tempo sem achar grade melhor. A tela mostra o andamento enquanto isso.
5. Limites deste teste e da revisão humana
Escolas sintéticas
As escolas do teste foram geradas pelo próprio teste. Não são dados de clientes. Regras reais mais apertadas pedem mais tempo e podem não caber.
Uma máquina só
Rodou num notebook x86 com outros programas abertos (uso médio de CPU de 74% no Windows). O servidor de produção tem outra CPU, em geral mais lenta: o corte por tempo é o mesmo, mas as preferências podem sair menos refinadas e, em escolas maiores, pode sobrar aula de fora. Não medimos em produção.
O que o motor não sabe
Ele cumpre as regras cadastradas. Combinado de corredor, preferência não escrita ou frase que a Sky entendeu diferente do que a escola quis não entram na conta. Por isso a coordenação revisa as regras listadas e a grade antes de publicar.
Perguntas frequentes
O que quer dizer “sem choque”?
Que, nas regras obrigatórias, o mesmo professor, a mesma turma ou a mesma sala nunca ficam em dois lugares ao mesmo tempo. O motor também não fere as outras regras marcadas como obrigatórias, como turno, sala com o recurso exigido e indisponibilidade rígida.
E se as regras da escola não couberem juntas?
A grade não esconde o problema. As aulas que não couberam aparecem como não alocadas, cada uma com o motivo, por exemplo: o professor tem mais aulas na semana do que horários livres. A escola decide o que afrouxar e gera de novo.
Quanto tempo leva?
No teste de 24/10/2026, com 40 a 80 turmas, os choques das regras obrigatórias foram zerados entre 0,9 e 2,4 s; no primeiro solve de cada JVM, entre 4,0 e 6,1 s. Depois o motor continuou refinando as preferências até o tempo-limite: 69 a 120 s nesses tamanhos.
Esses números valem para a minha escola?
Servem de referência, não de promessa. As escolas do teste são sintéticas, não dados de clientes, e o teste rodou numa única máquina, diferente do servidor de produção. Regras e tamanho mudam o tempo.
Teste com as regras da sua escola
Grátis até 15 turmas, sem cartão. Escreva as regras em português e veja o que coube e o que não coube.
Gerar minha grade grátis