diff --git a/projeto-gerar-horario/GerarHorario/Gerador/Gerador.cs b/projeto-gerar-horario/GerarHorario/Gerador/Gerador.cs index b51bc498..a2a169d4 100644 --- a/projeto-gerar-horario/GerarHorario/Gerador/Gerador.cs +++ b/projeto-gerar-horario/GerarHorario/Gerador/Gerador.cs @@ -20,35 +20,12 @@ public static GerarHorarioContext PrepararModelComRestricoes(GerarHorarioOptions // ====================================== // RESTRIÇÃO: Garantir no máximo 1 aula em um (dia e intervalo) para cada turma. - - foreach (var diaSemanaIso in Enumerable.Range(options.DiaSemanaInicio, options.DiaSemanaFim)) - { - foreach (var intervaloIndex in Enumerable.Range(0, options.HorariosDeAula.Length)) - { - foreach (var turma in options.Turmas) - { - var propostas = from propostaAula in contexto.TodasAsPropostasDeAula - where - propostaAula.DiaSemanaIso == diaSemanaIso // mesmo dia - && propostaAula.IntervaloIndex == intervaloIndex // mesmo horário - && turma.DiariosDaTurma.Any(diario => diario.Id == propostaAula.DiarioId) - select propostaAula.ModelBoolVar; - - - var propostasList = propostas.ToList(); - - Console.WriteLine($"Dia: {diaSemanaIso} | Intervalo: {options.HorariosDeAula[intervaloIndex]} | {turma.Id} | Quantidade de Propostas: {propostasList.Count}"); - - contexto.Model.AddAtMostOne(propostasList); - } - } - Console.WriteLine(""); - } + Restricoes.AplicarLimiteDeNoMaximoUmDiarioAtivoPorTurmaEmUmHorario(contexto); // ========================================================================================================== // RESTRIÇÃO: Diário: quantidade máxima na semana - Restricoes.AplicarLimiteDiarioSemana(contexto); + Restricoes.AplicarLimiteDeDiarioNaSemana(contexto); // ========================================================================================================== diff --git a/projeto-gerar-horario/GerarHorario/Gerador/Restricoes.cs b/projeto-gerar-horario/GerarHorario/Gerador/Restricoes.cs index c9cb4278..6095bd4a 100644 --- a/projeto-gerar-horario/GerarHorario/Gerador/Restricoes.cs +++ b/projeto-gerar-horario/GerarHorario/Gerador/Restricoes.cs @@ -10,7 +10,36 @@ namespace Sisgea.GerarHorario.Core; public class Restricoes { - public static void AplicarLimiteDiarioSemana( + + public static void AplicarLimiteDeNoMaximoUmDiarioAtivoPorTurmaEmUmHorario(GerarHorarioContext contexto) + { + foreach (var diaSemanaIso in Enumerable.Range(contexto.Options.DiaSemanaInicio, contexto.Options.DiaSemanaFim)) + { + foreach (var intervaloIndex in Enumerable.Range(0, contexto.Options.HorariosDeAula.Length)) + { + foreach (var turma in contexto.Options.Turmas) + { + var propostas = from propostaAula in contexto.TodasAsPropostasDeAula + where + propostaAula.DiaSemanaIso == diaSemanaIso // mesmo dia + && propostaAula.IntervaloIndex == intervaloIndex // mesmo horário + && turma.DiariosDaTurma.Any(diario => diario.Id == propostaAula.DiarioId) + select propostaAula.ModelBoolVar; + + + var propostasList = propostas.ToList(); + + Console.WriteLine($"Dia: {diaSemanaIso} | Intervalo: {contexto.Options.HorariosDeAula[intervaloIndex]} | {turma.Id} | Quantidade de Propostas: {propostasList.Count}"); + + contexto.Model.AddAtMostOne(propostasList); + } + } + + Console.WriteLine(""); + } + } + + public static void AplicarLimiteDeDiarioNaSemana( GerarHorarioContext contexto ) {