Ejemplo n.º 1
0
 public MenusPOO(IBanco banco, ITelespectador telespectador, IIndividuo individuo, IPoo poo)
 {
     _banco         = banco;
     _telespectador = telespectador;
     _individuo     = individuo;
     _poo           = poo;
 }
Ejemplo n.º 2
0
        public IIndividuo GenerarDescendencia(IIndividuo individuo)
        {
            var descendiente = new IndividuoBase(individuo.Cromosoma.CantidadGenes);
            descendiente.Genotipo = individuo.Genotipo;

            return descendiente;
        }
        public override float CalculaFitness(IIndividuo ind)
        {
            float fitness = 0;
            List<String> profs = new List<string>();
            for (int cromossomo = 0; cromossomo < TamanhoIndividuo; cromossomo++)
            {
                String prof = (String)ind.Cromossomos[cromossomo];
                String hor = Horarios[cromossomo];

                profs.Add(prof);

                if (profs.Count(x => x == prof) < 3)
                {
                    if (Restricoes.Contains(prof + "_" + hor))
                        fitness = fitness - 1;
                    else
                        fitness++;
                }
                else
                {
                    fitness = fitness - 1;
                }
            }
            return fitness;
        }
Ejemplo n.º 4
0
        public override float CalculaFitness(IIndividuo ind)
        {
            float         fitness = 0;
            List <String> profs   = new List <string>();

            for (int cromossomo = 0; cromossomo < TamanhoIndividuo; cromossomo++)
            {
                String prof = (String)ind.Cromossomos[cromossomo];
                String hor  = Horarios[cromossomo];

                profs.Add(prof);

                if (profs.Count(x => x == prof) < 3)
                {
                    if (Restricoes.Contains(prof + "_" + hor))
                    {
                        fitness = fitness - 1;
                    }
                    else
                    {
                        fitness++;
                    }
                }
                else
                {
                    fitness = fitness - 1;
                }
            }
            return(fitness);
        }
        private void MutarIndividuo(IIndividuo individuo)
        {
            var indiceGen = new Random((int)DateTime.Now.Ticks).Next(0, individuo.Cromosoma.CantidadGenes -1);

            var genMutado = individuo.Cromosoma.Genes.GetValue(indiceGen) as IGen;
            genMutado.Mutar(_parametrosMutacion.IndiceMutacion);
        }
Ejemplo n.º 6
0
        private Tuple<IIndividuo, IIndividuo> CruzarIndividuos(IIndividuo individuo1, IIndividuo individuo2)
        {
            IIndividuo hijo1 = individuo1.GenerarDescendencia(individuo1);

            for (int indiceGen = 0; indiceGen < individuo1.Cromosoma.CantidadGenes; indiceGen++)
            {
                if (_generador.Next(0, 100) >= 50)
                {
                    var genPadre = individuo1.Cromosoma.Genes.GetValue(indiceGen) as IGen;
                    hijo1.Cromosoma.Genes.SetValue(genPadre.Clonar(), indiceGen);
                }
                else
                {
                    var genMadre = individuo2.Cromosoma.Genes.GetValue(indiceGen) as IGen;
                    hijo1.Cromosoma.Genes.SetValue(genMadre.Clonar(), indiceGen);
                }
            }

            IIndividuo hijo2 = individuo1.GenerarDescendencia(individuo1);
            for (int indiceGen = 0; indiceGen < individuo1.Cromosoma.CantidadGenes; indiceGen++)
            {
                if (_generador.Next(0, 100) >= 50)
                {
                    var genPadre = individuo1.Cromosoma.Genes.GetValue(indiceGen) as IGen;
                    hijo2.Cromosoma.Genes.SetValue(genPadre.Clonar(), indiceGen);
                }
                else
                {
                    var genMadre = individuo2.Cromosoma.Genes.GetValue(indiceGen) as IGen;
                    hijo2.Cromosoma.Genes.SetValue(genMadre.Clonar(), indiceGen);
                }
            }

            return new Tuple<IIndividuo, IIndividuo>(hijo1, hijo2);
        }
        private Tuple<IIndividuo, IIndividuo> CruzarIndividuos(IIndividuo individuo1, IIndividuo individuo2)
        {
            IIndividuo hijo1 = individuo1.GenerarDescendencia(individuo1);
            IIndividuo hijo2 = individuo1.GenerarDescendencia(individuo1);

            for (int indiceGen = 0; indiceGen <= _parametrosCruzamiento.Mascara.Length - 1; indiceGen++)
            {
                if (_parametrosCruzamiento.Mascara[indiceGen] == 'P')
                {
                    var genPadre = individuo1.Cromosoma.Genes.GetValue(indiceGen) as IGen;
                    hijo1.Cromosoma.Genes.SetValue(genPadre.Clonar(), indiceGen);

                    var genMadre = individuo1.Cromosoma.Genes.GetValue(indiceGen) as IGen;
                    hijo2.Cromosoma.Genes.SetValue(genMadre.Clonar(), indiceGen);

                }
                else
                {
                    var genMadre = individuo1.Cromosoma.Genes.GetValue(indiceGen) as IGen;
                    hijo1.Cromosoma.Genes.SetValue(genMadre.Clonar(), indiceGen);

                    var genPadre = individuo1.Cromosoma.Genes.GetValue(indiceGen) as IGen;
                    hijo2.Cromosoma.Genes.SetValue(genPadre.Clonar(), indiceGen);
                }

            }

            return new Tuple<IIndividuo, IIndividuo>(hijo1, hijo2);
        }
Ejemplo n.º 8
0
        private void CargarPoblacionInicial()
        {
            var genes1 = Array.CreateInstance(typeof(IGen), 3);
            var genBasico1A = MockRepository.GenerateMock<IGen>();
            var genBasico1B = MockRepository.GenerateMock<IGen>();
            var genBasico1C = MockRepository.GenerateMock<IGen>();
            genes1.SetValue(genBasico1A, 0);
            genes1.SetValue(genBasico1A, 1);
            genes1.SetValue(genBasico1A, 2);

            this._individuo1h = MockRepository.GenerateMock<IIndividuo>();
            this._individuo1h.Expect(e => e.Cromosoma).Return(new Cromosoma(Array.CreateInstance(typeof(IGen), 3))).Repeat.Any();
            this._individuo1 = MockRepository.GenerateMock<IIndividuo>();
            this._individuo1.Expect(e => e.Cromosoma).Return(new Cromosoma(genes1)).Repeat.Any();
            this._individuo1.Expect(e => e.GenerarDescendencia(_individuo1)).Return(_individuo1h);

            var genes2 = Array.CreateInstance(typeof(IGen), 3);
            var genBasico2A = MockRepository.GenerateMock<IGen>();
            var genBasico2B = MockRepository.GenerateMock<IGen>();
            var genBasico2C = MockRepository.GenerateMock<IGen>();
            genes2.SetValue(genBasico2A, 0);
            genes2.SetValue(genBasico2A, 1);
            genes2.SetValue(genBasico2A, 2);
            this._individuo2h = MockRepository.GenerateMock<IIndividuo>();
            this._individuo2h.Expect(e => e.Cromosoma).Return(new Cromosoma(Array.CreateInstance(typeof(IGen), 3))).Repeat.Any();
            this._individuo2 = MockRepository.GenerateMock<IIndividuo>();
            this._individuo2.Expect(e => e.Cromosoma).Return(new Cromosoma(genes2)).Repeat.Any();
            this._individuo2.Expect(e => e.GenerarDescendencia(_individuo2)).Return(_individuo2h);

            var genes3 = Array.CreateInstance(typeof(IGen), 3);
            var genBasico3A = MockRepository.GenerateMock<IGen>();
            var genBasico3B = MockRepository.GenerateMock<IGen>();
            var genBasico3C = MockRepository.GenerateMock<IGen>();
            genes3.SetValue(genBasico3A, 0);
            genes3.SetValue(genBasico3A, 1);
            genes3.SetValue(genBasico3A, 2);
            this._individuo3h = MockRepository.GenerateMock<IIndividuo>();
            this._individuo3h.Expect(e => e.Cromosoma).Return(new Cromosoma(Array.CreateInstance(typeof(IGen), 3))).Repeat.Any();
            this._individuo3 = MockRepository.GenerateMock<IIndividuo>();
            this._individuo3.Expect(e => e.Cromosoma).Return(new Cromosoma(genes3)).Repeat.Any();
            this._individuo3.Expect(e => e.GenerarDescendencia(_individuo3)).Return(_individuo3h);

            var genes4 = Array.CreateInstance(typeof(IGen), 3);
            var genBasico4A = MockRepository.GenerateMock<IGen>();
            var genBasico4B = MockRepository.GenerateMock<IGen>();
            var genBasico4C = MockRepository.GenerateMock<IGen>();
            genes4.SetValue(genBasico1A, 0);
            genes4.SetValue(genBasico1A, 1);
            genes4.SetValue(genBasico1A, 2);
            this._individuo4h = MockRepository.GenerateMock<IIndividuo>();
            this._individuo4h.Expect(e => e.Cromosoma).Return(new Cromosoma(Array.CreateInstance(typeof(IGen), 3))).Repeat.Any();
            this._individuo4 = MockRepository.GenerateMock<IIndividuo>();
            this._individuo4.Expect(e => e.Cromosoma).Return(new Cromosoma(genes4)).Repeat.Any();
            this._individuo4.Expect(e => e.GenerarDescendencia(_individuo4)).Return(_individuo4h);

            this._individuos = new List<IIndividuo>() { this._individuo1, this._individuo2, this._individuo3, this._individuo4 };
            this._poblacion = new Poblacion(_individuos);
            this._poblacion.CantidadIndividuos = 4;
        }
Ejemplo n.º 9
0
 private void AtualizaFitness()
 {
     foreach (IIndividuo individuo in Populacao)
     {
         individuo.Fitness = CalculaFitness(individuo);
         if (Solucao.Fitness < individuo.Fitness)
         {
             Solucao = individuo;
         }
     }
 }
Ejemplo n.º 10
0
 public decimal Evaluar(IIndividuo individuo)
 {
     if (individuo.Genotipo == typeof(IndividuoTablero))
     {
         return this.AnalizarReinas(individuo.Cromosoma);
     }
     else
     {
         return 0;
     }
 }
Ejemplo n.º 11
0
        public decimal Evaluar(IIndividuo columna)
        {
            if (columna.Genotipo != typeof(IndividuoColumna))
            {
                return 0;
            }
            else
            {
                var alto = ((IGen)columna.Cromosoma.Genes.GetValue(0)).Valor;
                var largo =((IGen)columna.Cromosoma.Genes.GetValue(1)).Valor;
                var peso = ((IGen)columna.Cromosoma.Genes.GetValue(2)).Valor;

                var salto = ((decimal)alto + ((decimal)largo / ((decimal)largo + (decimal)alto))) * (1 / (decimal)peso);

                return salto;
            }
        }
Ejemplo n.º 12
0
        public override IIndividuo RealizarCruzamento(IIndividuo a, IIndividuo b)
        {
            IIndividuo novo   = new QuadroHorarios(TamanhoIndividuo);
            int        modulo = TamanhoIndividuo % 2;
            int        metade = (TamanhoIndividuo - modulo) / 2;

            for (int indice = 0; indice < metade; indice++)
            {
                novo.Cromossomos[indice] = a.Cromossomos[indice];
            }

            for (int indice = metade; indice < TamanhoIndividuo; indice++)
            {
                novo.Cromossomos[indice] = b.Cromossomos[indice];
            }

            return(novo);
        }
 public override float CalculaFitness(IIndividuo ind)
 {
     int peso = 0;
     int utilidade = 0;
     float fitness = 0;
     for (int cromossomo = 0; cromossomo < TamanhoIndividuo; cromossomo++)
     {
         if ((int)ind.Cromossomos[cromossomo] > 0)
         {
             peso = peso + Itens[cromossomo].Peso;
             utilidade = utilidade + Itens[cromossomo].Utilidade;
         }
     }
     ((Mochila)ind).Peso = peso;
     ((Mochila)ind).Utilidade = utilidade;
     fitness = (float)utilidade;
     if (peso > CapacidadeMochila)
         fitness = -fitness;
     return fitness;
 }
Ejemplo n.º 14
0
        public override float CalculaFitness(IIndividuo ind)
        {
            int   peso      = 0;
            int   utilidade = 0;
            float fitness   = 0;

            for (int cromossomo = 0; cromossomo < TamanhoIndividuo; cromossomo++)
            {
                if ((int)ind.Cromossomos[cromossomo] > 0)
                {
                    peso      = peso + Itens[cromossomo].Peso;
                    utilidade = utilidade + Itens[cromossomo].Utilidade;
                }
            }
            ((Mochila)ind).Peso      = peso;
            ((Mochila)ind).Utilidade = utilidade;
            fitness = (float)utilidade;
            if (peso > CapacidadeMochila)
            {
                fitness = -fitness;
            }
            return(fitness);
        }
Ejemplo n.º 15
0
 public void RegistrarIndividuo(IIndividuo individuo)
 {
     _individuosRegistrados.Add(individuo.Genotipo, individuo);
 }
 public override void RealizarMutacao(IIndividuo a)
 {
     Random rnd = new Random();
     int p;
     do
     {
         p = rnd.Next(10);
     } while (p == 0);
     a.Cromossomos[rnd.Next(TamanhoIndividuo - 1)] = p;
 }
 public abstract void RealizarMutacao(IIndividuo a);
 public abstract float CalculaFitness(IIndividuo ind);
Ejemplo n.º 19
0
 public abstract void RealizarMutacao(IIndividuo a);
 public abstract IIndividuo RealizarCruzamento(IIndividuo a, IIndividuo b);
 public override void RealizarMutacao(IIndividuo a)
 {
     Random rnd = new Random();
     a.Cromossomos[rnd.Next(TamanhoIndividuo)] = rnd.Next(2);
 }
Ejemplo n.º 22
0
 public abstract float CalculaFitness(IIndividuo ind);
Ejemplo n.º 23
0
        public override void RealizarMutacao(IIndividuo a)
        {
            Random rnd = new Random();

            a.Cromossomos[rnd.Next(TamanhoIndividuo)] = rnd.Next(2);
        }
        public override IIndividuo RealizarCruzamento(IIndividuo a, IIndividuo b)
        {
            IIndividuo novo = new Mochila(TamanhoIndividuo);
            int modulo = TamanhoIndividuo % 2;
            int metade = (TamanhoIndividuo - modulo) / 2;

            for (int indice = 0; indice < metade; indice++)
                novo.Cromossomos[indice] = a.Cromossomos[indice];

            for (int indice = metade; indice < TamanhoIndividuo; indice++)
                novo.Cromossomos[indice] = b.Cromossomos[indice];

            return novo;
        }
Ejemplo n.º 25
0
 public abstract IIndividuo RealizarCruzamento(IIndividuo a, IIndividuo b);
 public override void RealizarMutacao(IIndividuo a)
 {
     Random rnd = new Random();
     a.Cromossomos[rnd.Next(TamanhoIndividuo - 1)] = Professores[rnd.Next(Professores.Count)];
 }
        public bool verificaRepetidoColuna(int elemento, int posIndividuo, IIndividuo ind)
        {
            if ((posIndividuo > 8))
            {
                int cont = posIndividuo - 9;
                bool continua = true;
                int number;
                while (continua)
                {
                    number = (int)ind.Cromossomos[cont];
                    if (number == elemento)
                    {
                        return true;

                    }
                    if (cont % 9 < 9)
                    {
                        continua = false;
                        return false;
                    }
                    cont = cont - 9;

                }
            }
            return false;
        }
        public bool verificaRepetidoLinha(int elemento, int posIndividuo, IIndividuo ind)
        {
            if((posIndividuo % 9 != 0))
            {
                int cont = posIndividuo-1;
                bool continua = true;
                int number;
                while (continua)
                {
                    number = (int)ind.Cromossomos[cont];
                    if (number == elemento)
                    {
                        return true;

                    }
                    if (cont % 9 == 0)
                    {
                        continua = false;
                        return false;
                    }
                    cont--;

                }
            }
            return false;
        }
        public override float CalculaFitness(IIndividuo ind)
        {
            int posSudoku = 0;
            float fitness = 0;
            //Percorrendo cada quadro do sudoku
            for (int qtdQuadrado = 1; qtdQuadrado < 10; qtdQuadrado++)
            {
                int[] vetorValidacao = new int[10];
                //zerando vetor que será utilizado para calcular o fitness do indivíduo
                for (int i = 0; i < 10; i++)
                {
                    vetorValidacao[i] = 0;
                }

                //percorrendo elementos do quadrado
                int pos = posSudoku;
                for (int elemento = 1; elemento < 10; elemento++)
                {
                    //verifica se o número não é repetido
                    if (vetorValidacao[(int)ind.Cromossomos[pos]] == 0)
                        vetorValidacao[(int)ind.Cromossomos[pos]]++;
                    else//em caso do número for repetido
                    {
                        fitness--;
                        break;
                    }

                    //se chegar a este ponto, é pq o quadrado não possui números repetidos
                    if (elemento == 9)
                        fitness++;

                    //se tiver percorrido uma linha completa do quadro, pula para a próxima
                    if ((elemento) % 3 == 0)
                        pos = pos + 7;
                    else
                        pos++;
                }

                if (qtdQuadrado % 3 == 0)
                    posSudoku = posSudoku + 21;
                else
                    posSudoku = posSudoku + 3;

            }

            //percorrendo cada linha do sudoku
            posSudoku = 0;
            for (int linha = 1; linha < 10; linha++)
            {
                int[] vetorValidacao = new int[10];
                //zerando vetor que será utilizado para calcular o fitness do indivíduo
                for (int i = 0; i < 10; i++)
                {
                    vetorValidacao[i] = 0;
                }

                //percorrendo os elementos da linha
                int pos = posSudoku;
                for (int elemento = 0; elemento < 9; elemento++)
                {
                    if (vetorValidacao[(int)ind.Cromossomos[pos]] == 0)
                        vetorValidacao[(int)ind.Cromossomos[pos]]++;
                    else
                    {
                        fitness--;
                        break;
                    }
                    pos++;
                    if (elemento == 8)
                        fitness++;
                }
                posSudoku = posSudoku + 9;

            }

            //Percorrendo cada coluna do sudoku
            posSudoku = 0;
            for (int coluna = 0; coluna < 9; coluna++)
            {
                int[] vetorValidacao = new int[10];
                //zerando vetor que será utilizado para calcular o fitness do indivíduo
                for (int i = 0; i < 10; i++)
                {
                    vetorValidacao[i] = 0;
                }

                //percorrendo os elementos da coluna
                int pos = coluna;
                for (int elemento = 0; elemento < 9; elemento++)
                {
                    if (vetorValidacao[(int)ind.Cromossomos[pos]] == 0)
                        vetorValidacao[(int)ind.Cromossomos[pos]]++;
                    else
                    {
                        fitness--;
                        break;
                    }
                    posSudoku = posSudoku + 9;

                    if (elemento == 8)
                        fitness++;
                }
            }
            return fitness;
        }
Ejemplo n.º 30
0
        public override void RealizarMutacao(IIndividuo a)
        {
            Random rnd = new Random();

            a.Cromossomos[rnd.Next(TamanhoIndividuo - 1)] = Professores[rnd.Next(Professores.Count)];
        }
 public ItemDeMenuRepresentarPessoa(IIndividuo individuo)
 {
     _individuo = individuo;
 }