GeneticSharp
GeneticSharp is a fast, extensible, multi-platform and multithreading C# Genetic Algorithm library that simplifies the development of applications using Genetic Algorithms (GAs).
Can be used in any kind of .NET Core and .NET Framework apps, like ASP .NET MVC, ASP .NET Core, Web Forms, UWP, Windows Forms, GTK#, Xamarin and Unity3D games.
Projects, papers, journals and tutorials using GeneticSharp
- AeroVision: aircraft trajectories optimization and visualization (paper)
- Context-Sensitive Code Completion: improving predictions with genetic algorithms (paper) (Github)
- Designing and creating a self managing distributed file system (paper)
- Developing trading strategies with genetic algorithms (forum) (paper)
- Function optimization with GeneticSharp (tutorial)
- Genetic Scheduler: a genetic algorithm for scheduling tasks with temporal restriction in distributed systems (paper)
- Lean Optimization: genetic optimization using LEAN (GitHub)
- Overload journal 142: Evolutionary computing frameworks for optimisation (journal)
- Path Finding with Genetic Algorithms (project)
- SurvivorAI: some experiments of survival scenarios (project)
- Are you using GeneticSharp in your project? Please, let me know!
Features
Chromosomes
- FloatingPointChromosome
- IntegerChromosome
- Add your own chromosome representation implementing IChromosome / IBinaryChromosome interfaces or extending ChromosomeBase / BinaryChromosomeBase.
Fitness
Add your own fitness evaluation, implementing IFitness interface.
Populations
Selections
- Elite (also know as Truncate or Truncation)
- Roulette Wheel
- Stochastic Universal Sampling
- Tournament
- Others selections can be added implementing ISelection interface or extending SelectionBase.
Crossovers
- Cut and Splice
- Cycle (CX)
- One-Point (C1)
- Order-based (OX2)
- Ordered (OX1)
- Partially Mapped (PMX)
- Position-based (POS)
- Three parent
- Two-Point (C2)
- Uniform
- Others crossovers can be added implementing ICrossover interface or extending CrossoverBase.
Mutations
- Displacement
- Flip Bit
- Insertion
- Partial Shuffle (PSM)
- Reverse Sequence (RSM)
- Twors
- Uniform
- Others mutations can be added implementing IMutation interface or extending MutationBase / SequenceMutationBase.
Reinsertions
- Elitist
- Fitness Based
- Pure
- Uniform
- Others reinsertions can be added implementing IReinsertion interface or extending ReinsertionBase.
Terminations
- Generation number
- Time evolving
- Fitness stagnation
- Fitness threshold
- And e Or (allows combine others terminations)
- Others terminations can be added implementing ITermination interface or extending TerminationBase.
Randomizations
- Basic randomization (using System.Random)
- Fast random
- If you need a special kind of randomization for your GA, just implement the IRandomization interface.
Runner app (console) with samples
- AutoConfig
- Bitmap equality
- Equality equation
- Equation solver
- Function builder
- Ghostwriter
- TSP (Travelling Salesman Problem)
Runner app (GTK#) with visual samples:
TSP (Travelling Salesman Problem) and Function optimization
Bitmap equality
Unity3d sample
Multi-platform
- Mono, .NET Standard 2.0 and .NET Framework 4.6.2 support.
- Fully tested on Windows and MacOS.
Code quality
- 100% unit test code coverage.
- FxCop validated.
- Code duplicated verification.
- Good (and well used) design patterns.
- 100% code documentation
Setup
.NET Standard 2.0 and .NET Framework 4.6.2
.NET Standard 2.0 and .NET Framework 4.6.2 version is currently in release candidate, to install it use the command below:
Only GeneticSharp:
install-package GeneticSharp -Version 2.0.0-rc1
GeneticSharp and extensions (TSP, AutoConfig, Bitmap equality, Equality equation, Equation solver, Function builder, etc):
install-package GeneticSharp.Extensions -Version 2.0.0-rc1
Mono and .NET Framework 3.5
To install previous version that support .NET Framework 3.5:
install-package GeneticSharp -Version 1.2.0
Running samples
If you want to run the console, GTK# and Unity samples, just fork this repository and follow the instruction from our setup page wiki.
Usage
Creating your own fitness evaluation
public class MyProblemFitness : IFitness
{
public double Evaluate (IChromosome chromosome)
{
// Evaluate the fitness of chromosome.
}
}
Creating your own chromosome
public class MyProblemChromosome : ChromosomeBase
{
// Change the argument value passed to base construtor to change the length
// of your chromosome.
public MyProblemChromosome() : base(10)
{
CreateGenes();
}
public override Gene GenerateGene (int geneIndex)
{
// Generate a gene base on my problem chromosome representation.
}
public override IChromosome CreateNew ()
{
return new MyProblemChromosome();
}
}
Running your GA
var selection = new EliteSelection();
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);
Roadmap
- Add new problems/classic sample
- Checkers
- Time series
- Knapsack problem
- Add new selections
- Reward-based
- Add new crossovers
- Voting recombination
- Alternating-position (AP)
- Sequential Constructive (SCX)
- Shuffle crossover
- Precedence Preservative Crossover (PPX)
- Add new mutations
- Non-Uniform
- Boundary
- Gaussian
- Add new terminations
- Fitness convergence
- Population convergence
- Chromosome convergence
- New samples
- Xamarin runner app (sample)
- Unity3d runner app (sample)
- Parallel populations (islands)
FAQ
Having troubles?
- Read our wiki.
- Ask on Twitter @ogiacomelli.
- Ask on Stack Overflow using the tag GeneticSharp.
How to improve it?
Create a fork of GeneticSharp.
Did you change it? Submit a pull request.
License
Licensed under the The MIT License (MIT). In others words, you can use this library for developement any kind of software: open source, commercial, proprietary and alien.