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; }
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); } } } }