public Horario(DAO.Turma turma) { this.turma = turma; this.horarios = new List <DAO.HorarioTurma>(); List <DAO.HorarioTurma> horariosFimDeSemana = new List <DAO.HorarioTurma>(); foreach (var dia in turma.dias) { foreach (DAO.HorarioTurma horario in dia.horarios) { if (horario.disciplina == null) { if (dia.diaSemana == DAO.DiaSemana.Domingo || dia.diaSemana == DAO.DiaSemana.Sabado) { horariosFimDeSemana.Add(horario); } else { horarios.Add(horario); } } } } if (horarios.Count == 0) { horarios = horariosFimDeSemana; } }
private void crossoverTurma(DAO.Turma turmaResult, DAO.Turma turmaOther) { int ini = 0, fim = 6; if (diaVazio(turmaResult.getDia(DAO.DiaSemana.Domingo)) && diaVazio(turmaOther.getDia(DAO.DiaSemana.Domingo))) { ini = 1; } if (diaVazio(turmaResult.getDia(DAO.DiaSemana.Sabado)) && diaVazio(turmaOther.getDia(DAO.DiaSemana.Sabado))) { fim = 5; } int diaSemana1 = Sorteio.Random.Next(ini, fim); DAO.Dia diaResult = turmaResult.getDia((DAO.DiaSemana)diaSemana1); DAO.Dia diaOther = turmaOther.getDia((DAO.DiaSemana)diaSemana1); int horario = Sorteio.Random.Next(0, diaResult.horarios.Count - 1); List <DAO.HorarioTurma> horariosTrocaEquivalente = new List <DAO.HorarioTurma>(); foreach (DAO.Dia item in turmaResult.dias) { foreach (DAO.HorarioTurma horarioTurma in item.horarios) { if ((horarioTurma.disciplina == null && diaOther.horarios[horario].disciplina == null) || (horarioTurma.disciplina != null && diaOther.horarios[horario].disciplina != null && horarioTurma.disciplina.id == diaOther.horarios[horario].disciplina.id)) { if ((ini == 1 && horarioTurma.dia.diaSemana == DAO.DiaSemana.Sabado) || (fim == 5 && horarioTurma.dia.diaSemana == DAO.DiaSemana.Domingo)) { continue; } horariosTrocaEquivalente.Add(horarioTurma); } } } if (horariosTrocaEquivalente.Count == 0) { return; } int horarioTrocEquivalente = Sorteio.Random.Next(0, horariosTrocaEquivalente.Count - 1); horariosTrocaEquivalente[horarioTrocEquivalente].professor = diaResult.horarios[horario].professor; horariosTrocaEquivalente[horarioTrocEquivalente].disciplina = diaResult.horarios[horario].disciplina; diaResult.horarios[horario].professor = diaOther.horarios[horario].professor; diaResult.horarios[horario].disciplina = diaOther.horarios[horario].disciplina; }
private bool sortearHorario(Sorteio.Disciplina disciplinaSorteada, DAO.Turma turma, List <Sorteio.Disciplina> disciplinasTentadas, ref DAO.HorarioTurma horario, ref DAO.Professor professor) { Sorteio.Professores sortProf = new Sorteio.Professores(disciplinaSorteada, turma.turno); professor = sortProf.sortear(); if (professor == null) { sortProf = new Sorteio.Professores(disciplinaSorteada); professor = sortProf.sortear(); } Sorteio.Horario sortHorario = null; horario = null; if (professor != null) { sortHorario = new Sorteio.Horario(professor, turma); horario = sortHorario.sortear(); if (horario == null) { sortHorario = new Sorteio.Horario(turma); horario = sortHorario.sortear(); } } else { if ((from x in disciplinasTentadas where x == disciplinaSorteada select x).Count() >= 15) { disciplinaSorteada.cargaHorariaRestante = new DateTime(); return(false); } else { disciplinasTentadas.Add(disciplinaSorteada); } } return(true); }
public Horario(DAO.Professor professor, DAO.Turma turma) { this.turma = turma; this.horarios = new List <DAO.HorarioTurma>(); foreach (DAO.PreferenciaDiaTurno prefDiaTurno in professor.prefDiaTurno) { if (prefDiaTurno.valor == 0 || prefDiaTurno.turno.id != turma.turno.id) { continue; } DAO.Dia dia = turma.getDia(prefDiaTurno.diaSemana); foreach (DAO.HorarioTurma horario in dia.horarios) { if (horario.disciplina == null) { horarios.Add(horario); } } } }