private static ISearchStrategy LS1(TerminateStrategy ts) => new LS( initalise: new RandomInitalise(), neighbourhood: new TwoOpt(), step: new LowestCost(), terminate: ts, name: "Local Search - Random initialisations" );
private static ISearchStrategy RND(TerminateStrategy ts) => new LS( initalise: new RandomInitalise(), neighbourhood: new NonNeighbourhood(), step: new LowestCost(), terminate: ts, name: "Random Search" );
public LocalSearch(IInitalise initalise, INeighbourhood neighbourhood, IStepFunction step, TerminateStrategy terminate, string name = "Local Search") { this.initalisationStrategy = initalise; this.neighbourhood = neighbourhood; this.step = step; this.terminateStrategy = terminate; this.name = name; }
/// <summary> /// Generates a list of available searches with a given <see cref="TerminateStrategy"/> /// </summary> /// <param name="ts">The <see cref="TerminateStrategy"/> that is to be used (may be ignored by some searches eg Greedy Search)</param> /// <returns>A list of searches</returns> internal static List <ISearchStrategy> GenerateSearches(TerminateStrategy ts) { return(new List <ISearchStrategy>() { new ExhaustiveSearch(), RND(ts), LS1(ts), LS2(), GN1(ts, 100, 20), }); }
private static ISearchStrategy GN1(TerminateStrategy ts, uint populationSize, uint k, float elitism = 0.2f, float mutationRate = 0.04f) => new Evolution( initalise: new RandomInitalise(), selectionStrategy: new TournamentSelection(k), crossoverStratergy: new OrderedCrossover(), swap: new TwoOpt(), stepFunction: new LowestCost(), terminate: ts, populationSize: populationSize, eliteism: elitism, mutationRate: mutationRate, name: "Evolutionary Search - Tournament" );
public Evolution(IInitalise initalise, ISelectionStrategy selectionStrategy, ICrossover crossoverStratergy, ISwap swap, TerminateStrategy terminate, IStepFunction stepFunction, uint populationSize, float eliteism, float mutationRate, string name = "Evolution Search") { this.InitalisationStrategy = initalise; this.selectionStrategy = selectionStrategy; this.crossoverStratergy = crossoverStratergy; this.step = stepFunction; this.swap = swap; this.terminateStrategy = terminate; this.name = name; this.eliteism = eliteism; this.mutationRate = mutationRate; population = new Route[populationSize]; }