The Jaya
package provides a gradient-free optimization
algorithm that can solve single-objective and multi-objective
optimization problems. This vignette demonstrates how to use the
Jaya
package for optimization tasks.
To solve a single-objective optimization problem using
jaya
, define an objective function and specify the bounds
of the variables.
# Define the sphere function
sphere_function <- function(x) sum(x^2)
# Set optimization parameters
lower_bounds <- c(-5, -5, -5)
upper_bounds <- c(5, 5, 5)
# Run optimization
single_result <- jaya(
fun = sphere_function,
lower = lower_bounds,
upper = upper_bounds,
popSize = 20,
maxiter = 50,
n_var = length(lower_bounds),
opt = "minimize"
)
# Summary of results
summary(single_result)
#> Jaya Algorithm
#> Population Size = 20
#> Number of iterations = 50
#> Number of variables = 3
#>
#> Objective: minimize
#> Objective Function:
#> [[1]]
#> function (x)
#> sum(x^2)
#> <bytecode: 0x5572767ea3d8>
#>
#>
#> Limits:
#> x1 = [-5, 5]
#> x2 = [-5, 5]
#> x3 = [-5, 5]
#>
#> Best Result:
#> Best.x1 Best.x2 Best.x3 Best.f.x.
#> Best -0.0003533151 -8.017961e-05 -0.0002122061 1.762917e-07
# Plot the best value over iterations
plot(single_result)
To solve a multi-objective optimization problem, provide a list of objectives and specify the bounds of the variables.
# Define multiple objectives
objective1 <- function(x) sum(x^2)
objective2 <- function(x) sum((x - 2)^2)
# Combine objectives
objectives <- list(objective1, objective2)
# Run optimization
multi_result <- jaya_multi(
objectives = objectives,
lower = lower_bounds,
upper = upper_bounds,
popSize = 30,
maxiter = 100,
n_var = length(lower_bounds)
)
# Summary of results
summary(multi_result)
#> Length Class Mode
#> Pareto_Front 5 data.frame list
#> Solutions 5 data.frame list
# Pairwise plots for multi-objective Pareto front
plot_jaya_multi_pairwise(multi_result)
To stop optimization early if the improvement falls below a
threshold, use the early_stopping
parameter:
early_stopping_result <- jaya(
fun = sphere_function,
lower = lower_bounds,
upper = upper_bounds,
popSize = 20,
maxiter = 50,
n_var = length(lower_bounds),
early_stopping = TRUE,
tolerance = 1e-6,
patience = 5
)
summary(early_stopping_result)
#> Jaya Algorithm
#> Population Size = 20
#> Number of iterations = 50
#> Number of variables = 3
#>
#> Objective: minimize
#> Objective Function:
#> [[1]]
#> function (x)
#> sum(x^2)
#> <bytecode: 0x5572767ea3d8>
#>
#>
#> Limits:
#> x1 = [-5, 5]
#> x2 = [-5, 5]
#> x3 = [-5, 5]
#>
#> Best Result:
#> Best.x1 Best.x2 Best.x3 Best.f.x.
#> Best 0.0002153061 0.0002385893 0.0001214251 1.180256e-07
The Jaya
package offers a versatile and easy-to-use
optimization framework for a variety of problems. Customize the
algorithm parameters to fit your specific needs and leverage its
advanced features for improved performance.