sporco.admm.admm¶
Base classes for ADMM algorithms
Classes
|
Base class for Alternating Direction Method of Multipliers (ADMM) algorithms [9]. |
|
Base class for ADMM algorithms with a simple equality constraint. |
|
Base class for ADMM algorithms for problems for which \(g(\mathbf{y}) = g_0(\mathbf{y}_0) + g_1(\mathbf{y}_1)\) with \(\mathbf{y}^T = (\mathbf{y}_0^T \; \mathbf{y}_1^T)\). |
|
Base class for ADMM algorithms with a global variable consensus structure (see Ch. |
|
Base class for ADMM algorithms with a global variable consensus structure (see Ch. |
Class Descriptions¶
- class sporco.admm.admm.ADMM(*args, **kwargs)[source]¶
Bases:
sporco.common.IterativeSolver
Base class for Alternating Direction Method of Multipliers (ADMM) algorithms [9].
Solve an optimisation problem of the form
\[\mathrm{argmin}_{\mathbf{x},\mathbf{y}} \; f(\mathbf{x}) + g(\mathbf{y}) \;\mathrm{such\;that}\; A\mathbf{x} + B\mathbf{y} = \mathbf{c} \;\;.\]This class is intended to be a base class of other classes that specialise to specific optimisation problems.
After termination of the
solve
method, attributeitstat
is a list of tuples representing statistics of each iteration. The default fields of the named tupleIterationStats
are:
Iter
: Iteration number
ObjFun
: Objective function value
FVal
: Value of objective function component \(f\)
GVal
: Value of objective function component \(g\)
PrimalRsdl
: Norm of primal residual
DualRsdl
: Norm of dual Residual
EpsPrimal
: Primal residual stopping tolerance \(\epsilon_{\mathrm{pri}}\) (see Sec. 3.3.1 of [9])
EpsDual
: Dual residual stopping tolerance \(\epsilon_{\mathrm{dua}}\) (see Sec. 3.3.1 of [9])
Rho
: Penalty parameter
Time
: Cumulative run time
- Parameters
- Nxint
Size of variable \(\mathbf{x}\) in objective function
- yshapetuple of ints
Shape of working variable Y (the auxiliary variable)
- ushapetuple of ints
Shape of working variable U (the scaled dual variable)
- dtypedata-type
Data type for working variables (overridden by ‘DataType’ option)
- opt
ADMM.Options
objectAlgorithm options
- class Options(opt=None)[source]¶
Bases:
sporco.cdict.ConstrainedDict
ADMM algorithm options.
Options:
FastSolve
: Flag determining whether non-essential computation is skipped. WhenFastSolve
isTrue
andVerbose
isFalse
, the functional value and related iteration statistics are not computed. IfFastSolve
isTrue
and theAutoRho
mechanism is disabled, residuals are also not calculated, in which case the residual-based stopping method is also disabled, with the number of iterations determined only byMaxMainIter
.
Verbose
: Flag determining whether iteration status is displayed.
StatusHeader
: Flag determining whether status header and separator are displayed.
DataType
: Specify data type for solution variables, e.g.np.float32
.
Y0
: Initial value for Y variable.
U0
: Initial value for U variable.
Callback
: Callback function to be called at the end of every iteration.
IterTimer
: Label of the timer to use for iteration times.
MaxMainIter
: Maximum main iterations.
AbsStopTol
: Absolute convergence tolerance (see Sec. 3.3.1 of [9]).
RelStopTol
: Relative convergence tolerance (see Sec. 3.3.1 of [9]).
RelaxParam
: Relaxation parameter (see Sec. 3.4.3 of [9]). Note: relaxation is disabled by setting this value to 1.0.
rho
: ADMM penalty parameter \(\rho\).
AutoRho
: Options for adaptive rho strategy (see [56] and Sec. 3.4.3 of [9]).
Enabled
: Flag determining whether adaptive penalty parameter strategy is enabled.
Period
: Iteration period on which rho is updated. If set to 1, the rho update test is applied at every iteration.
Scaling
: Multiplier applied to rho when updated (\(\tau\) in [56]).
RsdlRatio
: Primal/dual residual ratio in rho update test (\(\mu\) in [56]).
RsdlTarget
: Residual ratio targeted by auto rho update policy (\(\xi\) in [56]).
AutoScaling
: Flag determining whether RhoScaling value is adaptively determined (see Sec. IV.C in [56]). If enabled,Scaling
specifies a maximum allowed multiplier instead of a fixed multiplier.
StdResiduals
: Flag determining whether standard residual definitions are used instead of normalised residuals (see Sec. IV.B in [56]).
- Parameters
- optdict or None, optional (default None)
ADMM algorithm options
- fwiter = 4¶
Field width for iteration count display column
- fpothr = 2¶
Field precision for other display columns
- itstat_fields_objfn = ('ObjFun', 'FVal', 'GVal')¶
Fields in IterationStats associated with the objective function; see
eval_objfn
- itstat_fields_alg = ('PrimalRsdl', 'DualRsdl', 'EpsPrimal', 'EpsDual', 'Rho')¶
Fields in IterationStats associated with the specific solver algorithm
- itstat_fields_extra = ()¶
Non-standard fields in IterationStats; see
itstat_extra
- hdrtxt_objfn = ('Fnc', 'f', 'g')¶
Display column headers associated with the objective function; see
eval_objfn
- hdrval_objfun = {'Fnc': 'ObjFun', 'f': 'FVal', 'g': 'GVal'}¶
Dictionary mapping display column headers in
hdrtxt_objfn
to IterationStats entries
- solve()[source]¶
Start (or re-start) optimisation. This method implements the framework for the iterations of an ADMM algorithm. There is sufficient flexibility in overriding the component methods that it calls that it is usually not necessary to override this method in derived clases.
If option
Verbose
isTrue
, the progress of the optimisation is displayed at every iteration. At termination of this method, attributeitstat
is a list of tuples representing statistics of each iteration, unless optionFastSolve
isTrue
and optionVerbose
isFalse
.Attribute
timer
is an instance ofutil.Timer
that provides the following labelled timers:
init
: Time taken for object initialisation by__init__
solve
: Total time taken by call(s) tosolve
solve_wo_func
: Total time taken by call(s) tosolve
, excluding time taken to compute functional value and related iteration statistics
solve_wo_rsdl
: Total time taken by call(s) tosolve
, excluding time taken to compute functional value and related iteration statistics as well as time take to compute residuals and implementedAutoRho
mechanism
- property runtime¶
Transitional property providing access to the new timer mechanism. This will be removed in the future.
- xstep()[source]¶
Minimise Augmented Lagrangian with respect to \(\mathbf{x}\).
Overriding this method is required.
- ystep()[source]¶
Minimise Augmented Lagrangian with respect to \(\mathbf{y}\).
Overriding this method is required.
- classmethod hdrval()[source]¶
Construct dictionary mapping display column title to IterationStats entries.
- eval_objfn()[source]¶
Compute components of objective function as well as total contribution to objective function.
- display_start()[source]¶
Set up status display if option selected. NB: this method assumes that the first entry is the iteration count and the last is the rho value.
- display_status(fmtstr, itst)[source]¶
Display current iteration status as selection of fields from iteration stats tuple.
- obfn_f(X)[source]¶
Compute \(f(\mathbf{x})\) component of ADMM objective function.
Overriding this method is required if
eval_objfn
is not overridden.
- obfn_g(Y)[source]¶
Compute \(g(\mathbf{y})\) component of ADMM objective function.
Overriding this method is required if
eval_objfn
is not overridden.
- cnst_A(X)[source]¶
Compute \(A \mathbf{x}\) component of ADMM problem constraint.
Overriding this method is required if methods
rsdl_r
,rsdl_s
,rsdl_rn
, andrsdl_sn
are not overridden.
- cnst_AT(X)[source]¶
Compute \(A^T \mathbf{x}\) where \(A \mathbf{x}\) is a component of ADMM problem constraint.
Overriding this method is required if methods
rsdl_r
,rsdl_s
,rsdl_rn
, andrsdl_sn
are not overridden.
- cnst_B(Y)[source]¶
Compute \(B \mathbf{y}\) component of ADMM problem constraint.
Overriding this method is required if methods
rsdl_r
,rsdl_s
,rsdl_rn
, andrsdl_sn
are not overridden.
- cnst_c()[source]¶
Compute constant component \(\mathbf{c}\) of ADMM problem constraint.
Overriding this method is required if methods
rsdl_r
,rsdl_s
,rsdl_rn
, andrsdl_sn
are not overridden.
- rsdl_r(AX, Y)[source]¶
Compute primal residual vector.
Overriding this method is required if methods
cnst_A
,cnst_AT
,cnst_B
, andcnst_c
are not overridden.
- rsdl_s(Yprev, Y)[source]¶
Compute dual residual vector.
Overriding this method is required if methods
cnst_A
,cnst_AT
,cnst_B
, andcnst_c
are not overridden.
- rsdl_rn(AX, Y)[source]¶
Compute primal residual normalisation term.
Overriding this method is required if methods
cnst_A
,cnst_AT
,cnst_B
, andcnst_c
are not overridden.
- class sporco.admm.admm.ADMMEqual(*args, **kwargs)[source]¶
Bases:
sporco.admm.admm.ADMM
Base class for ADMM algorithms with a simple equality constraint.
Solve optimisation problems of the form
\[\mathrm{argmin}_{\mathbf{x},\mathbf{y}} \; f(\mathbf{x}) + g(\mathbf{y}) \;\mathrm{such\;that}\; \mathbf{x} = \mathbf{y} \;\;.\]This class specialises class ADMM, but remains a base class for other classes that specialise to specific optimisation problems.
- Parameters
- xshapetuple of ints
Shape of working variable X (the primary variable)
- dtypedata-type
Data type for working variables
- opt
ADMMEqual.Options
objectAlgorithm options
- class Options(opt=None)[source]¶
Bases:
sporco.admm.admm.ADMM.Options
ADMMEqual algorithm options.
Options include all of those defined in
ADMM.Options
, together with additional options:
fEvalX
: Flag indicating whether the \(f\) component of the objective function should be evaluated using variable X (True
) or Y (False
) as its argument.
gEvalY
: Flag indicating whether the \(g\) component of the objective function should be evaluated using variable Y (True
) or X (False
) as its argument.
ReturnX
: Flag indicating whether the return value of the solve method is the X variable (True
) or the Y variable (False
).
- Parameters
- optdict or None, optional (default None)
ADMMEqual algorithm options
- obfn_fvar()[source]¶
Variable to be evaluated in computing
ADMM.obfn_f
, depending on thefEvalX
option value.
- obfn_gvar()[source]¶
Variable to be evaluated in computing
ADMM.obfn_g
, depending on thegEvalY
option value.
- eval_objfn()[source]¶
Compute components of objective function as well as total contribution to objective function.
- cnst_A(X)[source]¶
Compute \(A \mathbf{x}\) component of ADMM problem constraint. In this case \(A \mathbf{x} = \mathbf{x}\) since the constraint is \(\mathbf{x} = \mathbf{y}\).
- cnst_AT(Y)[source]¶
Compute \(A^T \mathbf{y}\) where \(A \mathbf{x}\) is a component of ADMM problem constraint. In this case \(A^T \mathbf{y} = \mathbf{y}\) since the constraint is \(\mathbf{x} = \mathbf{y}\).
- cnst_B(Y)[source]¶
Compute \(B \mathbf{y}\) component of ADMM problem constraint. In this case \(B \mathbf{y} = -\mathbf{y}\) since the constraint is \(\mathbf{x} = \mathbf{y}\).
- class sporco.admm.admm.ADMMTwoBlockCnstrnt(*args, **kwargs)[source]¶
Bases:
sporco.admm.admm.ADMM
Base class for ADMM algorithms for problems for which \(g(\mathbf{y}) = g_0(\mathbf{y}_0) + g_1(\mathbf{y}_1)\) with \(\mathbf{y}^T = (\mathbf{y}_0^T \; \mathbf{y}_1^T)\).
Solve optimisation problems of the form
\[\mathrm{argmin}_{\mathbf{x}} \; f(\mathbf{x}) + g_0(A_0 \mathbf{x}) + g_1(A_1 \mathbf{x})\]via an ADMM problem of the form
\[\begin{split}\mathrm{argmin}_{\mathbf{x},\mathbf{y}_0,\mathbf{y}_1} \; f(\mathbf{x}) + g_0(\mathbf{y}_0) + g_0(\mathbf{y}_1) \;\text{such that}\; \left( \begin{array}{c} A_0 \\ A_1 \end{array} \right) \mathbf{x} - \left( \begin{array}{c} \mathbf{y}_0 \\ \mathbf{y}_1 \end{array} \right) = \left( \begin{array}{c} \mathbf{c}_0 \\ \mathbf{c}_1 \end{array} \right) \;\;.\end{split}\]In this case the ADMM constraint is \(A\mathbf{x} + B\mathbf{y} = \mathbf{c}\) where
\[\begin{split}A = \left( \begin{array}{c} A_0 \\ A_1 \end{array} \right) \qquad B = -I \qquad \mathbf{y} = \left( \begin{array}{c} \mathbf{y}_0 \\ \mathbf{y}_1 \end{array} \right) \qquad \mathbf{c} = \left( \begin{array}{c} \mathbf{c}_0 \\ \mathbf{c}_1 \end{array} \right) \;\;.\end{split}\]This class specialises class
ADMM
, but remains a base class for other classes that specialise to specific optimisation problems.
- Parameters
- Nxint
Size of variable \(\mathbf{x}\) in objective function
- yshapetuple of ints
Shape of working variable Y (the auxiliary variable)
- blkaxisint
Axis on which \(\mathbf{y}_0\) and \(\mathbf{y}_1\) are concatenated to form \(\mathbf{y}\)
- blkidxint
Index of boundary between \(\mathbf{y}_0\) and \(\mathbf{y}_1\) on axis on which they are concatenated to form \(\mathbf{y}\)
- dtypedata-type
Data type for working variables
- opt
ADMMTwoBlockCnstrnt.Options
objectAlgorithm options
- class Options(opt=None)[source]¶
Bases:
sporco.admm.admm.ADMM.Options
ADMMTwoBlockCnstrnt algorithm options.
Options include all of those defined in
ADMM.Options
, together with additional options:
AuxVarObj
: Flag indicating whether the \(g(\mathbf{y})\) component of the objective function should be evaluated using variable X (False
) or Y (True
) as its argument. Setting this flag toTrue
often gives a better estimate of the objective function, but at additional computational cost for some problems.
ReturnVar
: A string (valid values are ‘X’, ‘Y0’, or ‘Y1’) indicating which of the objective function variables should be returned by the solve method.
- Parameters
- optdict or None, optional (default None)
ADMMTwoBlockCnstrnt algorithm options
- itstat_fields_objfn = ('ObjFun', 'FVal', 'G0Val', 'G1Val')¶
Fields in IterationStats associated with the objective function; see
eval_objfn
- hdrtxt_objfn = ('Fnc', 'f', 'g0', 'g1')¶
Display column headers associated with the objective function; see
eval_objfn
- hdrval_objfun = {'Fnc': 'ObjFun', 'f': 'FVal', 'g0': 'G0Val', 'g1': 'G1Val'}¶
Dictionary mapping display column headers in
hdrtxt_objfn
to IterationStats entries
- block_sep0(Y)[source]¶
Separate variable into component corresponding to \(\mathbf{y}_0\) in \(\mathbf{y}\;\;\).
- block_sep1(Y)[source]¶
Separate variable into component corresponding to \(\mathbf{y}_1\) in \(\mathbf{y}\;\;\).
- block_sep(Y)[source]¶
Separate variable into components corresponding to blocks \(\mathbf{y}_0\) and \(\mathbf{y}_1\) in \(\mathbf{y}\;\;\).
- block_cat(Y0, Y1)[source]¶
Concatenate components corresponding to \(\mathbf{y}_0\) and \(\mathbf{y}_1\) to form \(\mathbf{y}\;\;\).
- obfn_fvar()[source]¶
Variable to be evaluated in computing
ADMM.obfn_f
.
- obfn_g0var()[source]¶
Variable to be evaluated in computing
ADMMTwoBlockCnstrnt.obfn_g0
, depending on theAuxVarObj
option value.
- obfn_g1var()[source]¶
Variable to be evaluated in computing
ADMMTwoBlockCnstrnt.obfn_g1
, depending on theAuxVarObj
option value.
- obfn_f(X)[source]¶
Compute \(f(\mathbf{x})\) component of ADMM objective function. Unless overridden, \(f(\mathbf{x}) = 0\).
- obfn_g(Y)[source]¶
Compute \(g(\mathbf{y}) = g_0(\mathbf{y}_0) + g_1(\mathbf{y}_1)\) component of ADMM objective function.
- obfn_g0(Y0)[source]¶
Compute \(g_0(\mathbf{y}_0)\) component of ADMM objective function.
Overriding this method is required.
- obfn_g1(Y1)[source]¶
Compute \(g_1(\mathbf{y_1})\) component of ADMM objective function.
Overriding this method is required.
- eval_objfn()[source]¶
Compute components of objective function as well as total contribution to objective function.
- cnst_AT(Y)[source]¶
Compute \(A^T \mathbf{y}\) where
\[\begin{split}A^T \mathbf{y} = \left( \begin{array}{cc} A_0^T & A_1^T \end{array} \right) \left( \begin{array}{c} \mathbf{y}_0 \\ \mathbf{y}_1 \end{array} \right) = A_0^T \mathbf{y}_0 + A_1^T \mathbf{y}_1 \;\;.\end{split}\]
- cnst_B(Y)[source]¶
Compute \(B \mathbf{y}\) component of ADMM problem constraint. In this case \(B \mathbf{y} = -\mathbf{y}\) since the constraint is \(A \mathbf{x} - \mathbf{y} = \mathbf{c}\).
- cnst_c()[source]¶
Compute constant component \(\mathbf{c}\) of ADMM problem constraint. This method should not be used or overridden: all calculations should make use of components
cnst_c0
andcnst_c1
so that these methods can return scalar zeros instead of zero arrays if appropriate.
- cnst_c0()[source]¶
Compute constant component \(\mathbf{c}_0\) of \(\mathbf{c}\) in the ADMM problem constraint. Unless overridden, \(\mathbf{c}_0 = 0\).
- cnst_c1()[source]¶
Compute constant component \(\mathbf{c}_1\) of \(\mathbf{c}\) in the ADMM problem constraint. Unless overridden, \(\mathbf{c}_1 = 0\).
- cnst_A0(X)[source]¶
Compute \(A_0 \mathbf{x}\) component of \(A \mathbf{x}\) in ADMM problem constraint (see
cnst_A
). Unless overridden, \(A_0 \mathbf{x} = \mathbf{x}\), i.e. \(A_0 = I\).
- cnst_A0T(Y0)[source]¶
Compute \(A_0^T \mathbf{y}_0\) component of \(A^T \mathbf{y}\) (see
cnst_AT
). Unless overridden, \(A_0^T \mathbf{y}_0 = \mathbf{y}_0\), i.e. \(A_0 = I\).
- cnst_A1(X)[source]¶
Compute \(A_1 \mathbf{x}\) component of \(A \mathbf{x}\) in ADMM problem constraint (see
cnst_A
). Unless overridden, \(A_1 \mathbf{x} = \mathbf{x}\), i.e. \(A_1 = I\).
- cnst_A1T(Y1)[source]¶
Compute \(A_1^T \mathbf{y}_1\) component of \(A^T \mathbf{y}\) (see
cnst_AT
). Unless overridden, \(A_1^T \mathbf{y}_1 = \mathbf{y}_1\), i.e. \(A_1 = I\).
- rsdl_r(AX, Y)[source]¶
Compute primal residual vector.
Overriding this method is required if methods
cnst_A
,cnst_AT
,cnst_c0
andcnst_c1
are not overridden.
- rsdl_s(Yprev, Y)[source]¶
Compute dual residual vector.
Overriding this method is required if methods
cnst_A
,cnst_AT
,cnst_B
, andcnst_c
are not overridden.
- class sporco.admm.admm.ADMMConsensus(*args, **kwargs)[source]¶
Bases:
sporco.admm.admm.ADMM
Base class for ADMM algorithms with a global variable consensus structure (see Ch. 7 of [9]).
Solve optimisation problems of the form
\[\mathrm{argmin}_{\mathbf{x}} \; \sum_i f_i(\mathbf{x}) + g(\mathbf{x})\]via an ADMM problem of the form
\[\begin{split}\mathrm{argmin}_{\mathbf{x}_i,\mathbf{y}} \; \sum_i f(\mathbf{x}_i) + g(\mathbf{y}) \;\mathrm{such\;that}\; \left( \begin{array}{c} \mathbf{x}_0 \\ \mathbf{x}_1 \\ \vdots \end{array} \right) = \left( \begin{array}{c} I \\ I \\ \vdots \end{array} \right) \mathbf{y} \;\;.\end{split}\]This class specialises class ADMM, but remains a base class for other classes that specialise to specific optimisation problems.
- Parameters
- yshapetuple
Shape of variable \(\mathbf{y}\) in objective function
- Nbint
Number of blocks / consensus components
- opt
ADMMConsensus.Options
objectAlgorithm options
- class Options(opt=None)[source]¶
Bases:
sporco.admm.admm.ADMM.Options
ADMMConsensus algorithm options.
Options include all of those defined in
ADMM.Options
, together with additional options:
fEvalX
: Flag indicating whether the \(f\) component of the objective function should be evaluated using variable X (True
) or Y (False
) as its argument.
gEvalY
: Flag indicating whether the \(g\) component of the objective function should be evaluated using variable Y (True
) or X (False
) as its argument.
AuxVarObj
: Flag selecting choices offEvalX
andgEvalY
that give meaningful functional values. IfTrue
,fEvalX
andgEvalY
are set toFalse
andTrue
respectively, and vice versa ifFalse
. Setting this flag toTrue
often gives a better estimate of the objective function, at some additional computational cost.
- Parameters
- optdict or None, optional (default None)
ADMMConsensus algorithm options
- xstep()[source]¶
Minimise Augmented Lagrangian with respect to block vector \(\mathbf{x} = \left( \begin{array}{ccc} \mathbf{x}_0^T & \mathbf{x}_1^T & \ldots \end{array} \right)^T\;\).
- xistep(i)[source]¶
Minimise Augmented Lagrangian with respect to \(\mathbf{x}\) component \(\mathbf{x}_i\).
Overriding this method is required.
- prox_g(X, rho)[source]¶
Proximal operator of \(\rho^{-1} g(\cdot)\).
Overriding this method is required. Note that this method should compute the proximal operator of \(\rho^{-1} g(\cdot)\), not the proximal operator of \(\rho g(\cdot)\).
- eval_objfn()[source]¶
Compute components of objective function as well as total contribution to objective function.
- obfn_fvar(i)[source]¶
Variable to be evaluated in computing \(f_i(\cdot)\), depending on the
fEvalX
option value.
- obfn_gvar()[source]¶
Variable to be evaluated in computing \(g(\cdot)\), depending on the
gEvalY
option value.
- obfn_f()[source]¶
Compute \(f(\mathbf{x}) = \sum_i f(\mathbf{x}_i)\) component of ADMM objective function.
- class sporco.admm.admm.WeightedADMMConsensus(*args, **kwargs)[source]¶
Bases:
sporco.admm.admm.ADMMConsensus
Base class for ADMM algorithms with a global variable consensus structure (see Ch. 7 of [9]), including scalar weighting of each component as in Equ. (2) in [10]
Solve optimisation problems of the form
\[\mathrm{argmin}_{\mathbf{x}} \; \sum_i \alpha_i f_i(\mathbf{x}) + g(\mathbf{x})\]via an ADMM problem of the form
\[\begin{split}\mathrm{argmin}_{\mathbf{x}_i,\mathbf{y}} \; \sum_i \alpha_i f(\mathbf{x}_i) + g(\mathbf{y}) \;\mathrm{such\;that}\; \left( \begin{array}{c} \sqrt{\alpha_0} \mathbf{x}_0 \\ \sqrt{\alpha_1} \mathbf{x}_1 \\ \vdots \end{array} \right) = \left( \begin{array}{c} \sqrt{\alpha_0} I \\ \sqrt{\alpha_1} I \\ \vdots \end{array} \right) \mathbf{y} \;\;.\end{split}\]This class specialises class ADMMConsensus, but remains a base class for other classes that specialise to specific optimisation problems.
- Parameters
- yshapetuple
Shape of variable \(\mathbf{y}\) in objective function
- Nbint
Number of blocks / consensus components
- alphaarray_like
Array of component weights
- opt
WeightedADMMConsensus.Options
objectAlgorithm options
- class Options(opt=None)[source]¶
Bases:
sporco.admm.admm.ADMMConsensus.Options
WeightedADMMConsensus algorithm options.
Options are the same as those defined in
ADMMConsensus.Options
.
- Parameters
- optdict or None, optional (default None)
WeightedADMMConsensus algorithm options
- obfn_gvar()[source]¶
Variable to be evaluated in computing \(g(\cdot)\), depending on the
gEvalY
option value.