From 0eac7ca1a921a25c2e51b179768ad35ce63d4cd1 Mon Sep 17 00:00:00 2001 From: hrntsm Date: Sun, 1 May 2022 22:52:08 +0900 Subject: [PATCH 1/2] Add grid sampler --- Tunny/Solver/OptunaAlgorithm.cs | 23 ++++++++++++++++++++++- Tunny/UI/OptimizationWindow.Designer.cs | 3 ++- Tunny/UI/OptimizationWindow.cs | 10 ++++++++-- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/Tunny/Solver/OptunaAlgorithm.cs b/Tunny/Solver/OptunaAlgorithm.cs index f4a2e461..842ed39c 100644 --- a/Tunny/Solver/OptunaAlgorithm.cs +++ b/Tunny/Solver/OptunaAlgorithm.cs @@ -64,6 +64,20 @@ public void Solve() case "NSGA-II": sampler = optuna.samplers.NSGAIISampler(); break; + case "Grid": + var searchSpace = new Dictionary>(); + for (int i = 0; i < n; i++) + { + var numSpace = new List(); + for (int j = 0; j < nTrials; j++) + { + numSpace.Add(Lb[i] + (Ub[i] - Lb[i]) * j / (nTrials - 1)); + } + searchSpace.Add(VarNickName[i], numSpace); + } + nTrials = (int)Math.Pow(nTrials, n); + sampler = optuna.samplers.GridSampler(searchSpace); + break; default: sampler = optuna.samplers.TPESampler(); break; @@ -116,7 +130,14 @@ public void Solve() } } trial.set_user_attr("geometry", result.ModelDraco); - study.tell(trial, result.ObjectiveValues.ToArray()); + try + { + study.tell(trial, result.ObjectiveValues.ToArray()); + } + catch + { + break; + } } if (nObjective == 1) diff --git a/Tunny/UI/OptimizationWindow.Designer.cs b/Tunny/UI/OptimizationWindow.Designer.cs index 6d4776d1..86523355 100644 --- a/Tunny/UI/OptimizationWindow.Designer.cs +++ b/Tunny/UI/OptimizationWindow.Designer.cs @@ -141,7 +141,8 @@ private void InitializeComponent() "TPE", "NSGA-II", "CMA-ES", - "Random"}); + "Random", + "Grid"}); this.samplerComboBox.Location = new System.Drawing.Point(99, 8); this.samplerComboBox.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.samplerComboBox.Name = "samplerComboBox"; diff --git a/Tunny/UI/OptimizationWindow.cs b/Tunny/UI/OptimizationWindow.cs index b9b79469..305a84e6 100644 --- a/Tunny/UI/OptimizationWindow.cs +++ b/Tunny/UI/OptimizationWindow.cs @@ -168,9 +168,15 @@ private void OptimizeRunButton_Click(object sender, EventArgs e) optimizeRunButton.Enabled = true; return; } - else if (objectiveValues.Count > 1 && (samplerComboBox.Text == "CMA-ES" || samplerComboBox.Text == "Random")) + else if (objectiveValues.Count > 1 + && (samplerComboBox.Text == "CMA-ES" || samplerComboBox.Text == "Random" || samplerComboBox.Text == "Grid")) { - MessageBox.Show("This sampler does not support multiple objectives optimization.", "Tunny", MessageBoxButtons.OK, MessageBoxIcon.Error); + TunnyMessageBox.Show( + "CMA-ES, Random and Grid samplers only support single objective optimization.", + "Tunny", + MessageBoxButtons.OK, + MessageBoxIcon.Error + ); ghCanvas.EnableUI(); optimizeRunButton.Enabled = true; return; From 28b909e6ed20177ba99563c4be7d99362cfad739 Mon Sep 17 00:00:00 2001 From: hrntsm Date: Sun, 1 May 2022 22:54:08 +0900 Subject: [PATCH 2/2] Update CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c9aa062..5e705048 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,9 +12,10 @@ Please see [here](https://github.com/hrntsm/Tunny/releases) for the data release - Restore progressbar - Support Galapagos genepool input -- Reflect button +- Result reflect button - This feature reflecting multi objective optimization result to slider & genepool to use input model number. - if input multi model number, the first one is reflect and popup notification about this. +- Support grid sampler ### Changed