public RouteSet BasicPenalization(RouteSet initial, Exploration expCondition, Random rdObj, double overloadFactor, List <Func <RouteSet, Exploration, Random, RouteSet> > neighborhoods, double saProbability, double saWorst, int saRepetitions, double saFactor, double saCoolingRate, int saCoolerAmount) { SimulatedAnnealingParameters saParameters = new SimulatedAnnealingParameters(GetCost(initial), saProbability, saWorst, saRepetitions, saFactor, saCoolingRate, saCoolerAmount); return(BasicPenalization(initial, expCondition, rdObj, overloadFactor, neighborhoods, saParameters)); }
public RouteSet MutiStartParallelShakingPenalization(List <RouteSet> initialPool, int reStarts, Exploration expCondition, Random rdObj, double overloadFactor, List <Func <RouteSet, Exploration, Random, RouteSet> > neighborhoods, List <Func <RouteSet, Random, RouteSet> > shaking, SimulatedAnnealingParameters saParameters) { SimulatedAnnealingProcedure <RouteSet> saProcedure = new SimulatedAnnealingProcedure <RouteSet>(); return(MultiStartParallelShakingPenalization(reStarts, expCondition, rdObj, overloadFactor, neighborhoods, shaking, saProcedure, saParameters, initialPool, false)); }
public RouteSet BasicPenalization(RouteSet initial, Exploration expCondition, Random rdObj, double overloadFactor, List <Func <RouteSet, Exploration, Random, RouteSet> > neighborhoods, SimulatedAnnealingParameters saParameters) { OverloadFactor = overloadFactor; SimulatedAnnealingProcedure <RouteSet> saProcedure = new SimulatedAnnealingProcedure <RouteSet>(); return(saProcedure.Solve(saParameters, initial, neighborhoods, expCondition, GetCost, rdObj)); }
public List <RouteSet> BuildSolutionPool(double alphaStep, int alphaPool, double overloadFactor, int shakings, Exploration expCondition, Random rdObj, List <Func <RouteSet, Exploration, Random, RouteSet> > neighborhoods, List <Func <RouteSet, Random, RouteSet> > shakingProcedures, SimulatedAnnealingParameters saParams) { SimulatedAnnealingProcedure <RouteSet> saProcedure = new SimulatedAnnealingProcedure <RouteSet>(); return(BuildSolutionPool(alphaStep, alphaPool, overloadFactor, shakings, expCondition, rdObj, neighborhoods, shakingProcedures, saProcedure, saParams)); }
public RouteSet Solve(double alphaStep, int alphaPool, double overloadFactor, int shakings, Exploration expCondition, Random rdObj, List <Func <RouteSet, Exploration, Random, RouteSet> > neighborhoods, List <Func <RouteSet, Random, RouteSet> > shakingProcedures, string gamsFolderPath, SimulatedAnnealingParameters saParams) { SimulatedAnnealingProcedure <RouteSet> procedure = new SimulatedAnnealingProcedure <RouteSet>(); return(Solve(alphaStep, alphaPool, overloadFactor, shakings, expCondition, rdObj, neighborhoods, shakingProcedures, gamsFolderPath, procedure, saParams)); }
public RouteSet ShakingPenalization(RouteSet initial, int reStarts, Exploration expCondition, Random rdObj, double overloadFactor, List <Func <RouteSet, Exploration, Random, RouteSet> > neighborhoods, List <Func <RouteSet, Random, RouteSet> > shaking, SimulatedAnnealingParameters saParameters) { SimulatedAnnealingProcedure <RouteSet> saProcedure = new SimulatedAnnealingProcedure <RouteSet>(); return(ShakingPenalization(initial, reStarts, expCondition, rdObj, overloadFactor, neighborhoods, shaking, saProcedure, saParameters)); }
public RouteSet MultiStartPenalization(List <RouteSet> initialPool, Exploration expCondition, Random rdObj, double overloadFactor, List <Func <RouteSet, Exploration, Random, RouteSet> > neighborhoods, double saProbability, double saWorst, int saRepetitions, double saFactor, double saCoolingRate, int saCoolerAmount) { OverloadFactor = overloadFactor; SimulatedAnnealingParameters saParameters = ComputeSAParameters(saProbability, saWorst, saRepetitions, saFactor, saCoolingRate, saCoolerAmount, initialPool); SimulatedAnnealingProcedure <RouteSet> saProcedure = new SimulatedAnnealingProcedure <RouteSet>(); return(MultiStartPenalization(expCondition, rdObj, overloadFactor, neighborhoods, saProcedure, saParameters, initialPool)); }
public RouteSet ParallelShakingPenalization(RouteSet initial, int reStarts, Exploration expCondition, Random rdObj, double overloadFactor, List <Func <RouteSet, Exploration, Random, RouteSet> > neighborhoods, List <Func <RouteSet, Random, RouteSet> > shaking, double saProbability, double saWorst, int saRepetitions, double saFactor, double saCoolingRate, int saCoolerAmount) { SimulatedAnnealingProcedure <RouteSet> saProcedure = new SimulatedAnnealingProcedure <RouteSet>(); OverloadFactor = overloadFactor; SimulatedAnnealingParameters saParameters = new SimulatedAnnealingParameters(GetCost(initial), saProbability, saWorst, saRepetitions, saFactor, saCoolingRate, saCoolerAmount); return(ParallelShakingPenalization(initial, reStarts, expCondition, rdObj, overloadFactor, neighborhoods, shaking, saProcedure, saParameters, false)); }
protected SimulatedAnnealingParameters ComputeSAParameters(double saProbability, double saWorst, int saRepetitions, double saFactor, double saCoolingRate, int saCoolerAmount, List <RouteSet> initialPool) { List <double> tmp0 = new List <double>(); List <double> tmpn = new List <double>(); foreach (var item in initialPool) { double t0 = SimulatedAnnealingParameters.ComputeInitialTemperature(GetCost(item), saProbability, saWorst); tmp0.Add(t0); tmpn.Add(SimulatedAnnealingParameters.ComputeFinalTemperature(t0, saCoolingRate, saCoolerAmount)); } return(new SimulatedAnnealingParameters(tmp0.Average(), tmpn.Average(), saRepetitions, saFactor, saCoolingRate)); }
public RouteSet Solve(double alphaStep, int alphaPool, double overloadFactor, int shakings, Exploration expCondition, Random rdObj, List <Func <RouteSet, Exploration, Random, RouteSet> > neighborhoods, List <Func <RouteSet, Random, RouteSet> > shakingProcedures, string gamsFolderPath, double saProbability, double saWorst, int saRepetitions, double saFactor, double saCoolingRate, int saCoolerAmount) { OverloadFactor = 0; List <RouteSet> initialPool = BuildInitialPool(alphaStep, alphaPool, rdObj); SimulatedAnnealingProcedure <RouteSet> procedure = new SimulatedAnnealingProcedure <RouteSet>(); SimulatedAnnealingParameters saParams = ComputeSAParameters(saProbability, saWorst, saRepetitions, saFactor, saCoolingRate, saCoolerAmount, initialPool); return(Solve(overloadFactor, shakings, expCondition, rdObj, neighborhoods, shakingProcedures, gamsFolderPath, procedure, saParams, initialPool)); }
private void bwVehicleRouting_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = (BackgroundWorker)sender; algorithmStatus.Text = "Press ESC to cancel"; VehicleRoutingProblem problem = new VehicleRoutingProblem(routingCustomers, routingVehicles); VehicleRoutingSolution startSolution = new VehicleRoutingSolution(problem); Swap swap = new Swap(problem.Dimension, 1); Shift shift = new Shift(problem.Dimension, 2); TwoOpt twoOpt = new TwoOpt(problem.Dimension, 3); List <Operator> operations = new List <Operator> { swap, shift, twoOpt }; MultistartParameters multistartParameters = (MultistartParameters)multistartOptions.Clone(); LocalDescentParameters ldParameters = new LocalDescentParameters() { Name = "VEHICLE LD", Seed = seed, DetailedOutput = true, Operators = operations }; SimulatedAnnealingParameters saParameters = new SimulatedAnnealingParameters() { Name = "VEHICLE SA", InitProbability = 0.4, TemperatureCooling = 0.95, MinCostDeviation = 10E-3, Seed = seed, DetailedOutput = true, Operators = operations }; StackedParameters ssParameters = new StackedParameters() { Name = "B", DetailedOutput = true, OptimizationAlgorithms = new Type[] { typeof(LocalDescent), typeof(SimulatedAnnealing), typeof(LocalDescent) }, Parameters = new OptimizationParameters[] { ldParameters, saParameters, ldParameters } }; switch (optimizerType) { case 0: { multistartParameters.Parameters = ldParameters; multistartParameters.OptimizationAlgorithm = typeof(LocalDescent); } break; case 1: { multistartParameters.Parameters = saParameters; multistartParameters.OptimizationAlgorithm = typeof(SimulatedAnnealing); } break; case 2: { saParameters.InitProbability = 0.002; saParameters.MinCostDeviation = 10E-2; multistartParameters.Parameters = ssParameters; multistartParameters.OptimizationAlgorithm = typeof(StackedSearch); } break; case 3: { saParameters.InitProbability = 0.01; saParameters.MinCostDeviation = 10E-2; multistartParameters.InstancesNumber = 3; multistartParameters.Parameters = ssParameters; multistartParameters.OptimizationAlgorithm = typeof(StackedSearch); } break; } vehicleRoutingOptimizer = new ParallelMultistart(multistartParameters); toRenderBackground = false; foreach (ISolution solution in vehicleRoutingOptimizer.Minimize(startSolution)) { if (worker.CancellationPending) { vehicleRoutingOptimizer.Stop(); e.Cancel = true; } if (e.Cancel) { solution.IsFinal = false; } worker.ReportProgress(0); } }
private void bwFloorplan_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = (BackgroundWorker)sender; algorithmStatus.Text = "Press ESC to cancel"; FloorplanProblem problem = new FloorplanProblem(floorplanRectangles); FloorplanSolution startSolution = new FloorplanSolution(problem); Swap swap = new Swap(problem.Dimension, 10); Shift shift = new Shift(problem.Dimension, 1); EmptyLeafMove eLeaf = new EmptyLeafMove(problem.Dimension, 5); FullLeafMove fLeaf = new FullLeafMove(problem.Dimension, 5); FullNodeMove fNode = new FullNodeMove(problem.Dimension, 5); MultistartParameters multistartParameters = (MultistartParameters)multistartOptions.Clone(); LocalDescentParameters ldParameters = new LocalDescentParameters() { Name = "VLSI LD", Seed = seed, DetailedOutput = true, Operators = new List <Operator> { swap, fLeaf } }; SimulatedAnnealingParameters saParameters = new SimulatedAnnealingParameters() { Name = "VLSI SA", InitProbability = 0.5, TemperatureCooling = 0.96, MinCostDeviation = 0, Seed = seed, DetailedOutput = true, Operators = new List <Operator> { swap, fNode } }; StackedParameters ssParameters = new StackedParameters() { Name = "B", DetailedOutput = true, OptimizationAlgorithms = new Type[] { typeof(LocalDescent), typeof(SimulatedAnnealing), typeof(LocalDescent) }, Parameters = new OptimizationParameters[] { ldParameters, saParameters, ldParameters } }; switch (optimizerType) { case 0: { multistartParameters.Parameters = ldParameters; multistartParameters.OptimizationAlgorithm = typeof(LocalDescent); } break; case 1: { multistartParameters.Parameters = saParameters; multistartParameters.OptimizationAlgorithm = typeof(SimulatedAnnealing); } break; case 2: { saParameters.InitProbability = 0.005; saParameters.TemperatureCooling = 0.95; multistartParameters.Parameters = ssParameters; multistartParameters.OptimizationAlgorithm = typeof(StackedSearch); } break; case 3: { saParameters.InitProbability = 0.005; saParameters.TemperatureCooling = 0.95; multistartParameters.InstancesNumber = 3; multistartParameters.Parameters = ssParameters; multistartParameters.OptimizationAlgorithm = typeof(StackedSearch); } break; } floorplanOptimizer = new ParallelMultistart(multistartParameters); toRenderBackground = false; foreach (ISolution solution in floorplanOptimizer.Minimize(startSolution)) { if (worker.CancellationPending) { floorplanOptimizer.Stop(); e.Cancel = true; } worker.ReportProgress(0); } }
static void Main(string[] args) { //FloorplanProblem problem = new FloorplanProblem(50); //FloorplanSolution solution = new FloorplanSolution(problem); //Swap swap = new Swap(problem.Dimension); //Shift shift = new Shift(problem.Dimension); //FullLeafMove leaf = new FullLeafMove(problem.Dimension); //List<Operator> operations = new List<Operator> { swap, shift, leaf }; TspProblem problem = new TspProblem(100); TspSolution solution = new TspSolution(problem); Swap swap = new Swap(problem.Dimension, 1); Shift shift = new Shift(problem.Dimension, 2); TwoOpt twoOpt = new TwoOpt(problem.Dimension, 3); List <Operator> operations = new List <Operator> { swap, shift, twoOpt }; MultistartParameters multistartOptions = new MultistartParameters() { InstancesNumber = 1, OutputFrequency = 500, }; LocalDescentParameters ldParameters = new LocalDescentParameters() { DetailedOutput = true, Seed = 0, Operators = operations, IsSteepestDescent = false }; SimulatedAnnealingParameters saParameters = new SimulatedAnnealingParameters() { InitProbability = 0.3, TemperatureCooling = 0.97, UseWeightedNeighborhood = true, DetailedOutput = false, Seed = 0, Operators = operations, }; MultistartParameters ldMultistartParameters = (MultistartParameters)multistartOptions.Clone(); ldMultistartParameters.Parameters = ldParameters; MultistartParameters saMultistartParameters = (MultistartParameters)multistartOptions.Clone(); saMultistartParameters.Parameters = saParameters; LocalDescent ld = new LocalDescent(ldParameters); SimulatedAnnealing sa = new SimulatedAnnealing(saParameters); ParallelMultistart pld = new ParallelMultistart(ldMultistartParameters); ParallelMultistart psa = new ParallelMultistart(saMultistartParameters); List <string> operators = new List <string>(); IPermutation sol = solution; foreach (IPermutation s in ld.Minimize(solution)) { Console.WriteLine("{0}, {1:f}s, {2}, {3}, {4}, {5}", s.CostValue, s.TimeInSeconds, s.IterationNumber, s.IsCurrentBest, s.IsFinal, sol.CostValue - s.CostValue); sol = s; operators.Add(s.OperatorTag); } //var groups = operators.GroupBy(s => s).Select(s => new { Operator = s.Key, Count = s.Count() }); //var dictionary = groups.ToDictionary(g => g.Operator, g => g.Count); //foreach (var o in groups) //{ // Console.WriteLine("{0} = {1}", o.Operator, o.Count); //} Console.WriteLine("Done"); Console.ReadLine(); }
static void Main(string[] args) { //VehicleRoutingProblem vrProblem = new VehicleRoutingProblem(4, 2); //VehicleRoutingSolution vrSolution = new VehicleRoutingSolution(vrProblem); //Console.WriteLine(vrSolution.ToString()); //Console.WriteLine(vrSolution.CostValue); //Console.ReadLine(); //return; //FloorplanProblem problem = new FloorplanProblem(100); //FloorplanProblem problem = FloorplanProblem.Load("500.vlsi"); //FloorplanSolution solution = new FloorplanSolution(problem); //Swap swap = new Swap(problem.Dimension, 10); //Shift shift = new Shift(problem.Dimension, 1); //EmptyLeafMove eLeaf = new EmptyLeafMove(problem.Dimension, 5); //FullLeafMove fLeaf = new FullLeafMove(problem.Dimension, 5); //FullNodeMove fnode = new FullNodeMove(problem.Dimension, 5); //List<Operator> operations = new List<Operator> { swap, fLeaf }; //TspProblem problem = new TspProblem(200); //TspSolution solution = new TspSolution(problem); VehicleRoutingProblem problem = new VehicleRoutingProblem(225, 10); VehicleRoutingSolution solution = new VehicleRoutingSolution(problem); Swap swap = new Swap(problem.Dimension, 1); Shift shift = new Shift(problem.Dimension, 2); TwoOpt twoOpt = new TwoOpt(problem.Dimension, 3); List <Operator> operations = new List <Operator> { swap, shift, twoOpt }; MultistartParameters multistartOptions = new MultistartParameters() { Name = "P", InstancesNumber = 5, RandomizeStart = false, DetailedOutput = true, OutputFrequency = 100, }; LocalDescentParameters ldParameters = new LocalDescentParameters() { Name = "LD", DetailedOutput = true, Seed = 0, Operators = operations, IsSteepestDescent = false }; SimulatedAnnealingParameters saParameters = new SimulatedAnnealingParameters() { Name = "SA", InitProbability = 0.5, TemperatureCooling = 0.98, MinCostDeviation = 0, UseWeightedNeighborhood = false, DetailedOutput = false, Seed = 0, Operators = operations, }; MultistartParameters pldParameters = (MultistartParameters)multistartOptions.Clone(); pldParameters.OptimizationAlgorithm = typeof(LocalDescent); pldParameters.Parameters = ldParameters; MultistartParameters psaParameters = (MultistartParameters)multistartOptions.Clone(); psaParameters.OptimizationAlgorithm = typeof(SimulatedAnnealing); psaParameters.Parameters = saParameters; StackedParameters ssParameters = new StackedParameters() { Name = "B", DetailedOutput = true, OptimizationAlgorithms = new Type[] { typeof(LocalDescent), typeof(SimulatedAnnealing), typeof(LocalDescent) }, Parameters = new OptimizationParameters[] { ldParameters, saParameters, ldParameters } }; StackedParameters sspParameters = new StackedParameters() { Name = "B", DetailedOutput = false, OptimizationAlgorithms = new Type[] { typeof(LocalDescent), typeof(ParallelMultistart), typeof(LocalDescent) }, Parameters = new OptimizationParameters[] { ldParameters, psaParameters, ldParameters } }; LocalDescent ld = new LocalDescent(ldParameters); SimulatedAnnealing sa = new SimulatedAnnealing(saParameters); ParallelMultistart pld = new ParallelMultistart(pldParameters); ParallelMultistart psa = new ParallelMultistart(psaParameters); StackedSearch ss = new StackedSearch(ssParameters); StackedSearch ssp = new StackedSearch(sspParameters); MultistartParameters pssParameters = (MultistartParameters)multistartOptions.Clone(); pssParameters.DetailedOutput = false; pssParameters.RandomizeStart = true; pssParameters.OptimizationAlgorithm = typeof(StackedSearch); pssParameters.Parameters = ssParameters; ParallelMultistart pss = new ParallelMultistart(pssParameters); IOptimizationAlgorithm optimizer = sa; ISolution bestSolution = solution; foreach (ISolution s in optimizer.Minimize(solution.Shuffle(0))) { //if (s.IsCurrentBest) Console.WriteLine("\t{0}, {1:f}s, {2}, {3}, {4}, {5}, {6}", s.CostValue, s.TimeInSeconds, s.IterationNumber, s.IsCurrentBest, s.IsFinal, bestSolution.CostValue - s.CostValue, s.InstanceTag); bestSolution = s; } Console.WriteLine(bestSolution.TimeInSeconds + "s"); Console.WriteLine(bestSolution.IterationNumber + " iterations"); //var groups = optimizer.SearchHistory.GroupBy(s => s.OperatorTag).Select(s => new { Operator = s.Key, Count = s.Count() }); //var dictionary = groups.ToDictionary(g => g.Operator, g => g.Count); //foreach (var o in groups) //{ // Console.WriteLine("{0} = {1}", o.Operator, o.Count); //} //Console.WriteLine("Done"); foreach (var b in DrawSolution(bestSolution, optimizer)) { b?.Save("solution" + DateTime.Now.Millisecond + ".jpg"); } Console.ReadLine(); }