public GridLocalOptimizer(int[] startPermutation, IEuclideanPath euclideanPath, OptimizerConfig config) : base(startPermutation, euclideanPath, config) { // ToDo: Get from config _maxCellCount = 16; _points = euclideanPath.Points; }
public TspOptimizerBase(int[] startPermutation, IEuclideanPath euclideanPath, OptimizerConfig config) { _startPermutation = startPermutation; _euclideanPath = euclideanPath; _config = config; _optimalSequence = new Subject <int[]>(); _closedPath = true; OptimizerInfo = new Subject <string>(); }
public LocalTwoOptOptimizer(int[] startPermutation, IEuclideanPath euclideanPath, OptimizerConfig config) : base(startPermutation, euclideanPath, config) { OptimalSequence = _startPermutation.ToArray(); _downSampledOptSequence = new Subject <int[]>(); _disposeStream = Observable.Interval(TimeSpan.FromMilliseconds(100)) .ObserveOn(Scheduler.Default) .CombineWithLatest(_downSampledOptSequence, (time, seq) => seq) .Subscribe(seq => _optimalSequence.OnNext(seq)); }
public GeneticOptimizer(int[] startPermutation, IEuclideanPath euclideanPath, OptimizerConfig config) : base(startPermutation, euclideanPath, config) { _rate = _config.CrossoverRate; _number = _startPermutation.Length; _population = _config.PopulationSize; _random = new Random(); _partiallyMappedCrossover = new PartiallyMappedCrossover(_number); MinDistance = double.MaxValue; }
/// <summary> /// Factory to create specified optimizer /// </summary> /// <param name="tspOptimizerAlgorithm"></param> /// <param name="startSequence"></param> /// <param name="euclideanPath"></param> /// <returns></returns> public static ITspOptimizer Create(TspOptimizerAlgorithm tspOptimizerAlgorithm, int[] startSequence, IEuclideanPath euclideanPath, OptimizerConfig config) { ITspOptimizer tspOptimizer = null; switch (tspOptimizerAlgorithm) { case TspOptimizerAlgorithm.RandomOptimizer: tspOptimizer = new RandomOptimizer(startSequence, euclideanPath, config); break; case TspOptimizerAlgorithm.LocalCombinationOptimizer: tspOptimizer = new LocalCombinationOptimizer(startSequence, euclideanPath, config); break; case TspOptimizerAlgorithm.MultiLocalCombinationOptimizer: tspOptimizer = new MultiLocalCombinationOptimizer(startSequence, euclideanPath, config); break; case TspOptimizerAlgorithm.LocalTwoOptOptimizer: tspOptimizer = new LocalTwoOptOptimizer(startSequence, euclideanPath, config); break; case TspOptimizerAlgorithm.BruteForceOptimizer: tspOptimizer = new BruteForceOptimizer(startSequence, euclideanPath, config); break; case TspOptimizerAlgorithm.BranchAndBoundOptimizer: tspOptimizer = new BranchAndBoundOptimizer(startSequence, euclideanPath, config); break; case TspOptimizerAlgorithm.SimulatedAnnealingOptimizer: tspOptimizer = new SimulatedAnnealingOptimizer(startSequence, euclideanPath, config); break; case TspOptimizerAlgorithm.GeneticOptimizer: tspOptimizer = new GeneticOptimizer(startSequence, euclideanPath, config); break; default: throw new ArgumentException("Unknown optimizer"); } return(tspOptimizer); }
private void OnPathTypeChanged() { int numberOfPoints = VerifyInput(); var path = PathGeneratorFactory.Create(SelectedPathType, new Size(10, 10), numberOfPoints); if (path == null) { Info = "Path generator not yet implemented :-("; return; } _initialPath = path.Select(coordinate => coordinate.To2DPoint()).ToArray(); _euclideanPath = new FastEuclideanPath(_initialPath); _shuffledTour = Enumerable.Range(0, _initialPath.Length).ToArray(); PlotTour(Enumerable.Range(0, _initialPath.Length).ToArray()); }
public SimulatedAnnealingOptimizer(int[] startPermutation, IEuclideanPath euclideanPath, OptimizerConfig config) : base(startPermutation, euclideanPath, config) { _coolingRate = _config.CoolingRate; }
public LocalCombinationOptimizer(int[] startPermutation, IEuclideanPath euclideanPath, OptimizerConfig config) : base(startPermutation, euclideanPath, config) { }
public BruteForceOptimizer(int[] startPermutation, IEuclideanPath euclideanPath, OptimizerConfig config) : base(startPermutation, euclideanPath, config) { _permutationCount = Enumerable.Range(1, _startPermutation.Length).Aggregate(1, (acc, val) => acc * val); }
public RandomOptimizer(int[] startPermutation, IEuclideanPath euclideanPath, OptimizerConfig config) : base(startPermutation, euclideanPath, config) { }
public MultiLocalCombinationOptimizer(int[] startPermutation, IEuclideanPath euclideanPath, OptimizerConfig config) : base(startPermutation, euclideanPath, config) { _globalMinimum = double.MaxValue; SetMultiSearcher(_config.NumberOfCores); }
public BranchAndBoundOptimizer(int[] startPermutation, IEuclideanPath euclideanPath, OptimizerConfig config) : base(startPermutation, euclideanPath, config) { _minPathLength = double.MaxValue; }