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