private GeneticAlgorithm RunGeneticAlgorithm(Population population, IFitness fitness, int generations) { var selection = new EliteSelection(); var crossover = new TwoPointCrossover(); var mutation = new ReverseSequenceMutation(); var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation) { Termination = new GenerationNumberTermination(generations), TaskExecutor = new ParallelTaskExecutor() { MinThreads = 100, MaxThreads = 250 }, }; var latestFitness = 0.0; ga.GenerationRan += (sender, e) => { var bestfitness = ga.BestChromosome.Fitness ?? 0; if (bestfitness != latestFitness) { latestFitness = bestfitness; testOutputHelper.WriteLine($"Current best fitness: {bestfitness}"); } }; ga.Start(); return(ga); }
public void GA_Issue61_Solved() { const Int32 FinalAns = 4567213; var chromosome = new Issue61.GuessNumberChromosome(FinalAns.ToString().Length); var population = new Population(1000, 5000, chromosome); var fitness = new Issue61.GuessNumberFitness(FinalAns); var selection = new EliteSelection(); var crossover = new AlternatingPositionCrossover(); var mutation = new ReverseSequenceMutation(); var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation); ga.MutationProbability = 0.2f; ga.CrossoverProbability = 0.75f; ga.Termination = new OrTermination( new FitnessThresholdTermination(1.0), new FitnessStagnationTermination(200), new GenerationNumberTermination(1000)); ga.Population.GenerationStrategy = new TrackingGenerationStrategy(); ga.Start(); foreach (var gen in ga.Population.Generations) { foreach (var chromossome in gen.Chromosomes) { // Asserts if AlternatingPositionCrossover generated only ordered chromossomes. Assert.AreEqual(chromosome.Length, chromosome.GetGenes().Distinct().Count()); } } }
public void Mutate_NoProbality_NoReverseSequence() { var target = new ReverseSequenceMutation(); var chromosome = Substitute.For <ChromosomeBase>(4); chromosome.ReplaceGenes(0, new Gene[] { new Gene(1), new Gene(2), new Gene(3), new Gene(4), }); var rnd = Substitute.For <IRandomization>(); rnd.GetDouble().Returns(0.1); RandomizationProvider.Current = rnd; target.Mutate(chromosome, 0); Assert.AreEqual(4, chromosome.Length); Assert.AreEqual(1, chromosome.GetGene(0).Value); Assert.AreEqual(2, chromosome.GetGene(1).Value); Assert.AreEqual(3, chromosome.GetGene(2).Value); Assert.AreEqual(4, chromosome.GetGene(3).Value); }
public void Mutate_ValidChromosome_ReverseSequence() { var target = new ReverseSequenceMutation(); var chromosome = Substitute.For <ChromosomeBase>(6); chromosome.ReplaceGenes(0, new Gene[] { new Gene(1), new Gene(2), new Gene(3), new Gene(4), new Gene(5), new Gene(6), }); var rnd = Substitute.For <IRandomization>(); rnd.GetUniqueInts(2, 0, 6).Returns(new int[] { 1, 4 }); RandomizationProvider.Current = rnd; target.Mutate(chromosome, 1); Assert.AreEqual(6, chromosome.Length); Assert.AreEqual(1, chromosome.GetGene(0).Value); Assert.AreEqual(5, chromosome.GetGene(1).Value); Assert.AreEqual(4, chromosome.GetGene(2).Value); Assert.AreEqual(3, chromosome.GetGene(3).Value); Assert.AreEqual(2, chromosome.GetGene(4).Value); Assert.AreEqual(6, chromosome.GetGene(5).Value); }
public static void ga() { AlgorithmList.loadformnistfsgm(); var selection = new EliteSelection(); var crossover = new OrderedCrossover(); var mutation = new ReverseSequenceMutation(); var fitness = new MyProblemFitness(); var chromosome = new MyChromosome(); var population = new Population(4, 6, chromosome); var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation); ga.Termination = new GenerationNumberTermination(4); Console.WriteLine("GA running..."); ga.Start(); Console.WriteLine("Best solution found has {0} fitness.", ga.BestChromosome.Fitness); var a = ga.BestChromosome.GetGenes(); string s = ""; foreach (var b in a) { s = s + b.Value.ToString(); } Console.WriteLine("Best solution found has {0} ", s); }
private void Optimize_Load(object sender, EventArgs e) { var selection = new EliteSelection(); var crossover = new OrderedCrossover(); var mutation = new ReverseSequenceMutation(); var fitness = new TrajectoryFitness(); var chromosome = new TrajectoryChromosome(TrajectoryChromosome.ChromosomeLength(3), 3); var population = new Population(35, 40, chromosome); //72 (6) //67 (2) //49 (3) //102 (1) var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation); var executor = new SmartThreadPoolTaskExecutor(); executor.MinThreads = 1; executor.MaxThreads = 1; ga.TaskExecutor = executor; ga.Termination = new GenerationNumberTermination(10); Console.WriteLine("GA running..."); var t = DateTime.Now; ga.Start(); Console.WriteLine("Time:" + DateTime.Now.Subtract(t).TotalSeconds); Console.WriteLine("Best solution found has {0} fitness.", int.MaxValue - ga.BestChromosome.Fitness); Console.WriteLine(ga.BestChromosome.GetGene(0).Value + " " + ga.BestChromosome.GetGene(1).Value + " " + ga.BestChromosome.GetGene(2).Value); }
public IMutation ReverseSequenceMutation() { var target = new ReverseSequenceMutation(); target.Mutate(new TspChromosome(_numberOfCities), _probability); return(target); }
static GeneticAlgorithm CreateGA(IPopulation population) { var selection = new EliteSelection(); var crossover = new OrderedCrossover(); var mutation = new ReverseSequenceMutation(); var fitness = new TspFitness(100, 0, 1000, 0, 1000); return(new GeneticAlgorithm(population, fitness, selection, crossover, mutation)); }
public void Mutate_LessThanThreeGenes_Exception() { var target = new ReverseSequenceMutation(); var chromosome = Substitute.For <ChromosomeBase>(2); chromosome.ReplaceGenes(0, new Gene[] { new Gene(1), }); Assert.Catch <MutationException>(() => { target.Mutate(chromosome, 0); }, "A chromosome should have, at least, 3 genes. {0} has only 2 gene.".With(chromosome.GetType().Name)); }
public void Initialize(int numberOfCities, int areaWidth, int areaHeight) { Stop(); Fitness = new TspFitness(numberOfCities, areaWidth, areaHeight); var chromosome = new TspChromosome(numberOfCities); // This operators are classic genetic algorithm operators that lead to a good solution on TSP, // but you can try others combinations and see what result you get. var crossover = new OrderedCrossover(); var mutation = new ReverseSequenceMutation(); var selection = new RouletteWheelSelection(); var population = new Population(50, 100, chromosome); _ga = new GeneticAlgorithm(population, Fitness, selection, crossover, mutation); }
public void LinesOfCode() { const string source = @" using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Diagnostics; namespace ConsoleApplication1 { class Calculations { double CalculateTotal(int quantity, int itemPrice) { double basePrice = quantity * itemPrice; if (basePrice > 1000) { return basePrice * 0.95; } else { return basePrice * 0.98; } } } }"; var selection = new EliteSelection(); var crossover = new OrderedCrossover(); var mutation = new ReverseSequenceMutation(); var fitness = new MetricsFitness <LinesOfCodeMetrics>(); var chromosome = new RefactoringChromosome(3, source); var population = new Population(20, 30, chromosome); var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation) { Termination = new GenerationNumberTermination(50) }; ga.Start(); Assert.IsNotNull(ga.BestChromosome.Fitness); TestContext.WriteLine($"Best fitness is {ga.BestChromosome.Fitness} and source looks like: \n {ga.BestChromosome}"); }
public void StartGeneticAlgo(string target) { var selection = new EliteSelection(); var crossover = new ThreeParentCrossover(); var mutation = new ReverseSequenceMutation(); var fitness = new MyFitness { Target = target }; var chromosome = new Chromosome(target); var population = new Population(500, 1000, chromosome); _stopwatch = Stopwatch.StartNew(); _ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation) { Termination = new GenerationNumberTermination(300), MutationProbability = float.MaxValue }; _timer = new Timer(new TimerCallback(_ => { _ga.Termination = new GenerationNumberTermination(_ga.GenerationsNumber + 1); if (_ga.GenerationsNumber > 0) { _ga.Resume(); } else { _ga.Start(); } var teste = string.Empty; for (var i = 0; i < _ga.BestChromosome.GetGenes().Length; i++) { teste += _ga.BestChromosome.GetGenes()[i].Value; if (teste == target) { Stop(); _stopwatch.Stop(); } } StateHasChanged?.Invoke(); }), null, 0, 1); }
static void Main(string[] args) { Console.WriteLine("Hello World!"); var selection = new GeneticSharp.Domain.Selections.RouletteWheelSelection(); var crossover = new OrderedCrossover(); var mutation = new ReverseSequenceMutation(); var fitness = new MyProblemFitness(); var chromosome = new MyProblemChromosome(); var population = new Population(50, 70, chromosome); var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation); ga.Termination = new GenerationNumberTermination(100); Console.WriteLine("GA running..."); ga.Start(); Console.WriteLine("Best solution found has {0} fitness.", ga.BestChromosome.Fitness); }
private GeneticAlgorithm CreateGA(Func <TspChromosome, Population> createPopulation = null) { var selection = new EliteSelection(); var crossover = new OrderedCrossover(); var mutation = new ReverseSequenceMutation(); var chromosome = new TspChromosome(_numberOfCities); var fitness = new TspFitness(_numberOfCities, 0, 1000, 0, 1000); var population = createPopulation == null ? new Population(_minPopulationSize, _minPopulationSize, chromosome) : createPopulation(chromosome); population.GenerationStrategy = new PerformanceGenerationStrategy(); var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation) { Termination = new GenerationNumberTermination(_generations) }; return(ga); }
static void Main(string[] args) { int vezirSayisi = 8; var selection = new EliteSelection(); var crossover = new TwoPointCrossover(); var mutation = new ReverseSequenceMutation(); var fitness = new MyProblemFitness(); var chromosome = new MyProblemChromosome(vezirSayisi); var population = new Population(5000, 5500, chromosome); var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation) { Termination = new FitnessThresholdTermination(vezirSayisi * (vezirSayisi - 1) / 2) }; int index = 0; ga.GenerationRan += delegate { var bestChromosome = ga.Population.BestChromosome; Console.Write("Index: " + index); Console.Write(", Fitness: {0}", bestChromosome.Fitness); Console.Write(", Genes: {0}", string.Join("-", bestChromosome.GetGenes())); Console.WriteLine(); index++; }; Console.WriteLine("GA running..."); ga.Start(); Console.WriteLine("Best solution found has {0} fitness.", ga.BestChromosome.Fitness); Console.Read(); }
public OutputData DoIt(InputData inputData) { var selection = new EliteSelection(); var crossover = new ThreeParentCrossover();;; //OnePointCrossover var mutation = new ReverseSequenceMutation(); //DisplacementMutation ReverseSequenceMutation var fitness = new MyProblemFitness(inputData); var chromosome = new MyProblemChromosome(inputData.F, inputData.N); var population = new Population(100, 1000, chromosome); var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation); ga.Termination = new FitnessStagnationTermination(10000); ga.Population.GenerationStrategy = new TrackingGenerationStrategy(); Console.WriteLine("GA running..."); double currentFitness = 0; ga.GenerationRan += delegate(object obj, EventArgs eventArgs) { var outputx = new MyProblemFitness(inputData); var re = outputx.Evaluate(((GeneticAlgorithm)obj).BestChromosome); if (re != currentFitness) { currentFitness = re; Console.WriteLine("Fitness..." + re); } }; ga.Start(); var x = ga.BestChromosome; var output = new MyProblemFitness(inputData); var res = output.Evaluate(ga.BestChromosome); Console.WriteLine("Done...fitness..." + res); return(output.OutputData); }
public void TSPSolve(int numberOfPoints, List <Point> stationList) { var fitness = new TspFitness(stationList); var chromosome = new TspChromosome(numberOfPoints); var crossover = new OrderedCrossover(); var mutation = new ReverseSequenceMutation(); var selection = new RouletteWheelSelection(); var population = new Population(50, 100, chromosome); m_ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation); m_ga.Termination = new FitnessStagnationTermination(100); m_ga.TaskExecutor = new ParallelTaskExecutor { MinThreads = 100, MaxThreads = 200 }; m_ga.GenerationRan += delegate { var distance = ((TspChromosome)m_ga.BestChromosome).Distance; }; m_ga.TerminationReached += delegate { var c = m_ga.Population.CurrentGeneration.BestChromosome as TspChromosome; var genes = c.GetGenes(); var points = ((TspFitness)m_ga.Fitness).Points; finalPoints = new List <Point>(); for (int i = 0; i < genes.Length; i++) { finalPoints.Add(points[(int)genes[i].Value]); } tspSolved(); }; m_gaThread = new Thread(() => m_ga.Start()); m_gaThread.Start(); }
static void Main(string[] args) { var selection = new EliteSelection(); var crossover = new OnePointCrossover(); var mutation = new ReverseSequenceMutation(); var fitness = new MyProblemFitness(); var chromosome = new MyProblemChromosome(); var population = new Population(20, 20, chromosome); var ga = new GeneticSharp.Domain.GeneticAlgorithm(population, fitness, selection, crossover, mutation) { Termination = new GenerationNumberTermination(100) }; Console.WriteLine("GA running..."); ga.Start(); if (ga.BestChromosome.Fitness != null) { double fitnessValue = ga.BestChromosome.Fitness.Value; string solution = ga.BestChromosome.ToUserFriendly(); Console.WriteLine($"Best solution {solution} found has {fitnessValue} fitness for {ga.GenerationsNumber} generations."); } }
static void Main(string[] args) { SQLiteConnection dbConnect; SQLiteCommand cmd; SQLiteDataReader dbread = null; string inputstring; string cmc = ""; string power = ""; StreamReader inputReader = new StreamReader("input.txt"); dbConnect = new SQLiteConnection("Data Source=C://Users/Korik/Documents/Visual Studio 2015/Projects/GAdeckbuilder/GAdeckbuilder/bin/Debug/mtg.db;"); dbConnect.Open(); string sql; bool white = false, blue = false, black = false, red = false, green = false; while (inputReader.Peek() != -1) { inputstring = inputReader.ReadLine(); sql = "SELECT * FROM cards INNER JOIN colors ON cards.name = colors.name where cards.setcode = 'BFZ' AND colors.setcode = 'BFZ' AND cards.name = '" + inputstring + "';"; // Console.WriteLine(sql); cmd = new SQLiteCommand(sql, dbConnect); dbread = cmd.ExecuteReader(); while (dbread.Read()) { //Console.WriteLine(dbread[1].ToString()); white = false; blue = false; black = false; red = false; green = false; if (Convert.ToBoolean(dbread["white"].ToString())) { white = true; } if (Convert.ToBoolean(dbread["blue"].ToString())) { blue = true; } if (Convert.ToBoolean(dbread["black"].ToString())) { black = true; } if (Convert.ToBoolean(dbread["red"].ToString())) { red = true; } if (Convert.ToBoolean(dbread["green"].ToString())) { green = true; } // Console.WriteLine(dbread["cmc"].ToString()); cmc = dbread["cmc"].ToString(); //Console.WriteLine(cmc); power = dbread["PowerLevel"].ToString(); //Console.WriteLine(power); } // Console.WriteLine(inputstring + white + blue + red + black + green + cmc + power); CardPool.Add(new Card(inputstring, white, blue, black, red, green, int.Parse(cmc), int.Parse(power))); } inputReader.Close(); dbread.Close(); dbConnect.Close(); foreach (Card c in CardPool) { // Console.WriteLine(c.White); } Console.ReadLine(); var selection = new EliteSelection(); var crossover = new OnePointCrossover(); var mutation = new ReverseSequenceMutation(); var fitness = new DeckFitness(); var chromosome = new DeckChromosome(); var population = new Population(400, 400, chromosome); var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation); ga.Termination = new FitnessStagnationTermination(4000); ga.CrossoverProbability = 0.80f; ga.MutationProbability = 1.00f; Console.WriteLine("GA running..."); ga.Start(); printDecklist(ga.BestChromosome); Console.WriteLine("Number of Generations " + ga.GenerationsNumber); Console.ReadLine(); Console.ReadLine(); }
public void Start() { var w = new StreamWriter("C:\\Users\\Taylor\\source\\repos\\ComboProject\\ComboProject\\bin\\Debug\\genelog.csv"); int gen = 1; // init chromosomes var chromosome = new FloatingPointChromosome( new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, new double[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, new int[] { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20 }, new int[] { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }); // gen population var population = new Population(50, 100, chromosome); // fitness function var fitness = new FuncFitness((c) => { var fc = c as FloatingPointChromosome; var genes = fc.ToFloatingPoints(); string combo = combogen.generateGeneticCombo(genes, 0); int damage = ComboSimulator.getComboDamage(combo, movelist); w.WriteLine(string.Format("{0},{1},{2},,{3},{4},{5},{6},{7},{8},{9},{10},{11},{12}", gen.ToString(), combo, damage.ToString(), genes[0], genes[1], genes[2], genes[3], genes[4], genes[5], genes[6], genes[7], genes[8], genes[9])); w.Flush(); return(damage); }); var selection = new EliteSelection(); var crossover = new UniformCrossover(0.5f); var mutation = new ReverseSequenceMutation(); var termination = new FitnessStagnationTermination(5000); var ga = new GeneticAlgorithm( population, fitness, selection, crossover, mutation); ga.Termination = termination; ga.MutationProbability = 0.7f; Console.WriteLine("Generation: combo = damage"); var latestFitness = 0.0; ga.GenerationRan += (sender, e) => { var bestChromosome = ga.BestChromosome as FloatingPointChromosome; var bestFitness = bestChromosome.Fitness.Value; if (bestFitness != latestFitness) { latestFitness = bestFitness; string combo = combogen.generateGeneticCombo(bestChromosome.ToFloatingPoints(), 0); Console.WriteLine("Generation {0,2}: {1} = {2}", ga.GenerationsNumber, combo, bestFitness ); } gen++; }; ga.Start(); Console.ReadKey(); }
public static void CorretionCentroid() { //中心点数据 Stopwatch sw = new Stopwatch(); sw.Start(); List <Coordinate> centroidPoints = new List <Coordinate>(80); StreamReader sr = new StreamReader(@"D:\MagicSong\OneDrive\2017研究生毕业设计\数据\项目用数据\中心点80.txt"); sr.ReadLine();//读取标题行 while (!sr.EndOfStream) { string[] line = sr.ReadLine().Split(','); centroidPoints.Add(new Coordinate(double.Parse(line[1]), double.Parse(line[2]))); } sr.Close(); //Bus数据,并且构造KD树 KdTree myKdtree = new KdTree(2); IFeatureSet busFS = FeatureSet.Open(@"D:\MagicSong\OneDrive\2017研究生毕业设计\数据\项目用数据\BusStopGauss.shp"); List <Coordinate> busStopPoints = new List <Coordinate>(busFS.NumRows()); foreach (var item in busFS.Features) { var c = item.Coordinates[0]; busStopPoints.Add(c); myKdtree.Insert(new double[] { c.X, c.Y }, item); } Console.WriteLine("数据读取完毕,开始构造遗传算法"); IFeatureSet newCentroid = new FeatureSet(FeatureType.Point); newCentroid.Name = "优化过的中心点"; newCentroid.Projection = ProjectionInfo.FromEpsgCode(GAUSS_EPSG); newCentroid.DataTable.Columns.Add("name", typeof(string)); //遗传算法,构造适应性函数 MyProblemChromosome.CandiateNumber = 5; List <int[]> candinatesForEachControid = new List <int[]>(centroidPoints.Count); foreach (var item in centroidPoints) { object[] nearest = myKdtree.Nearest(new double[] { item.X, item.Y }, MyProblemChromosome.CandiateNumber); candinatesForEachControid.Add(nearest.Select((o) => { var f = o as IFeature; return(f.Fid); }).ToArray()); } MyProblemFitness fitness = new MyProblemFitness(centroidPoints, busStopPoints, candinatesForEachControid); MyProblemChromosome mpc = new MyProblemChromosome(centroidPoints.Count); //这边可以并行 MyProblemChromosome globalBest = null; Console.WriteLine("遗传算法构造已经完成!"); sw.Stop(); Console.WriteLine("一共用时:{0}s", sw.Elapsed.TotalSeconds); int GACount = 8; Parallel.For(0, GACount, new Action <int>((index) => { var selection = new EliteSelection(); var crossover = new TwoPointCrossover(); var mutation = new ReverseSequenceMutation(); var population = new Population(1000, 1200, mpc); var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation); ga.Termination = new GenerationNumberTermination(1000); Stopwatch sw1 = new Stopwatch(); sw1.Start(); Console.WriteLine("遗传算法任务{0}正在运行.......", index); ga.Start(); var best = ga.BestChromosome as MyProblemChromosome; if (globalBest == null || globalBest.Fitness < best.Fitness) { globalBest = best; } sw1.Stop(); Console.WriteLine("第{0}次遗传算法已经完成,耗费时间为:{1}s,最终的fitness为:{2},有效个数为:{3}", index, sw1.Elapsed.TotalSeconds, best.Fitness, best.Significance); })); Console.WriteLine("Final Choose!"); Console.WriteLine("最终的fitness为:{0},有效个数为:{1}", globalBest.Fitness, globalBest.Significance); for (int i = 0; i < globalBest.Length; i++) { int index = candinatesForEachControid[i][(int)globalBest.GetGene(i).Value]; Coordinate c = busStopPoints[index]; var f = newCentroid.AddFeature(new Point(c)); f.DataRow.BeginEdit(); f.DataRow["name"] = busFS.GetFeature(index).DataRow["name"]; f.DataRow.EndEdit(); } newCentroid.SaveAs("newCentroid.shp", true); Console.ReadKey(); }