Exemplo n.º 1
0
        public Cromossomo crossover(Cromossomo other)
        {
            /* TODO: Alterar essa função para o seguinte funcionamento
             * Clonar cromossomo this - Done
             * Sortear dois dia e um horário (para cada dia) do crossomo this - Done
             * Verificar no cromossomo other as disciplinas e respectivos professores ministrando nos horários sorteados - Done
             * Setar no cromossomo this as disciplinas e professores equivalentes do cromossomo other - Done
             * Setar no cromossomo this as disciplinas que foram retiradas (dos horários sorteados) nas que foram setadas nos horários sorteados (troca equivalente) - Done
             * */
            _valor = 0;
            Cromossomo result = (Cromossomo)this.Clone();

            for (int i = 0; i < result.cursos.Count; i++)
            {
                for (int j = 0; j < result.cursos[i].periodos.Count; j++)
                {
                    for (int k = 0; k < result.cursos[i].periodos[j].turmas.Count; k++)
                    {
                        crossoverTurma(result.cursos[i].periodos[j].turmas[k], other.cursos[i].periodos[j].turmas[k]);
                        crossoverTurma(result.cursos[i].periodos[j].turmas[k], other.cursos[i].periodos[j].turmas[k]);
                    }
                }
            }

            return(result);
        }
Exemplo n.º 2
0
        public List <DAO.Curso> getBestCromossomo()
        {
            if (cromossomos == null || cromossomos.Count == 0)
            {
                return(null);
            }
            Cromossomo melhor = cromossomos[0];

            for (int i = 1; i < cromossomos.Count; i++)
            {
                if (cromossomos[i].valor > melhor.valor)
                {
                    melhor = cromossomos[i];
                }
            }

            return(melhor.cursos);
        }
Exemplo n.º 3
0
        public object Clone()
        {
            Cromossomo cromossomo = new Cromossomo();

            cromossomo._valor = this._valor;

            cromossomo.cursos = new List <DAO.Curso>();
            foreach (DAO.Curso item in this.cursos)
            {
                cromossomo.cursos.Add(item == null ? null : (DAO.Curso)item.Clone());
            }

            cromossomo.professores = new List <DAO.Professor>();
            foreach (DAO.Professor item in this.professores)
            {
                cromossomo.professores.Add(item == null ? null : (DAO.Professor)item.Clone());
            }

            cromossomo.disciplinas = new Sorteio.Disciplinas(cromossomo.professores);

            return(cromossomo);
        }
Exemplo n.º 4
0
        //* Criar gerações sorteando cromossomos pela classe Sorteio.Cromossomo
        //* Sortear membros para exclusão (inverter roleta viciada)
        //* Por fator de probabilidade de mutação
        //FIM!!!!!!!!!!!

        public void selecaoNatural(int qtdGeracoes)
        {
            frmLoad.finalizarQuandoCompletar = false;

            frmLoad.Caption = "Cruzando resultados...";
            Sorteio.Cromossomos sortCromossomo = new Sorteio.Cromossomos(cromossomos);
            for (int i = 0; i < qtdGeracoes; i++)
            {
                //System.Threading.Thread.Sleep(1);
                Random rand = new Random();
                int    r    = rand.Next(1, 10);

                if (r <= 8) //80% de chances de cruzamento
                {
                    sortCromossomo.definirFaixas(Sorteio.Cromossomos.Prioridade.MaiorValor);
                    Cromossomo pai = sortCromossomo.sortear();
                    Cromossomo mae = sortCromossomo.sortear(pai);

                    Cromossomo filho = pai.crossover(mae);

                    sortCromossomo.definirFaixas(Sorteio.Cromossomos.Prioridade.MenorValor);
                    Cromossomo bastardo = sortCromossomo.sortear();

                    cromossomos.Add(filho);
                    cromossomos.Remove(bastardo);
                }
                else //20% de chances de mutação
                {
                    sortCromossomo.definirFaixas(Sorteio.Cromossomos.Prioridade.Igualitaria);
                    Cromossomo parker = sortCromossomo.sortear();
                    parker.mutar();
                }

                frmLoad.addProgress(1);
            }
        }