Optimization via Generalized Simulated Annealing
Source:R/OptimizerBatchGenSA.R
mlr_optimizers_gensa.Rd
OptimizerBatchGenSA
class that implements generalized simulated annealing. Calls
GenSA::GenSA()
from package GenSA.
Source
Tsallis C, Stariolo DA (1996). “Generalized simulated annealing.” Physica A: Statistical Mechanics and its Applications, 233(1-2), 395–406. doi:10.1016/s0378-4371(96)00271-3 .
Xiang Y, Gubian S, Suomela B, Hoeng J (2013). “Generalized Simulated Annealing for Global Optimization: The GenSA Package.” The R Journal, 5(1), 13. doi:10.32614/rj-2013-002 .
Dictionary
This Optimizer can be instantiated via the dictionary
mlr_optimizers or with the associated sugar function opt()
:
Parameters
smooth
logical(1)
temperature
numeric(1)
acceptance.param
numeric(1)
verbose
logical(1)
trace.mat
logical(1)
For the meaning of the control parameters, see GenSA::GenSA()
. Note that we
have removed all control parameters which refer to the termination of the
algorithm and where our terminators allow to obtain the same behavior.
In contrast to the GenSA::GenSA()
defaults, we set trace.mat = FALSE
.
Note that GenSA::GenSA()
uses smooth = TRUE
as a default.
In the case of using this optimizer for Hyperparameter Optimization you may
want to set smooth = FALSE
.
Progress Bars
$optimize()
supports progress bars via the package progressr
combined with a Terminator. Simply wrap the function in
progressr::with_progress()
to enable them. We recommend to use package
progress as backend; enable with progressr::handlers("progress")
.
Super classes
bbotk::Optimizer
-> bbotk::OptimizerBatch
-> OptimizerBatchGenSA
Examples
if (requireNamespace("GenSA")) {
search_space = domain = ps(x = p_dbl(lower = -1, upper = 1))
codomain = ps(y = p_dbl(tags = "minimize"))
objective_function = function(xs) {
list(y = as.numeric(xs)^2)
}
objective = ObjectiveRFun$new(
fun = objective_function,
domain = domain,
codomain = codomain)
instance = OptimInstanceBatchSingleCrit$new(
objective = objective,
search_space = search_space,
terminator = trm("evals", n_evals = 10))
optimizer = opt("gensa")
# Modifies the instance by reference
optimizer$optimize(instance)
# Returns best scoring evaluation
instance$result
# Allows access of data.table of full path of all evaluations
as.data.table(instance$archive$data)
}
#> x y x_domain timestamp batch_nr
#> <num> <num> <list> <POSc> <int>
#> 1: 3.071060e-02 9.431411e-04 <list[1]> 2024-10-25 12:52:11 1
#> 2: 7.901734e-01 6.243739e-01 <list[1]> 2024-10-25 12:52:11 2
#> 3: -3.848173e-01 1.480844e-01 <list[1]> 2024-10-25 12:52:11 3
#> 4: 3.071060e-02 9.431411e-04 <list[1]> 2024-10-25 12:52:11 4
#> 5: 3.071160e-02 9.432025e-04 <list[1]> 2024-10-25 12:52:11 5
#> 6: 3.070960e-02 9.430797e-04 <list[1]> 2024-10-25 12:52:11 6
#> 7: -3.071060e-02 9.431411e-04 <list[1]> 2024-10-25 12:52:11 7
#> 8: -3.070960e-02 9.430797e-04 <list[1]> 2024-10-25 12:52:11 8
#> 9: -3.071160e-02 9.432025e-04 <list[1]> 2024-10-25 12:52:11 9
#> 10: -1.141448e-15 1.302904e-30 <list[1]> 2024-10-25 12:52:11 10