private void SetFitnessFunction(FitnessFunctionDelegate argDelegate) { //uncheck miXXplusYY.IsChecked = false; miTripod.IsChecked = false; miAlpine.IsChecked = false; miGriewank.IsChecked = false; miRosenbrock.IsChecked = false; //set ffd = argDelegate; //preview cvPage.Children.Clear(); if (Preview) { Optimizer = new PreviewDisplayer { LowerParamBounds = new ArrayList { -100, -100 }, UpperParamBounds = new ArrayList { 100, 100 }, FitnessFunction = ffd }; Optimizer.GenerationCreated += this.ShowAntibodies; Optimizer.Optimize(); } }
public RoutingTest(IOptimizationMethod optimizer, RouteTable routeTable, Canvas cvPage, TextBox textBox) { this.optimizer = optimizer; this.fullTable = routeTable; this.cvPage = cvPage; this.tbResults = textBox; this.pathLines = new ArrayList(); this.cars = new List <Car>(); int pointsCount = routeTable.Points.Count;//Összes pont száma int pathPmax = 1; for (int i = 0; i < 9; i++) { int pointC = RNG.Next(pointsCount) + 1;//Aktuális utvonal pontjainak a száma while (pointC <= 3) { pointC = RNG.Next(pointsCount) + 1; } if (pointC > pathPmax) { pathPmax = pointC; } ArrayList path = new ArrayList(); for (int j = 1; j < pointC; j++) { int rnd = RNG.Next(pointsCount); while (path.Contains(rnd) || rnd == 0) { rnd = RNG.Next(pointsCount); } path.Add(rnd); } pathLines.Add(path); } for (int i = 0; i < 5; i++) { this.cars.Add(new Car() { index = i + 1, MaxPathPoint = (int)((RNG.Next(pathPmax) + 1) * 3), CurrentDailyPath = 0, MaxDailyPath = (RNG.Next(pathPmax) + 1) * 2, MaxPathDistance = (RNG.Next(pathPmax) + 1) * 150 }); Car car = this.cars[cars.Count - 1]; car.MaxPathDistanceRes = car.MaxPathDistance; } }
private void OptMethod(int id) { switch (id) { case 0: //Firework Optimizer = new Firework { // Number of particles in the swarm. NumberOfElements = NA, m = m, ymax = double.MaxValue, a = a, b = b, Amax = Amax, mhat = mhat, StoppingType = stoppingType, // Number of generations. StoppingNumberOfGenerations = ng, // Number of allowed affinity evaluations. StoppingNumberOfEvaluations = nev, // Affinity treshold. StoppingFitnessTreshold = Ftr, Slow = false }; break; case 1: //Particle Swarm Optimizer = new ParticleSwarm { // Number of particles in the swarm. NumberOfElements = NA, // Number of generations. StoppingNumberOfGenerations = ng, c0 = c0, // Multiplication factor for the distance to the personal best position. cp = cp, // Multiplication factor for the distance to the global best position. cg = cg, // Number of allowed fitness evaluations. StoppingNumberOfEvaluations = nev, // Fitness treshold. StoppingFitnessTreshold = Ftr, StoppingType = stoppingType, Slow = false }; break; case 2: //Clonal generation Optimizer = new ClonalGeneration { // Size of the antibody pool. NumberOfElements = NA, // Number of antibodies selected for cloning. NumberSelectedForCloning = cgn, // Parameter determining the number of clones created for an antibody that was selected for cloning. (0,1] Beta = beta, // Number of antibodies created with random parameters in each new generation. RandomAntibodiesPerGeneration = d, // Mutation coefficient (0,1]. Ro = ro, // Stopping criteria. StoppingType = stoppingType, // Number of generations. StoppingNumberOfGenerations = ng, // Number of allowed affinity evaluations. StoppingNumberOfEvaluations = nev, // Affinity treshold. StoppingFitnessTreshold = Ftr, Slow = false }; break; case 3: Optimizer = new GeneticAlgorithm { // Size of the individual pool. NumberOfElements = NA, // Number of parents in each generation. ParentsInEachGeneration = P, // The probability of mutation. MutationProbability = pm, // The number of crossovers in each generation. CrossoverPerGeneration = crossoverCount, // Number of allowed fitness evaluations. StoppingNumberOfEvaluations = nev, // Fitness treshold. StoppingFitnessTreshold = Ftr, // Number of generations. StoppingNumberOfGenerations = ng, // Stopping criteria. StoppingType = stoppingType, Slow = false }; break; case 4: //Clonal generation local Optimizer = new ClonalGenerationLocal { LowerParamBounds = new ArrayList { -100.0 }, UpperParamBounds = new ArrayList { 100.0 }, // Size of the antibody pool. NumberOfElements = NA, // Number of antibodies selected for cloning. NumberSelectedForCloning = cgn, // Parameter determining the number of clones created for an antibody that was selected for cloning. (0,1] Beta = beta, // Number of antibodies created with random parameters in each new generation. RandomAntibodiesPerGeneration = d, // Mutation coefficient (0,1]. Ro = ro, // RelativeStepSize StepSizeRelative = cglssr, // Local search/get LocalSearchesPerGeneration = cgln, // Stopping criteria. StoppingType = stoppingType, // Number of generations. StoppingNumberOfGenerations = ng, // Number of allowed affinity evaluations. StoppingNumberOfEvaluations = nev, // Affinity treshold. StoppingFitnessTreshold = Ftr, Slow = false }; break; case 5: Optimizer = new CoordinateDescent { NumberOfElements = NA, StepSizeRelative = 0.6, // Number of allowed fitness evaluations. StoppingNumberOfEvaluations = nev, // Fitness treshold. StoppingFitnessTreshold = Ftr, // Number of generations. StoppingNumberOfGenerations = ng, // Stopping criteria. StoppingType = stoppingType, Slow = false }; break; case 6: Optimizer = new ArtificialBeeColony { NumberOfElements = NA, //Felderitő méhek maximális keresési számas egy ciklus alatt MaxStep = MaxStep, //Felderítő méhek száma ExBeeCount = ExBeeCount, // Number of allowed fitness evaluations. StoppingNumberOfEvaluations = nev, // Fitness treshold. StoppingFitnessTreshold = Ftr, // Number of generations. StoppingNumberOfGenerations = ng, // Stopping criteria. StoppingType = stoppingType, Slow = false }; break; case 7: Optimizer = new BacterialForaging { // Size of the antibody pool. NumberOfElements = NA, ClonesCount = ClonesCount, Infections = Infections, // Number of allowed fitness evaluations. StoppingNumberOfEvaluations = nev, // Fitness treshold. StoppingFitnessTreshold = Ftr, // Number of generations. StoppingNumberOfGenerations = ng, // Stopping criteria. StoppingType = stoppingType, Slow = false }; break; case 8: Optimizer = new DifferentialEvolution() { weighf = weighf, crossf = crossf, NumberOfElements = NA, // Number of allowed fitness evaluations. StoppingNumberOfEvaluations = nev, // Fitness treshold. StoppingFitnessTreshold = Ftr, // Number of generations. StoppingNumberOfGenerations = ng, // Stopping criteria. StoppingType = stoppingType, Slow = false }; break; case 9: Optimizer = new SelfOrgMigrating { NumberOfElements = NA, PRT = 0.6, PathLength = 10, PopSize = 7, Step = 0.6, Type = SelfOrgMigratingType.AllToAll, // Number of allowed fitness evaluations. StoppingNumberOfEvaluations = nev, // Fitness treshold. StoppingFitnessTreshold = Ftr, // Number of generations. StoppingNumberOfGenerations = ng, // Stopping criteria. StoppingType = stoppingType, Slow = false }; break; case 10: Optimizer = new HaromonySearch { NumberOfElements = NA, consid_rate = consid_rate, adjust_rate = adjust_rate, range = range, // Number of allowed fitness evaluations. StoppingNumberOfEvaluations = nev, // Fitness treshold. StoppingFitnessTreshold = Ftr, // Number of generations. StoppingNumberOfGenerations = ng, // Stopping criteria. StoppingType = stoppingType, Slow = false }; break; case 11: Optimizer = new NelderMead { NumberOfElements = NA, // Number of allowed fitness evaluations. StoppingNumberOfEvaluations = nev, // Fitness treshold. StoppingFitnessTreshold = Ftr, // Number of generations. StoppingNumberOfGenerations = ng, // Stopping criteria. StoppingType = stoppingType, Slow = false }; break; } }
private async void OptimizeButton_Click(object sender, RoutedEventArgs e) { /*if (fuzzySystem.Type == FuzzyType.Sugeno && CheckOutput.IsChecked == true) * { * MessageBox.Show("Output optimization is not valid for Sugeno-type fuzzy systems.", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning); * return; * }*/ // Disable the optimize button and the optimization parameters OptimizeButton.IsEnabled = false; UseButton.IsEnabled = false; RadioBaseRatio.IsEnabled = false; RadioRefPoint.IsEnabled = false; CheckInput.IsEnabled = false; CheckOutput.IsEnabled = false; // Initialize variables ArrayList initParams = new ArrayList(); ArrayList lbp = new ArrayList(); ArrayList ubp = new ArrayList(); // Set up initial parameters if (CheckInput.IsChecked == true) { foreach (InputOutput input in fuzzySystem.Inputs) { foreach (MembershipFunction MF in input.MFs) { if (RadioRefPoint.IsChecked == true) { initParams.Add((double)(MF.GetReferencePoint())); lbp.Add((double)(input.Range[0])); ubp.Add((double)(input.Range[1])); } if (RadioBaseRatio.IsChecked == true) { initParams.Add((double)(MF.GetTrapBaseRatio())); lbp.Add(0.0); ubp.Add(0.95); } } } } if (CheckOutput.IsChecked == true) { foreach (InputOutput output in fuzzySystem.Outputs) { foreach (MembershipFunction MF in output.MFs) { if (RadioRefPoint.IsChecked == true) { initParams.Add((double)(MF.GetReferencePoint())); lbp.Add((double)(output.Range[0])); ubp.Add((double)(output.Range[1])); } if (RadioBaseRatio.IsChecked == true) { initParams.Add((double)(MF.GetTrapBaseRatio())); lbp.Add(0.0); ubp.Add(0.95); } } } } bool[] ints = new bool[initParams.Count]; // Set up the optimizer object depending on the settings switch (MethodId) { case 0: //Firework Optimizer = new Firework { // Number of particles in the swarm. NumberOfElements = NA, m = m, ymax = double.MaxValue, a = a, b = b, Amax = Amax, mhat = mhat, Slow = false }; break; case 1: //Particle Swarm Optimizer = new ParticleSwarm { // Number of particles in the swarm. NumberOfElements = NA, c0 = c0, // Multiplication factor for the distance to the personal best position. cp = cp, // Multiplication factor for the distance to the global best position. cg = cg, Slow = false }; break; case 2: //Clonal generation if (cgn > NA) { MessageBox.Show("Number of antibodies selected for cloning at the end of each generation greater than the number of antibodies.", "ERROR", MessageBoxButton.OK); OptimizeButton.IsEnabled = true; return; } Optimizer = new ClonalGeneration { // Size of the antibody pool. NumberOfElements = NA, // Number of antibodies selected for cloning. NumberSelectedForCloning = cgn, // Parameter determining the number of clones created for an antibody that was selected for cloning. (0,1] Beta = beta, // Number of antibodies created with random parameters in each new generation. RandomAntibodiesPerGeneration = d, // Mutation coefficient (0,1]. Ro = ro, Slow = false }; break; case 3: Optimizer = new GeneticAlgorithm { // Size of the individual pool. NumberOfElements = NA, // Number of parents in each generation. ParentsInEachGeneration = P, // The probability of mutation. MutationProbability = pm, // The number of crossovers in each generation. CrossoverPerGeneration = crossoverCount, Slow = false }; break; case 4: //Clonal generation if (cgn > NA) { MessageBox.Show("Number of antibodies selected for cloning at the end of each generation greater than the number of antibodies.", "ERROR", MessageBoxButton.OK); OptimizeButton.IsEnabled = true; return; } Optimizer = new ClonalGenerationLocal { // Size of the antibody pool. NumberOfElements = NA, // Number of antibodies selected for cloning. NumberSelectedForCloning = cgn, // Parameter determining the number of clones created for an antibody that was selected for cloning. (0,1] Beta = beta, // Number of antibodies created with random parameters in each new generation. RandomAntibodiesPerGeneration = d, // Mutation coefficient (0,1]. Ro = ro, // Local searches per generation LocalSearchesPerGeneration = cgln, Slow = false }; break; } // Set common parameters Optimizer.InitialParameters = initParams; Optimizer.LowerParamBounds = lbp; Optimizer.UpperParamBounds = ubp; // Bounds are required before setting this value if (MethodId == 4) { ((ClonalGenerationLocal)Optimizer).StepSizeRelative = cglssr; } Optimizer.Integer = ints; Optimizer.FitnessFunction = FitnessFunctionMSE; Optimizer.StoppingNumberOfGenerations = StopGenerationNumber; Optimizer.StoppingNumberOfEvaluations = StopAffinityEvaluation; Optimizer.StoppingFitnessTreshold = StopFitnessTreshold; Optimizer.StoppingType = StopType; // Output string string outstr = "Initial parameters: " + List(initParams) + "\r\n"; // Open progress window and begin the optimization ProgressWindow = new OptimizationProgressWindow(); ProgressWindow.OptWindow = this; ProgressWindow.Show(); if (IoputMfWindows != null) { foreach (MFsPreviewWindow window in IoputMfWindows) { window.Close(); } } IoputMfWindows = new List <MFsPreviewWindow>(); foreach (InputOutput input in fuzzySystem.Inputs) { IoputMfWindows.Add(new MFsPreviewWindow(input)); IoputMfWindows[IoputMfWindows.Count - 1].Show(); } foreach (InputOutput output in fuzzySystem.Outputs) { IoputMfWindows.Add(new MFsPreviewWindow(output)); IoputMfWindows[IoputMfWindows.Count - 1].Show(); } Optimizer.GenerationCreated += OnNewGeneration; // <DELAYER> /*var z = Task.Run(() => (delayer())); * int y = await z;*/ // </DELAYER> var x = Task.Run(() => (Optimizer.Optimize())); var Results = await x; ProgressWindow.Close(); // Add results to output string outstr += "Initial MSE: " + Results.InfoList[InfoTypes.InitialFitness] + "\r\n" + "Final parameters: " + List(Results.OptimizedParameters) + "\r\n" + "Final MSE: " + $"{Results.InfoList[InfoTypes.FinalFitness],10:F6}" + "\r\n" + "Number of generations: " + Results.InfoList[InfoTypes.Generations] + "\r\n" + "Number of fitness evaluations: " + Results.InfoList[InfoTypes.Evaluations] + "\r\n" + "Best affinities in each generation: " + List((ArrayList)Results.InfoList[InfoTypes.Affinities]) + "\r\n" + "Optimization time in milliseconds: " + Results.InfoList[InfoTypes.ExecutionTime]; fuzzySystem = GetModifiedFuzzySystem(Results.OptimizedParameters); FuzzyBox.Text = fuzzySystem.ToString(); // Display results and reenable the optimize button MessageBox.Show(outstr, "Optimization finished", MessageBoxButton.OK); OptimizeButton.IsEnabled = true; UseButton.IsEnabled = true; RadioBaseRatio.IsEnabled = true; RadioRefPoint.IsEnabled = true; CheckInput.IsEnabled = true; CheckOutput.IsEnabled = true; }
private void OptMethod(int id) { switch (id) { case 0: //Firework Optimizer = new Firework { InitialParameters = InitialParameters, LowerParamBounds = LowerParamBounds, UpperParamBounds = UpperParamBounds, Integer = Integer, FitnessFunction = FitnessFunction, // Number of particles in the swarm. NumberOfElements = NumberOfElements, m = m, ymax = double.MaxValue, a = a, b = b, Amax = Amax, mhat = NumberOfElements, StoppingType = StoppingType, // Number of generations. StoppingNumberOfGenerations = StoppingNumberOfGenerations, // Number of allowed affinity evaluations. StoppingNumberOfEvaluations = StoppingNumberOfEvaluations, // Affinity treshold. StoppingFitnessTreshold = StoppingFitnessTreshold, Slow = Slow }; break; case 1: //Particle Swarm Optimizer = new ParticleSwarm { InitialParameters = InitialParameters, LowerParamBounds = LowerParamBounds, UpperParamBounds = UpperParamBounds, Integer = Integer, FitnessFunction = FitnessFunction, // Number of particles in the swarm. NumberOfElements = NumberOfElements, // Number of generations. StoppingNumberOfGenerations = StoppingNumberOfGenerations, c0 = c0, // Multiplication factor for the distance to the personal best position. cp = cp, // Multiplication factor for the distance to the global best position. cg = cg, // Number of allowed fitness evaluations. StoppingNumberOfEvaluations = StoppingNumberOfEvaluations, // Fitness treshold. StoppingFitnessTreshold = StoppingFitnessTreshold, StoppingType = StoppingType, Slow = Slow }; break; case 2: //Clonal generation Optimizer = new ClonalGeneration { InitialParameters = InitialParameters, LowerParamBounds = LowerParamBounds, UpperParamBounds = UpperParamBounds, Integer = Integer, FitnessFunction = FitnessFunction, // Size of the antibody pool. NumberOfElements = NumberOfElements, // Number of antibodies selected for cloning. NumberSelectedForCloning = NumberOfElements / 3, // Parameter determining the number of clones created for an antibody that was selected for cloning. (0,1] Beta = beta, // Number of antibodies created with random parameters in each new generation. RandomAntibodiesPerGeneration = NumberOfElements / 5, // Mutation coefficient (0,1]. Ro = ro, // Stopping criteria. StoppingType = StoppingType, // Number of generations. StoppingNumberOfGenerations = StoppingNumberOfGenerations, // Number of allowed affinity evaluations. StoppingNumberOfEvaluations = StoppingNumberOfEvaluations, // Affinity treshold. StoppingFitnessTreshold = StoppingFitnessTreshold, Slow = Slow }; break; case 3: Optimizer = new GeneticAlgorithm { InitialParameters = InitialParameters, LowerParamBounds = LowerParamBounds, UpperParamBounds = UpperParamBounds, Integer = Integer, FitnessFunction = FitnessFunction, // Size of the individual pool. NumberOfElements = NumberOfElements, // Number of parents in each generation. ParentsInEachGeneration = NumberOfElements / 2, // The probability of mutation. MutationProbability = pm, // The number of crossovers in each generation. CrossoverPerGeneration = NumberOfElements, // Number of allowed fitness evaluations. StoppingNumberOfEvaluations = StoppingNumberOfEvaluations, // Fitness treshold. StoppingFitnessTreshold = StoppingFitnessTreshold, // Number of generations. StoppingNumberOfGenerations = StoppingNumberOfGenerations, // Stopping criteria. StoppingType = StoppingType, Slow = Slow }; break; case 4: //Clonal generation local Optimizer = new ClonalGenerationLocal { InitialParameters = InitialParameters, LowerParamBounds = LowerParamBounds, UpperParamBounds = UpperParamBounds, Integer = Integer, FitnessFunction = FitnessFunction, // Size of the antibody pool. NumberOfElements = NumberOfElements, // Number of antibodies selected for cloning. NumberSelectedForCloning = NumberOfElements / 3, // Parameter determining the number of clones created for an antibody that was selected for cloning. (0,1] Beta = beta, // Number of antibodies created with random parameters in each new generation. RandomAntibodiesPerGeneration = d, // Mutation coefficient (0,1]. Ro = ro, // RelativeStepSize StepSizeRelative = cglssr, // Local search/get LocalSearchesPerGeneration = cgln, // Stopping criteria. StoppingType = StoppingType, // Number of generations. StoppingNumberOfGenerations = StoppingNumberOfGenerations, // Number of allowed affinity evaluations. StoppingNumberOfEvaluations = StoppingNumberOfEvaluations, // Affinity treshold. StoppingFitnessTreshold = StoppingFitnessTreshold, Slow = Slow }; break; case 5: Optimizer = new CoordinateDescent { InitialParameters = InitialParameters, LowerParamBounds = LowerParamBounds, UpperParamBounds = UpperParamBounds, // Size of the antibody pool. NumberOfElements = NumberOfElements, StepSizeRelative = 5, Integer = Integer, FitnessFunction = FitnessFunction, // Number of allowed fitness evaluations. StoppingNumberOfEvaluations = StoppingNumberOfEvaluations, // Fitness treshold. StoppingFitnessTreshold = StoppingFitnessTreshold, // Number of generations. StoppingNumberOfGenerations = StoppingNumberOfGenerations, // Stopping criteria. StoppingType = StoppingType, Slow = Slow }; break; case 6: Optimizer = new ArtificialBeeColony { InitialParameters = InitialParameters, LowerParamBounds = LowerParamBounds, UpperParamBounds = UpperParamBounds, Integer = Integer, FitnessFunction = FitnessFunction, // Size of the antibody pool. NumberOfElements = NumberOfElements, //Felderitő méhek maximális keressi számas ciklus alatt MaxStep = MaxStep, //Felderítő méhek száma ExBeeCount = Elite, // Number of allowed fitness evaluations. StoppingNumberOfEvaluations = StoppingNumberOfEvaluations, // Fitness treshold. StoppingFitnessTreshold = StoppingFitnessTreshold, // Number of generations. StoppingNumberOfGenerations = StoppingNumberOfGenerations, // Stopping criteria. StoppingType = StoppingType, Slow = Slow }; break; case 7: Optimizer = new BacterialForaging { InitialParameters = InitialParameters, LowerParamBounds = LowerParamBounds, UpperParamBounds = UpperParamBounds, Integer = Integer, // Size of the antibody pool. NumberOfElements = NumberOfElements, ClonesCount = ClonesCount, Infections = Infections, FitnessFunction = FitnessFunction, // Number of allowed fitness evaluations. StoppingNumberOfEvaluations = StoppingNumberOfEvaluations, // Fitness treshold. StoppingFitnessTreshold = StoppingFitnessTreshold, // Number of generations. StoppingNumberOfGenerations = StoppingNumberOfGenerations, // Stopping criteria. StoppingType = StoppingType, Slow = Slow }; break; case 8: Optimizer = new DifferentialEvolution { InitialParameters = InitialParameters, LowerParamBounds = LowerParamBounds, UpperParamBounds = UpperParamBounds, Integer = Integer, weighf = weighf, crossf = crossf, // Size of the antibody pool. NumberOfElements = NumberOfElements, FitnessFunction = FitnessFunction, // Number of allowed fitness evaluations. StoppingNumberOfEvaluations = StoppingNumberOfEvaluations, // Fitness treshold. StoppingFitnessTreshold = StoppingFitnessTreshold, // Number of generations. StoppingNumberOfGenerations = StoppingNumberOfGenerations, // Stopping criteria. StoppingType = StoppingType, Slow = Slow }; break; case 9: Optimizer = new SelfOrgMigrating { InitialParameters = InitialParameters, LowerParamBounds = LowerParamBounds, UpperParamBounds = UpperParamBounds, Integer = Integer, NumberOfElements = NumberOfElements, PRT = 0.1, PathLength = 3, PopSize = 7, Step = 0.11, Type = SelfOrgMigratingType.AllToRand, FitnessFunction = FitnessFunction, // Number of allowed fitness evaluations. StoppingNumberOfEvaluations = StoppingNumberOfEvaluations, // Fitness treshold. StoppingFitnessTreshold = StoppingFitnessTreshold, // Number of generations. StoppingNumberOfGenerations = StoppingNumberOfGenerations, // Stopping criteria. StoppingType = StoppingType, Slow = Slow }; break; } }