Exemplo n.º 1
0
        ///<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";
        }
Exemplo n.º 2
0
        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;
        }