///<summary> ///Start the optimization ///</summary> ///<param name="sender"></param> ///<param name="e"></param> private void button3_Click(object sender, EventArgs e) { currentOpti = (OptimizationItem)optimizationItemsBindingSource1.Current; currentOpti.ResultBook.Clear(); MainForm.This.WorkerControl.StartOpti(OptiMode.NormalOpti, currentOpti.Name); this.button3.Enabled = false; this.button4.Enabled = true; label5.Text = "Results"; }
public OptimizationProblem(OptimizationItem inOptimizationItem) { varietiesNonVariety = new Dictionary <string, string>(); OptimizationParameters = inOptimizationItem; ObservationsValue = OptimizationParameters.ObservationItem; fitnessFunctions = new FitnessFunctions(Opt_RunItem, (Opt_Mode == OptimizationMode.SingleRun), this.Opt_Parameters, this.Opt_Observations, ObservationsValue); string mode = ""; switch (OptimizationParameters.SelectedObjFct) { case 0: fitnessFunctions.mode = FitnessMode.RMSE; mode = " RMSE"; break; case 1: fitnessFunctions.mode = FitnessMode.MRE; mode = " MRE"; break; case 2: fitnessFunctions.mode = FitnessMode.RMSRE; mode = " RMSRE"; break; default: throw new NotImplementedException(); } // Selection of the algorithm switch (OptimizationParameters.SelectedAlglo) { case 0: algorithm = new CMAES.CMAESMain(this); break; case 1: algorithm = new NelderMeadSimplex.NelderMeadSimplex(this); break; default: throw new NotImplementedException(); } // Mise en forme Book résultat this.OptimizationParameters.ResultBook.Clear(); PageData resultPage = new PageData(); resultPage.NewLine().Add("Algorithm : ").Add(algorithm.Name()).Add("Based on observations : "); foreach (string obs in Opt_Observations.Select(ii => ii.Name).ToList()) { resultPage[0].Add(obs); } resultPage.NewLine().AddNull(); resultPage.NewLine().Add("Variety").Add("Round").Add("Generation").Add("Fitness"); foreach (OptiParameter param in Opt_Parameters) { resultPage[2].Add(param.Name); } //create the list of variety names and their non variety (sub species) varietyNames = new List <string>(); if ((Opt_Mode == OptimizationMode.SingleRun)) { varietyNames.Add(Opt_RunItem.Normal.VarietyItem); varietiesNonVariety.Add(Opt_RunItem.Normal.VarietyItem, Opt_RunItem.Normal.ParameterItem); } else { foreach (var item in Opt_RunItem.MultiRuns) { if (!varietyNames.Contains(item.VarietyItem)) { varietyNames.Add(item.VarietyItem); varietiesNonVariety.Add(item.VarietyItem, item.ParameterItem); } } } //create the list of management names managementNames = new List <string>(); if ((Opt_Mode == OptimizationMode.SingleRun)) { managementNames.Add(Opt_RunItem.Normal.ManagementItem); } else { foreach (var item in Opt_RunItem.MultiRuns) { if (!managementNames.Contains(item.ManagementItem)) { managementNames.Add(item.ManagementItem); } } } //create the list of soil names soilNames = new List <string>(); if ((Opt_Mode == OptimizationMode.SingleRun)) { soilNames.Add(Opt_RunItem.Normal.SoilItem); } else { foreach (var item in Opt_RunItem.MultiRuns) { if (!soilNames.Contains(item.SoilItem)) { soilNames.Add(item.SoilItem); } } } //Debug //allSubModelNames = varietyNames.Concat(managementNames).Concat(soilNames).ToList(); if (fitnessFunctions.optimizeNonVarietalParameter == true && fitnessFunctions.optimizeVarietalParameter == false) { allSubModelNames = varietiesNonVariety.Values.Concat(managementNames).Concat(soilNames).ToList(); } else { allSubModelNames = varietyNames.Concat(managementNames).Concat(soilNames).ToList(); } //Debug foreach (string obs in Opt_Observations.Select(ii => ii.Name).ToList()) { resultPage[2].Add(obs + mode); resultPage[2].Add(obs + " Absolute Max Error"); } this.OptimizationParameters.ResultBook.Add(resultPage); lineNb = 0; roundNb = 0; }