private List <AvaliacaoAnterior> AvaliacoesAnteriores(List <AvaliacaoQuestao> questoesAvaliacao)
        {
            DateTime dataAtual = DateTime.Today;

            List <AvaliacaoAnterior> lista = new List <AvaliacaoAnterior>();
            List <AvaliacaoAnterior> ret   = new List <AvaliacaoAnterior>();

            AvaliacaoAnterior avaliacaoAnterior;

            foreach (AvaliacaoQuestao aq in questoesAvaliacao)
            {
                avaliacaoAnterior = lista.Find(x => x.IdAvaliacao == aq.IdAvaliacao);

                if (avaliacaoAnterior == null)
                {
                    avaliacaoAnterior              = new AvaliacaoAnterior();
                    avaliacaoAnterior.Questoes     = new List <int>();
                    avaliacaoAnterior.IdAvaliacao  = aq.IdAvaliacao;
                    avaliacaoAnterior.DtUtilizacao = aq.DtGeracao;

                    lista.Add(avaliacaoAnterior);
                }

                avaliacaoAnterior.Questoes.Add(aq.IdQuestao);
            }

            StringBuilder sb = new StringBuilder();

            foreach (AvaliacaoAnterior a in lista)
            {
                a.Questoes.Sort();

                if ((dataAtual - a.DtUtilizacao).Days <= parametersGA.QtdNaoRepetirAvaliacao)
                {
                    sb.Clear();

                    foreach (int value in a.Questoes)
                    {
                        sb.Append("|").Append(value.ToString());
                    }

                    a.Key      = sb.ToString().Substring(2);
                    a.HashCode = a.GetHashCode();

                    avaliacaoAnterior = ret.Find(x => x.Key == a.Key);
                    if (avaliacaoAnterior != null && avaliacaoAnterior.DtUtilizacao < a.DtUtilizacao)
                    {
                        avaliacaoAnterior.IdAvaliacao  = a.IdAvaliacao;
                        avaliacaoAnterior.DtUtilizacao = a.DtUtilizacao;
                    }
                    else
                    {
                        ret.Add(a);
                    }
                }
            }

            return(ret);
        }
Example #2
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;
            }
        }