Esempio n. 1
0
        public bool Execute()
        {
            ga.Crossover     = new CustomCrossover();
            ga.GenomeFactory = new CustomFactory(0, parameters.Questoes.Count - 1, parameters.QtdQuestoes);

            switch (parameters.Seletor)
            {
            case SeletorGA.Roleta:
                ga.Selector = new WeightedSelector(ga.Genomes);
                break;

            case SeletorGA.Sequencial:
                ga.Selector = new SequentialSelector(ga.Genomes);
                break;

            case SeletorGA.Randomico:
                ga.Selector = new RandomSelector(ga.Genomes);
                break;
            }

            ga.Crossover.CrossoverProbability = parameters.ProbabilidadeReproducao / 100.0; //0.3;0.2;
            ga.Crossover.MutationProbability  = parameters.ProbabilidadeMutacao / 100.0;    //0.015;
            ga.Elitism = parameters.HabilitaElitismo;

            ga.CustomObj = parameters.Questoes;

            if (OnGANewGeneration != null)
            {
                ga.NewGeneration += new GeneticAlgorithmEventHandler(this.OnNewGeneration);
            }

            if (OnGANewBestFitness != null)
            {
                ga.NewBestFitness += new GeneticAlgorithmGenomeEventHandler(this.OnNewBestFitness);
            }

            ga.QryBestFitness += new GeneticAlgorithmCancelEventHandler(this.OnQryBestFitness);

            ga.Evaluator = new CustomEvaluator(parameters);

            ga.CreateGenomes(9);

            ga.ExitConditions.Duration    = TimeSpan.FromSeconds(parameters.MaxDuration);
            ga.ExitConditions.Generations = parameters.MaxGenerations;
            ga.ExitConditions.FitnessGoal = parameters.MinFitnessGoal;

            bestGenome = (CustomGenome)ga.Execute();

            stopTime = DateTime.Now;

            exitCondiction = ga.ExitConditions.ExitCondiction;

            bestGenome.UpdateStat(parameters);

            return(true);
        }
Esempio n. 2
0
        public void OnNewBestFitness(GeneticAlgorithm sender, GenomeEventArgs args)
        {
            CustomGenome genome = (CustomGenome)args.Genome;

            genome.UpdateStat(parameters);

            //int hash = genome.GetHashCode();

            if (OnGANewBestFitness != null)
            {
                CustomGenomeEventArgs newArgs = new CustomGenomeEventArgs();

                newArgs.Genome = genome;

                OnGANewBestFitness(this, newArgs);
            }
        }
Esempio n. 3
0
        public double Eval(Genome candidate)
        {
            CustomGenome genome = (CustomGenome)candidate;

            genome.UpdateStat(parameters);

            double ret = 0;

            ret += Math.Abs(genome.QtdTotal() - genome.Length) * 200;

            if (parameters.TempoPrevistoAvaliacao > 0)
            {
                ret += Math.Abs(genome.TempoTotal() - parameters.TempoPrevistoAvaliacao);
            }

            foreach (ConfigComplexidade rule in parameters.ComplexRules)
            {
                ret += Math.Abs(genome.ComplexTotal(rule.ComplexIni, rule.ComplexFim) - rule.Quantidade) * 100;
            }

            int tipoQuestao;

            foreach (ConfigTipoQuestao rule in parameters.TipoQuestaoRules)
            {
                tipoQuestao = (int)rule.TipoQuestao;

                ret += Math.Abs(genome.TipoTotal(tipoQuestao, tipoQuestao) - rule.Quantidade) * 100;
            }

            if (ret > (double)int.MaxValue)
            {
                ret = (double)int.MaxValue;
            }

            return((((double)int.MaxValue) - ret) / ((double)int.MaxValue) * 100.0);
        }