From f6e8edc3597dab76af2c8f8f0ce8e26d7fd04d64 Mon Sep 17 00:00:00 2001 From: Joseph Capriotti Date: Tue, 29 Apr 2025 09:10:13 -0600 Subject: [PATCH 1/2] Fix beta cooling in IRLS (cherry picked from commit 16c8b361378617ac8135ae57156269999985baf4) --- simpeg/directives/_regularization.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/simpeg/directives/_regularization.py b/simpeg/directives/_regularization.py index fe4f44c9d3..f4ee5b1556 100644 --- a/simpeg/directives/_regularization.py +++ b/simpeg/directives/_regularization.py @@ -229,19 +229,20 @@ def adjust_cooling_schedule(self): """ Adjust the cooling schedule based on the misfit. """ - ratio = self.invProb.phi_d / self.misfit_from_chi_factor(self.chifact_target) + if self.metrics.start_irls_iter is not None: + ratio = self.invProb.phi_d / self.misfit_from_chi_factor( + self.chifact_target + ) + if np.abs(1.0 - ratio) > self.misfit_tolerance: - if ( - np.abs(1.0 - ratio) > self.misfit_tolerance - and self.metrics.start_irls_iter is not None - ): + if ratio > 1: + update_ratio = 1 / np.mean([0.75, 1 / ratio]) + else: + update_ratio = 1 / np.mean([2.0, 1 / ratio]) - if ratio > 1: - ratio = np.mean([2.0, ratio]) + self.cooling_factor = update_ratio else: - ratio = np.mean([0.75, ratio]) - - self.cooling_factor = ratio + self.cooling_factor = 1.0 def initialize(self): """ From e4f090eb8cf81695f6b64c3732f0bb86f3f88978 Mon Sep 17 00:00:00 2001 From: domfournier Date: Fri, 16 May 2025 15:06:41 -0700 Subject: [PATCH 2/2] Reduce indentation --- simpeg/directives/_regularization.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/simpeg/directives/_regularization.py b/simpeg/directives/_regularization.py index f4ee5b1556..3b921567ff 100644 --- a/simpeg/directives/_regularization.py +++ b/simpeg/directives/_regularization.py @@ -229,20 +229,20 @@ def adjust_cooling_schedule(self): """ Adjust the cooling schedule based on the misfit. """ - if self.metrics.start_irls_iter is not None: - ratio = self.invProb.phi_d / self.misfit_from_chi_factor( - self.chifact_target - ) - if np.abs(1.0 - ratio) > self.misfit_tolerance: + if self.metrics.start_irls_iter is None: + return - if ratio > 1: - update_ratio = 1 / np.mean([0.75, 1 / ratio]) - else: - update_ratio = 1 / np.mean([2.0, 1 / ratio]) + ratio = self.invProb.phi_d / self.misfit_from_chi_factor(self.chifact_target) + if np.abs(1.0 - ratio) > self.misfit_tolerance: - self.cooling_factor = update_ratio + if ratio > 1: + update_ratio = 1 / np.mean([0.75, 1 / ratio]) else: - self.cooling_factor = 1.0 + update_ratio = 1 / np.mean([2.0, 1 / ratio]) + + self.cooling_factor = update_ratio + else: + self.cooling_factor = 1.0 def initialize(self): """