SimPEG.objective_function.ComboObjectiveFunction#
- class SimPEG.objective_function.ComboObjectiveFunction(objfcts=None, multipliers=None, unpack_on_add=True)[source]#
Bases:
BaseObjectiveFunction
Composite for multiple objective functions
A composite class for multiple objective functions. Each objective function is accompanied by a multiplier. Both objective functions and multipliers are stored in a list.
- Parameters:
- objfcts
list
orNone
,optional
List containing the objective functions that will live inside the composite class. If
None
, an empty list will be created.- multipliers
list
orNone
,optional
List containing the multipliers for its respective objective function in
objfcts
. IfNone
, a list full of ones with the same length asobjfcts
will be created.- unpack_on_addbool,
optional
Weather to unpack the multiple objective functions when adding them to another objective function, or to add them as a whole.
- objfcts
Examples
Build a simple combo objective function:
>>> objective_fun_a = L2ObjectiveFunction(nP=3) >>> objective_fun_b = L2ObjectiveFunction(nP=3) >>> combo = ComboObjectiveFunction([objective_fun_a, objective_fun_b], [1, 0.5]) >>> print(len(combo)) 2 >>> print(combo.multipliers) [1, 0.5]
Combo objective functions are also created after adding two objective functions:
>>> combo = 2 * objective_fun_a + 3.5 * objective_fun_b >>> print(len(combo)) 2 >>> print(combo.multipliers) [2, 3.5]
We could add two combo objective functions as well:
>>> objective_fun_c = L2ObjectiveFunction(nP=3) >>> objective_fun_d = L2ObjectiveFunction(nP=3) >>> combo_1 = 4.3 * objective_fun_a + 3 * objective_fun_b >>> combo_2 = 1.5 * objective_fun_c + 0.5 * objective_fun_d >>> combo = combo_1 + combo_2 >>> print(len(combo)) 4 >>> print(combo.multipliers) [4.3, 3, 1.5, 0.5]
We can choose to not unpack the objective functions when creating the combo. For example:
>>> objective_fun_a = L2ObjectiveFunction(nP=3) >>> objective_fun_b = L2ObjectiveFunction(nP=3) >>> objective_fun_c = L2ObjectiveFunction(nP=3) >>> >>> # Create a ComboObjectiveFunction that won't unpack >>> combo_1 = ComboObjectiveFunction( ... objfcts=[objective_fun_a, objective_fun_b], ... multipliers=[0.1, 1.2], ... unpack_on_add=False, ... ) >>> combo_2 = combo_1 + objective_fun_c >>> print(len(combo_2)) 2
Attributes
W matrix for the full objective function.
Multipliers for each objective function
Methods
__call__
(m[, f])Evaluate the objective functions for a given model
deriv
(m[, f])First derivative of the composite objective function is the sum of the derivatives of each objective function in the list, weighted by their respective multplier.
deriv2
(m[, v, f])Second derivative of the composite objective function is the sum of the second derivatives of each objective function in the list, weighted by their respective multplier.
get_functions_of_type
(fun_class)Find an objective function type from a ComboObjectiveFunction class.
Galleries and Tutorials using SimPEG.objective_function.ComboObjectiveFunction
#

Petrophysically guided inversion (PGI): Linear example

Petrophysically guided inversion: Joint linear example with nonlinear relationships

Heagy et al., 2017 1D RESOLVE and SkyTEM Bookpurnong Inversions

Heagy et al., 2017 1D RESOLVE Bookpurnong Inversion

1D Inversion of Time-Domain Data for a Single Sounding

Sparse Inversion with Iteratively Re-Weighted Least-Squares

Sparse Norm Inversion for Total Magnetic Intensity Data on a Tensor Mesh

2.5D DC Resistivity and IP Least-Squares Inversion

Joint PGI of Gravity + Magnetic on an Octree mesh using full petrophysical information

Joint PGI of Gravity + Magnetic on an Octree mesh without petrophysical information

Sparse Norm Inversion of 2D Seismic Tomography Data

Cross-gradient Joint Inversion of Gravity and Magnetic Anomaly Data