Parameters setting
The settings of a NOMAD optimization process must be entered in an object of the type described below.
NOMAD.NomadProblem
— TypeNomadProblem(nb_inputs::Int, nb_outputs::Int, output_types::Vector{String}, eval_bb::Function;
input_types::Vector{String} = ["R" for i in 1:nb_inputs],
granularity::Vector{Float64} = zeros(Float64, nb_inputs),
lower_bound::Vector{Float64} = -Inf * ones(Float64, nb_inputs),
upper_bound::Vector{Float64} = Inf * ones(Float64, nb_inputs),
A::Union{Nothing, Matrix{Float64}} = nothing,
b::Union{Nothing, Vector{Float64}} = nothing,
min_mesh_size::Vector{Float64} = zeros(Float64, nb_inputs),
b::Union{Nothing, Vector{Float64}} = nothing,
initial_mesh_size::Vector{Float64} = Float64[])
Struct containing the main information needed to solve a blackbox problem by the Nomad Software.
Attributes:
nb_inputs::Int
:
Number of inputs of the blackbox. Is required to be > 0.
No default, needs to be set.
nb_outputs::Int
:
Number of outputs of the blackbox. Is required to be > 0.
No default, needs to be set.
output_types::Vector{String}
:
A vector containing String objects that define the types of outputs returned by eval_bb
(the order is important) :
String | Output type |
---|---|
"OBJ" | objective value to be minimized |
"PB" | progressive barrier constraint |
"EB" | extreme barrier constraint |
No default value, needs to be set.
eval_bb::Function
:
A function of the form :
(success, count_eval, bb_outputs) = eval(x::Vector{Float64})
bb_outputs
being a Vector{Float64}
containing the values of objective function and constraints for a given input vector x
. NOMAD will seek to minimize the objective function and keeping constraints inferior to 0.
success
is a Bool set to false
if the evaluation failed.
count_eval
is a Bool equal to true
if the blackbox evaluation counting has to be incremented.
input_types::Vector{String}
:
A vector containing String
objects that define the types of inputs to be given to eval_bb (the order is important) :
String | Input type |
---|---|
"R" | Real/Continuous |
"B" | Binary |
"I" | Integer |
all R by default.
granularity::Vector{Float64}
:
The granularity of input variables, that is to say the minimum variation authorized for these variables. A granularity of 0 corresponds to a real variable.
By default, 0
for real variables, 1
for integer and binary ones.
min_mesh_size::Vector{Float64}
:
The minimum mesh size to reach allowed by each input variable. When a variable decreases below the threshold, the algorithm stops.
By default, 0
(which corresponds to the Nomad software tolerance).
initial_mesh_size::Vector{Float64}
:
The initial mesh size set for each input variable. Can be adjusted if the granularity is set.
Empty by default.
lower_bound::Vector{Float64}
:
Lower bound for each coordinate of the blackbox input. -Inf * ones(Float64, nb_inputs)
, by default.
upper_bound::Vector{Float64}
:
Upper bound for each coordinate of the blackbox input.
Inf * ones(Float64, nb_inputs)
, by default.
A::Union{Nothing, Matrix{Float64}}
:
Matrix A in the potential equality constraints Ax = b, where x are the inputs of the blackbox. A must have more columns than lines. If defined, the granularity parameters should be set to default value, i.e. 0.
nothing
, by default.
b::Union{Nothing, Vector{Float64}}
:
Vector b in the potential equality constraints Ax=b, where x are the inputs of the blackbox. b must be defined when A is defined. In this case, dimensions must match.
nothing
, by default.
options::NomadOptions
Nomad options that can be set before running the optimization process.
-> cache_size_max::Int
Maximum number of points stored in the cache.
Inf` by default.
-> display_degree::Int
:
Integer between 0 and 3 that sets the level of display.
-> display_all_eval::Bool
:
If false, only evaluations that allow to improve the current state are displayed.
false
by default.
-> display_infeasible::Bool
:
If true, display best infeasible values reached by Nomad until the current step.
false
by default.
-> display_unsuccessful::Bool
:
If true, display evaluations that are unsuccessful.
false
by default.
-> display_stats::Bool
:
A vector containing String
objects that define the statistics to display when the algorithm is running.
String | Display Statistics Arguments |
---|---|
"BBE" | Blackbox evaluations |
"BBO" | Blackbox outputs |
"CACHE_HITS" | Cache hits |
"CACHE_SIZE" | Cache size |
"CONS_H" | Infeasibility (h) value |
"EVAL" | Evaluations (includes cache hits) |
"FEAS_BBE" | Feasible blackbox evaluations |
"GEN_STEP" | Name of the step that generated |
this point to evaluate | |
"H_MAX" | Max infeasibility (h) acceptable |
"INF_BBE" | Infeasible blackbox evaluations |
"ITER_NUM" | Iteration number in which this |
evaluation was done | |
"MESH_INDEX" | Mesh index |
"OBJ" | Objective function value |
"PHASE_ONE_SUCC" | Success evaluations during phase one |
phase | |
"SGTE" | Number of surrogate evaluations since |
last reset | |
"SOL" | Current feasible iterate (displayed |
in ()) | |
"SUCCESS_TYPE" | Success type for this evaluation, |
compared with the frame center | |
"TIME" | Real time in seconds |
"TOTAL_SGTE" | Total number of surrogate evaluations |
Empty by default.
-> max_bb_eval::Int
:
Maximum of calls to eval_bb allowed. Must be positive.
20000
by default.
-> sgtelib_model_max_eval::Int
:
Maximum number of calls to surrogate models for each optimization of surrogate problem allowed. Must be positive.
1000
by default.
-> eval_opportunistic::Bool
If true, the algorithm performs an opportunistic strategy at each iteration.
true
by default.
-> eval_use_cache::Bool
:
If true, the algorithm only evaluates one time a given input. Avoids to recalculate a blackbox value if this last one has already be computed.
true
by default.
-> eval_sort_type::String
:
Order points before evaluation according to one of the following strategies
String | Eval Sort strategy |
---|---|
"DIR_LAST_SUCCESS" | Use last success direction |
"LEXICOGRAPHICAL" | Use lexicographical ordering (coordinates) |
"RANDOM" | Do not sort |
"QUADRATIC_MODEL" | Use quadratic models |
"QUADRATIC_MODEL"
by default.
-> h_max_0::Float64
:
Initial value of the barrier threshold for progressive barrier (PB). Must be positive.
Inf
by default.
-> direction_type::String
:
Direction type for Mads poll. The following direction types are available
String | Direction type |
---|---|
"ORTHO 2N" | OrthoMads with 2n directions |
"ORTHO N+1 NEG" | OrthoMads with n+1 directions. The (n+1)e |
is the negative sum of the n first. | |
"ORTHO N+1 QUAD" | OrthoMads with n+1 directions. The (n+1)e |
is found by solving a quadratic subproblem | |
"N+1 UNI" | n+1 uniform distribution of directions |
"SINGLE" | Single direction |
"DOUBLE" | Two opposed directions |
Empty by default (the NOMAD software adopts a "ORTHO N+1 QUAD"
strategy by default).
-> direction_type_secondary_poll::String
Direction type for secondary Mads poll for the progressive barrier (PB). The same direction types than direction_type
are available.
Empty by default (by default, the NOMAD software adopts a "DOUBLE"
strategy if direction_type
is set to "ORTHO 2N"
or "ORTHO N+1"
or a "SINGLE"
strategy otherwise).
-> anisotropic_mesh::Bool
:
Use anisotropic mesh to generate directions for MADS.
true
by default.
-> anisotropy_factor::Float64
:
The MADS anisotropy factor for mesh size change. Must be strictly positive.
0.1
by default.
-> lh_search::Tuple{Int, Int}
:
LH search parameters.
lh_search[1]
is the lh_search_init
parameter, i.e. the number of initial search points performed with Latin-Hypercube method.
0
by default.
lh_search[2]
is the lh_search_iter
parameter, i.e. the number of search points performed at each iteration with Latin-Hypercube method.
0
by default.
-> quad_model_search::Bool
:
If true, the algorithm executes a quadratic model search strategy at each iteration. Deactivated when the number of variables is greater than 50.
true
by default.
-> sgtelib_model_search::Bool
:
If true, the algorithm executes a model search strategy using Sgtelib at each iteration. Deactivated when the number of variables is greater than 50.
false
by default.
-> speculative_search::Bool
:
If true, the algorithm executes a speculative search strategy at each iteration.
true
by default.
-> speculative_search_base_factor::Float64
:
The factor distance to the current incumbent for the MADS speculative search. Must be strictly superior to 1.
4.0
by default.
-> speculative_search_max::Int
:
Number of points to generate using the Mads speculative search (when opportunistic strategy). Must be positive.
1
by default.
-> nm_search::Bool
:
If true, the algorithm executes a Nelder-Mead search strategy at each iteration.
true
by default.
-> nm_delta_e::Float64
:
The expansion parameter of the Nelder-Mead search. Must be > 1.
2.0
by default.
-> nm_delta_ic::Float64
:
The inside contraction parameter of the Nelder-Mead search. Must be strictly comprised between -1 and 0.
-0.5
by default.
-> nm_delta_oc::Float64
:
The outside contraction parameter of the Nelder-Mead search. Must be strictly comprised between 0 and 1.
0.5
by default.
-> nm_gamma::Float64
:
The shrink parameter of the Nelder-Mead search. Must be strictly comprised between 0 and 1.
0.5
by default.
-> nm_search_rank_eps::Float64
:
The tolerance parameter on the rank of the initial simplex built in the Nelder-Mead search. Must be strictly positive.
0.01
by default.
-> nm_search_max_trial_pts_nfactor::Int
:
Nelder-Mead search stops when nm_search_max_trial_pts_nfactor
* n evaluations are reached, n being the number of variables of the problem.
80
by default.
-> nm_search_stop_on_success::Bool
:
If true, the nm_search strategy stops opportunistically (as soon as a better point is found).
false
by default.
-> vns_mads_search::Bool
:
If true, the algorithm executes a Variable Neighbourhoold search strategy at each iteration.
false
by default.
-> vns_mads_search_max_trial_pts_nfactor::Int
:
The VNS strategy, when triggered, stops when this parameter is reached.
100
by default.
-> vns_mads_search_trigger::Float64
Maximum desired ratio of VNS blackbox evaluations over the total number of blackbox evaluations. When 0, the VNS search is never executed; when 1, a search is launched at each iteration.
0.75
by default.
-> stop_if_feasible::Bool
:
Stop algorithm as soon as a feasible solution is found.
false
by default.
-> max_time::Union{Nothing, Int}
:
If defined, maximum clock time (in seconds) execution of the algorithm.
false
by default.
-> linear_converter::String
:
The type of converter to deal with linear equality constraints. Can be SVD
or QR
.
SVD
by default.
-> linear_constraints_atol::Float64
:
The tolerance accuracy that x0 must satisfy, when there are linear equality constraints, i.e. A * x0 = b.
0
by default.