From dbd24b71c1276cb590570fdb0ed567d4c28d4259 Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Sat, 26 Oct 2013 14:16:50 -0700 Subject: [PATCH] Added kwargs to the inversion. can use these to initiate your inversion object. --- SimPEG/forward/LinearProblem.py | 10 ++-------- SimPEG/inverse/Inversion.py | 20 ++++++++++++++------ SimPEG/inverse/Optimize.py | 6 +++--- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/SimPEG/forward/LinearProblem.py b/SimPEG/forward/LinearProblem.py index d8f3621e..2260f8db 100644 --- a/SimPEG/forward/LinearProblem.py +++ b/SimPEG/forward/LinearProblem.py @@ -59,12 +59,6 @@ class LinearProblem(Problem): def Jt(self, m, v, u=None): return G.T.dot(v) - def modelTransform(self, m): - return m - - def modelTransformDeriv(self, m): - return sp.eye(m.size) - prob = LinearProblem(M) prob.G = G prob.dobs = d_obs @@ -72,9 +66,9 @@ prob.std = np.ones_like(d_obs)*0.1 reg = Regularization(M) -opt = InexactGaussNewton(maxIter=10) +opt = InexactGaussNewton(maxIter=20) -inv = Inversion(prob,reg,opt) +inv = Inversion(prob,reg,opt,beta0=1e-4) m0 = np.zeros_like(m_true) diff --git a/SimPEG/inverse/Inversion.py b/SimPEG/inverse/Inversion.py index b30b666e..02a81daa 100644 --- a/SimPEG/inverse/Inversion.py +++ b/SimPEG/inverse/Inversion.py @@ -1,18 +1,26 @@ import numpy as np import scipy.sparse as sp from SimPEG.utils import sdiag, mkvc -from SimPEG.inverse import BS -class Inversion(object, BetaSchedual.Cooling): +class Inversion(object): """docstring for Inversion""" maxIter = 10 - def __init__(self, prob, reg, opt): + def __init__(self, prob, reg, opt, **kwargs): self.prob = prob self.reg = reg self.opt = opt self.opt.parent = self + self.setKwargs(**kwargs) + + def setKwargs(self, **kwargs): + # Set the variables, throw an error if they don't exist. + for attr in kwargs: + if hasattr(self, attr): + setattr(self, attr, kwargs[attr]) + else: + raise Exception('%s attr is not recognized' % attr) @property def Wd(self): @@ -51,13 +59,13 @@ class Inversion(object, BetaSchedual.Cooling): self._iter += 1 return m - beta0 = 1.e6 + beta0 = 1.e2 beta_coolingFactor = 5. def getBeta(self): if self._beta is None: - return beta0 - return self._beta * beta_coolingFactor + return self.beta0 + return self._beta * self.beta_coolingFactor def stoppingCriteria(self): self._STOP = np.zeros(2,dtype=bool) diff --git a/SimPEG/inverse/Optimize.py b/SimPEG/inverse/Optimize.py index ac0045c4..9e3b5463 100644 --- a/SimPEG/inverse/Optimize.py +++ b/SimPEG/inverse/Optimize.py @@ -19,9 +19,9 @@ class Minimize(object): maxIterLS = 10 LSreduction = 1e-4 LSshorten = 0.5 - tolF = 1e-4 - tolX = 1e-4 - tolG = 1e-4 + tolF = 1e-1 + tolX = 1e-1 + tolG = 1e-1 eps = 1e-5 printIter = [] # push to here if you want to print these on iter