Skip to content

Commit

Permalink
refactor: Restricoes: AplicarLimiteDeNoMaximoUmDiarioAtivoPorTurmaEmU…
Browse files Browse the repository at this point in the history
…mHorario
  • Loading branch information
guesant committed Mar 28, 2024
1 parent 426b596 commit 92116e9
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 26 deletions.
27 changes: 2 additions & 25 deletions projeto-gerar-horario/GerarHorario/Gerador/Gerador.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);

// ==========================================================================================================

Expand Down
31 changes: 30 additions & 1 deletion projeto-gerar-horario/GerarHorario/Gerador/Restricoes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
)
{
Expand Down

0 comments on commit 92116e9

Please sign in to comment.