mirror of
https://github.com/wassname/simpeg.git
synced 2026-07-09 14:32:41 +08:00
beta schedualing
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
|
||||
|
||||
class Cooling(object):
|
||||
"""Simple Beta Schedual"""
|
||||
|
||||
beta0 = 1.e6
|
||||
beta_coolingFactor = 5.
|
||||
|
||||
def getBeta(self):
|
||||
if self._beta is None:
|
||||
return beta0
|
||||
return self._beta * beta_coolingFactor
|
||||
@@ -1,8 +1,9 @@
|
||||
import numpy as np
|
||||
import scipy.sparse as sp
|
||||
from SimPEG.utils import sdiag, mkvc
|
||||
from SimPEG.inverse import BS
|
||||
|
||||
class Inversion(object):
|
||||
class Inversion(object, BetaSchedual.Cooling):
|
||||
"""docstring for Inversion"""
|
||||
|
||||
maxIter = 10
|
||||
@@ -42,6 +43,7 @@ class Inversion(object):
|
||||
def run(self, m0):
|
||||
m = m0
|
||||
self._iter = 0
|
||||
self._beta = None
|
||||
while True:
|
||||
self._beta = self.getBeta()
|
||||
m = self.opt.minimize(self.evalFunction,m)
|
||||
@@ -49,8 +51,13 @@ class Inversion(object):
|
||||
self._iter += 1
|
||||
return m
|
||||
|
||||
beta0 = 1.e6
|
||||
beta_coolingFactor = 5.
|
||||
|
||||
def getBeta(self):
|
||||
return 1e-2
|
||||
if self._beta is None:
|
||||
return beta0
|
||||
return self._beta * beta_coolingFactor
|
||||
|
||||
def stoppingCriteria(self):
|
||||
self._STOP = np.zeros(2,dtype=bool)
|
||||
@@ -191,3 +198,4 @@ class Inversion(object):
|
||||
dmisfit = self.prob.Jt(m, self.Wd * self.Wd * self.prob.J(m, v, u=u), u=u)
|
||||
|
||||
return dmisfit
|
||||
|
||||
|
||||
@@ -158,6 +158,7 @@ class GaussNewton(Minimize):
|
||||
class InexactGaussNewton(Minimize):
|
||||
name = 'InexactGaussNewton'
|
||||
def findSearchDirection(self):
|
||||
# TODO: use BFGS as a preconditioner or gauss sidel of the WtW or solve WtW directly
|
||||
p, info = sp.linalg.cg(self.H, -self.g, tol=1e-05, maxiter=5)
|
||||
return p
|
||||
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
from Optimize import *
|
||||
from Inversion import *
|
||||
import BetaSchedual
|
||||
|
||||
Reference in New Issue
Block a user