mixopt {mixopt} | R Documentation |
Mixed variable optimization using coordinate descent
Description
Mixed variable optimization using coordinate descent
Usage
mixopt(
par,
fn,
gr = NULL,
global = "multistart",
local = "coorddesc",
...,
method,
verbose = 0,
track
)
mixopt_blockcd(
par,
fn,
gr = NULL,
...,
control = list(),
maxblocksize = NULL,
method,
fngr = NULL,
maxiter = 100,
maxeval = NULL,
maxtime = NULL,
verbose = 0,
track = FALSE
)
mixopt_coorddesc(
par,
fn,
gr = NULL,
...,
method,
maxiter = 100,
maxeval = NULL,
maxtime = NULL,
verbose = 0,
track = FALSE
)
mixopt_multistart(
par,
fn,
gr = NULL,
...,
method,
fngr = NULL,
n0 = 20,
n1 = 2,
maxiter = 100,
maxeval = NULL,
verbose = 0,
groupeval = FALSE,
track = FALSE
)
Arguments
par |
List of parameters |
fn |
Function to evaluate |
gr |
Gradient of fn |
global |
Global optimization algorithm to use. 'FALSE' if you only want local optimization. |
local |
Local optimization algorithm to use. |
... |
Additional args |
method |
Optimization method |
verbose |
How much to print. 0 is none, 1 is standard, 2 is some, 3 is a lot, etc. |
track |
Should it track the parameters evaluated and value? |
control |
Parameters for optimizing. |
maxblocksize |
The maximum number of continuous dimensions that should be placed into a single block. |
fngr |
Function that returns the function and gradient value for the given input as a list with names "fn" and "gr". |
maxiter |
Maximum number of outer iterations. For coordinate descent, one iteration is a loop over each parameter. |
maxeval |
Maximum number of function evaluations. It may go over this number while in an inner optimization loop, but will exit after that. |
maxtime |
Maximum time to run in seconds. Not an exact limit, only checks occasionally. |
n0 |
For multistart, number of random initial points to evaluate. |
n1 |
For multistart, number of best starts to optimize with. You should have 'n0' less than 'n1', potentially by a large factor. gradient descent. |
groupeval |
Can multiple inputs be evaluated at once? This can speed up greatly for certain circumstances. Use "matrix" to have it give a set of points as rows of a matrix to all be evaluated at once. |
Value
List
References
https://en.wikipedia.org/wiki/Coordinate_descent
https://en.wikipedia.org/wiki/Coordinate_descent
https://www.uv.es/rmarti/paper/docs/multi2.pdf
Examples
# Simple 1D example
mixopt_blockcd(par=list(mopar_cts(2,8)), fn=function(x) {(4.5-x[1])^2})
# With gradient (isn't faster)
mixopt_blockcd(par=list(mopar_cts(2,8)), fn=function(x) {(4.5-x[1])^2},
gr=function(x) {-2*(4.5-x[1])})
# 1D discrete ordered
mixopt_blockcd(par=list(mopar_ordered(100:10000)),
fn=function(x) {(x[1] - 500.3)^2})
# 2D: one continuous, one factor
mixopt_blockcd(par=list(mopar_cts(2,8), mopar_unordered(letters[1:6])),
fn=function(x) {ifelse(x[2] == 'b', -1, 0) +
(4.5-x[1])^2})
# Simple 1D example
mixopt_coorddesc(par=list(mopar_cts(2,8)), fn=function(x) {(4.5-x[1])^2})
# 1D discrete ordered
mixopt_coorddesc(par=list(mopar_ordered(100:10000)),
fn=function(x) {(x[1] - 500.3)^2})
# 2D: one continuous, one factor
mixopt_coorddesc(par=list(mopar_cts(2,8), mopar_unordered(letters[1:6])),
fn=function(x) {ifelse(x[2] == 'b', -1, 0) +
(4.5-x[1])^2})
# 2D
library(ggplot2)
library(dplyr)
f6 <- function(x) {-(-x[1]*.5*sin(.5*x[1])*1 - 1e-2*x[2]^2 +
.2*x[1] - .3*x[2])}
ContourFunctions::cf_func(f6, xlim=c(0,100), ylim=c(-100,100))
m6 <- mixopt_coorddesc(par=list(mopar_cts(0,100), mopar_cts(-100,100)),
fn=f6, track = TRUE)
plot_track(m6)
ms6 <- mixopt_multistart(par=list(mopar_cts(0,100), mopar_cts(-100,100)),
fn=f6, track = TRUE)
plot_track(ms6)
ContourFunctions::cf_func(f6, xlim=c(0,100), ylim=c(-100,100),
gg = TRUE) +
geom_point(data=as.data.frame(matrix(unlist(ms6$track$par),
ncol=2, byrow=TRUE)) %>%
bind_cols(newbest=ms6$track$newbest),
aes(V1, V2, color=newbest), alpha=.5)