public Cromossomo(List <DAO.Professor> professores, Sorteio.Disciplinas disciplinas, List <DAO.Curso> cursos) { // TODO: Complete member initialization this.professores = professores; this.disciplinas = disciplinas; this.cursos = cursos; }
public void gerarGradeAleatoria() { _valor = 0; //Percorrendo todas as turmas disponíveis foreach (DAO.Curso curso in cursos) { foreach (DAO.Periodo periodo in curso.periodos) { foreach (DAO.Turma turma in periodo.turmas) { Sorteio.Disciplinas disciplinasPorPeriodo = new Sorteio.Disciplinas(periodo.disciplinas, disciplinas.disciplinas); List <Sorteio.Disciplina> disciplinasTentadas = new List <Sorteio.Disciplina>(); while (!disciplinasPorPeriodo.todasJaSorteadas) { Sorteio.Disciplina disciplinaSorteada = disciplinasPorPeriodo.sortear(); if (disciplinaSorteada == null) { break; } DAO.HorarioTurma horario = null; DAO.Professor professor = null; if (!sortearHorario(disciplinaSorteada, turma, disciplinasTentadas, ref horario, ref professor)) { continue; } if (horario != null) { horario.disciplina = disciplinaSorteada.disciplina; horario.professor = professor; disciplinaSorteada.cargaHorariaRestante -= (horario.horario.horaFinal - horario.horario.horaInicial); } else { if ((from x in disciplinasTentadas where x == disciplinaSorteada select x).Count() >= 15) { disciplinaSorteada.cargaHorariaRestante = new DateTime(); continue; } else { disciplinasTentadas.Add(disciplinaSorteada); } } } } } } }
public void gerarPopulacaoInicial() { List <DAO.Professor> professoresBase = DAO.Professor.get(); frmLoad.setMaxValue(100); frmLoad.finalizarQuandoCompletar = false; frmLoad.Caption = "Gerando grades..."; cromossomos = new List <Cromossomo>(); List <DAO.Curso> cursos = DAO.Curso.get(); for (int i = 0; i < 100; i++) { List <DAO.Professor> professores = (from x in professoresBase select(DAO.Professor) x.Clone()).ToList(); Sorteio.Disciplinas disciplinas = new Sorteio.Disciplinas(professores); cromossomos.Add(new Cromossomo(professores, disciplinas, DAO.Curso.Clone(cursos))); cromossomos[i].gerarGradeAleatoria(); frmLoad.addProgress(1); } }