Stopping's attributes ID: StoppingMeta
Usual instances of AbstractStopping contains a StoppingMeta <: AbstractStoppingMeta (stp.meta), which controls the various tolerances and thresholds used by the functions start! and stop!.
- atol :: Number = 1.0e-6
- rtol :: Number = 1.0e-15
- optimality0 :: Number = 1.0
- tol_check :: Function = (atol :: Number, rtol :: Number, opt0 :: Number) -> max(atol,rtol*opt0)
- tol_check_neg :: Function = (atol :: Number, rtol :: Number, opt0 :: Number) -> - tol_check(atol,rtol,opt0)
- optimality_check :: Function = (a,b) -> Inf
- recomp_tol :: Bool = true
- unbounded_threshold :: Number = 1.0e50, #typemax(Float64)
- unbounded_x :: Number = 1.0e50
- max_f :: Int = typemax(Int)
- max_cntrs :: Dict{Symbol,Int} = Dict{Symbol,Int64}()
- max_eval :: Int = 20000
- max_iter :: Int = 5000
- max_time :: Float64 = 300.0
- start_time :: Float64 = NaN
- meta_user_struct :: Any = nothing
- user_check_func! :: Function = (stp :: AbstractStopping, start :: Bool) -> nothing
The default constructor for the meta uses above values, and they can all be modified using keywords
meta = StoppingMeta(rtol = 0.0) #will set `rtol` as 0.0.StoppingMeta also contains the various status related to the checks:
OK_check(meta) #returns true if one of the check is true.FAQ: Are there Type constraints when initializing a StoppingMeta?
An StoppingMeta{TolType, CheckType, MUS, IntType} is actually a paramtric type:
checktype(meta) #CheckType: return type of `tol_check` and `tol_check_neg` 
toltype(meta) #TolType: type of the tolerances
metausertype(meta) #MUS: type of the user-defined structure
inttype(meta) #IntType: type of integer tolerancesFAQ: What is user_check_func!?
This is a callback function called in the execution of the function stop! or start!. This function takes two input stp <: AbstractStopping and a boolean set as true if called from start! and false if called from stop!. To eventually returns a stopping status, the function has to update stp.meta.stopbyuser.
For instance, if one want to stop when $\log(x) < 1$ in stop!:
function test(stp, start)
  stp.meta.stopbyuser = !start && (log(stp.current_state.x) < 1)
end
user_check_func! = testThe exclamation mark (!) is a naming convention used when the function modifies input.