essR | R Documentation |
essR attempts to solve problems of the form:
min f(x,p_1,p_2,...,p_n)
subject to:
c_e=0
c_L \le c(x) \le c_U
x_L \le x \le x_U
essR(problem, opts = list(maxeval = NULL, maxtime = NULL), ...)
problem |
List containing problem definition. |
opts |
List containing options (if set as opts <- numeric(0) default options will be loaded). |
... |
Additional variables passed to the objective function |
Problem definition:
problem$f: Name of the file containing the objective function (String).
problem$x_L: Lower bounds of decision variables (vector).
problem$x_U: Upper bounds of decision variables (vector).
problem$x_0: Initial point(s) (optional; vector or matrix).
problem$f_0: Function values of initial point(s) (optional). These values MUST correspond to feasible points.
NOTE: The dimension of f_0 and x_0 may be different. For example, if we want to introduce 5 initial points
but we only know the values for 3 of them, x_0 would have 5 rows whereas f_0 would have only 3 elements.
In this example, it is mandatory that the first 3 rows of x_0 correspond to the values of f_0.
Fill the following fields if your problem has non-linear constraints:
problem$neq: Number of equality constraints (Integer; do not define it if there are no equality constraints).
problem$c_L: Lower bounds of nonlinear inequality constraints (vector).
problem$c_U: Upper bounds of nonlinear inequality constraints (vector).
problem$int_var: Number of integer variables (Integer).
problem$bin_var: Number of binary variables (Integer).
problem$vtr: Objective function value to be reached (optional).
User options:
opts$maxeval: Maximum number of function evaluations (Default 1000).
opts$maxtime: Maximum CPU time in seconds (Default 60).
opts$iterprint: Print each iteration on screen: 0-Deactivated; 1-Activated (Default 1).
opts$plot: Plots convergence curves: 0-Deactivated; 1-Plot curves on line; 2-Plot final results (Default 0).
opts$weight: Weight that multiplies the penalty term added to the objective function in constrained problems (Default 1e6).
opts$log_var: Indexes of the variables which will be used to generate diverse solutions in different orders of magnitude (vector).
opts$tolc: Maximum absolute violation of the constraints (Default 1e-5).
opts$prob_bound: Probability (0-1) of biasing the search towards the bounds (Default 0.5).
opts$inter_save: Saves results in a mat file in intermediate iterations. Useful for very long runs (Binary; Default = 0).
Global options:
opts$dim_refset: Number of elements in Refset (Integer; automatically calculated).
opts$ndiverse: Number of solutions generated by the diversificator (Default 10*nvar).
opts$combination: Type of combination of Refset elements (Default 1);1: hyper-rectangles; 2: linear combinations.
Local options:
opts$local_solver: Choose local solver 0: Local search deactivated (Default), "NM", "BFGS", "CG", "LBFGSB","SA","SOLNP".
opts$local_tol: Level of tolerance in local search.
opts$local_iterprint: Print each iteration of local solver on screen (Binary; default = 0).
opts$local_n1: Number of iterations before applying local search for the 1st time (Default 1).
opts$local_n2: Minimum number of iterations in the global phase between 2 local calls (Default 10).
opts$local_balance: Balances between quality (=0) and diversity (=1) for choosing initial points for the local search (default 0.5).
opts$local_finish: Applies local search to the best solution found once the optimization if finished (same values as opts.local.solver).
opts$local_bestx: When activated (i.e. =1) only applies local search to the best solution found to date,ignoring filters (Default=0).
fbest |
Best objective function value found after the optimization | |||||||
xbest |
Vector providing the best function value | |||||||
cpu_time |
Time in seconds consumed in the optimization | |||||||
f |
Vector containing the best objective function value after each iteration | |||||||
x |
Matrix containing the best vector after each iteration | |||||||
time |
Vector containing the cpu time consumed after each iteration | |||||||
neval |
Vector containing the number of function evaluations after each iteration | |||||||
numeval |
Number of function evaluations | |||||||
local_solutions |
Local solutions found by the local solver (in rows) | |||||||
local_solutions_values |
Function values of the local solutions | |||||||
end_crit |
Criterion to finish the optimization:
|
R code of the eSS optimization code from: Process Engineering Group IIM-CSIC.
Constraint functions, if applicable, must be declared in the same script as the objective function as a second output argument, e.g.:
myfunction <- function(x){
calculate fx - scalar containing the objective function value
calculate gx - vector (or empty) containing the constraints values
return(list(fx,gx))
}
Jose Egea
If you use essR and publish the results, please cite the following papers:
Egea, J.A., Maria, R., Banga, J.R. (2010) An evolutionary method for complex-process optimization. Computers & Operations Research 37(2): 315-324.
Egea, J.A., Balsa-Canto, E., Garcia, M.S.G., Banga, J.R. (2009) Dynamic optimization of nonlinear processes with an enhanced scatter search method. Industrial & Engineering Chemistry Research 49(9): 4388-4401.
#1 Unconstrained problem
ex1 <- function(x){
y<-4*x[1]*x[1]-2.1*x[1]^4+1/3*x[1]^6+x[1]*x[2]-4*x[2]*x[2]+4*x[2]^4;
return(y)
}
#global optimum
#x*=[0.0898, -0.7127];
# or
#x*=[-0.0898, 0.7127];
#
#f(x*)= -1.03163;
#========================= PROBLEM SPECIFICATIONS ===========================
problem<-list(f="ex1",x_L=rep(-1,2),x_U=rep(1,2))
opts<-list(maxeval=500, ndiverse=10, dim_refset=4, local_solver="solnp", local_n2=1)
#========================= END OF PROBLEM SPECIFICATIONS =====================
Results<-essR(problem,opts);
#2 Constrained problem
ex2<-function(x){
F=-x[1]-x[2];
g<-rep(0,2);
g[1]<-x[2]-2*x[1]^4+8*x[1]^3-8*x[1]^2;
g[2]<-x[2]-4*x[1]^4+32*x[1]^3-88*x[1]^2+96*x[1];
return(list(F=F,g=g))
}
# global optimum
#x*=[2.32952, 3.17849];
#f(x*)=-5.50801
#========================= PROBLEM SPECIFICATIONS ===========================
problem<-list(f="ex2",x_L=rep(0,2),x_U=c(3,4), c_L=rep(-Inf,2), c_U=c(2,36))
opts<-list(maxeval=750, local_solver="solnp", local_n2=1)
#========================= END OF PROBLEM SPECIFICATIONS =====================
Results<-essR(problem,opts);
#3 Constrained problem with equality constraints
ex3<-function(x,k1,k2,k3,k4){
f=-x[4];
#Equality constraints
g<-rep(0,5);
g[1]=x[4]-x[3]+x[2]-x[1]+k4*x[4]*x[6];
g[2]=x[1]-1+k1*x[1]*x[5];
g[3]=x[2]-x[1]+k2*x[2]*x[6];
g[4]=x[3]+x[1]-1+k3*x[3]*x[5];
#Inequality constraint
g[5]=x[5]^0.5+x[6]^0.5;
return(list(f=f,g=g));
}
#global optimum
#x*=[0.77152
# 0.516994
# 0.204189
# 0.388811
# 3.0355
# 5.0973];
#
#f(x*)= -0.388811;
#========================= PROBLEM SPECIFICATIONS ===========================
problem<-list(f="ex3",x_L=rep(0,6),x_U=c(rep(1,4),16,16), neq=4, c_L=-Inf, c_U=4)
opts<-list(maxtime=7, local_solver="solnp", local_n2=10)
#========================= END OF PROBLEM SPECIFICATIONS =====================
k1=0.09755988;
k3=0.0391908;
k2=0.99*k1;
k4=0.9*k3;
Results<-essR(problem,opts,k1,k2,k3,k4);
#4 Mixed integer problem
ex4<-function(x){
F = x[2]^2 + x[3]^2 + 2.0*x[1]^2 + x[4]^2 - 5.0*x[2] - 5.0*x[3] - 21.0*x[1] + 7.0*x[4];
g<-rep(0,3);
g[1] = x[2]^2 + x[3]^2 + x[1]^2 + x[4]^2 + x[2] - x[3] + x[1] - x[4];
g[2] = x[2]^2 + 2.0*x[3]^2 + x[1]^2 + 2.0*x[4]^2 - x[2] - x[4];
g[3] = 2.0*x[2]^2 + x[3]^2 + x[1]^2 + 2.0*x[2] - x[3] - x[4];
return(list(F=F, g=g));
}
# global optimum
#x*=[2.23607, 0, 1, 0];
#f(x*)=-40.9575;
#========================= PROBLEM SPECIFICATIONS ===========================
problem<-list(f="ex4", x_L=rep(0,4), x_U=rep(10,4), x_0=c(3,4,5,1),int_var=3, c_L=rep(-Inf,3), c_U=c(8,10,5))
opts<-list(maxtime=2)
#========================= END OF PROBLEM SPECIFICATIONS =====================
Results<-essR(problem,opts);
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.