static void Main(string[] args) { DoubleArrayChromosome weightValues = new DoubleArrayChromosome(new WeightRandomGenerator(), new WeightRandomGenerator(), new WeightRandomGenerator(), 6); Population weightPop = new Population(40, weightValues, new AriesFF(), new EliteSelection()); int counter = 0; bool stopEvo = false; AriesFF fintessEval = new AriesFF(); double error = 0; while (!stopEvo) { weightPop.RunEpoch(); counter++; IChromosome best = weightPop.BestChromosome; error = fintessEval.Evaluate(best); stopEvo = counter > 1000 || error < 0.12; } Console.WriteLine("Stopped after " + counter.ToString()); DoubleArrayChromosome solution = (DoubleArrayChromosome)weightPop.BestChromosome; Console.WriteLine(solution.ToString()); Console.ReadKey(); }
public double Evaluate(IChromosome chromosome) { DoubleArrayChromosome doubleChromosome = (DoubleArrayChromosome)chromosome; string[] s_genes = doubleChromosome.ToString().Split(); double[] d_genes = new double[s_genes.Length]; double sum = 0; for (int i = 0; i < d_genes.Length; i++) { d_genes[i] = Double.Parse(s_genes[i]); } double error = xorSim.getError(d_genes); if (error == 0) { return(0); } else { return(1 / xorSim.getError(d_genes)); } }