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); }
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; } }