コード例 #1
0
        public void OnQryBestFitness(GeneticAlgorithm sender, GenomeCancelEventArgs args)
        {
            CustomGenome genomeCustom = (CustomGenome)args.Genome;

            String key = genomeCustom.ToOrderedString();

            AvaliacaoAnterior a = parameters.AvaliacoesAnteriores.Find(x => x.Key.Equals(key));

            if (genomeCustom.QtdTotal() != parameters.QtdQuestoes || (a != null && (DateTime.Today - a.DtUtilizacao).Days <= parameters.QtdNaoRepetirAvaliacao))
            {
                args.Cancel = true;
            }
        }
コード例 #2
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);
        }