performMultiObjectiveLocalSearch: Performs a multi-objective local search.

Description Usage Arguments Value Examples

View source: R/performMultiObjectiveLocalSearch.R

Description

Given three initial points x1, x2 and x3, of which is known that the angle between x2 - x1 and x3 - x2 is larger than 90 degree (i.e., they point in opposite directions), this optimizer tries to find a local effient point that has to be located betwen x1 and x2.

Usage

1
2
3
performMultiObjectiveLocalSearch(x1, x2, x3, fn1, fn2, prec.grad = 1e-06,
  prec.norm = 1e-06, prec.angle = 1e-04, scale.step = 0.5, lower,
  upper, max.steps = 1000L)

Arguments

x1

[numeric(d)]
d-dimensional individual located on one side of the (bi-objective) optimum.

x2

[numeric(d)]
d-dimensional individual located on the opposite side (w.r.t. x1) of the (bi-objective) optimum.

x3

[numeric(d)]
d-dimensional individual located such that the vector from x2 to x3 points in the opposite direction of the vector from x1 to x2.

fn1

[function]
The first objective used for computing the multi-objective gradient.

fn2

[function]
The second objective used for computing the multi-objective gradient.

prec.grad

[numeric(1L)]
Precision value (= step size) used for approximating the gradient. The default is 1e-6.

prec.norm

[numeric(1L)]
Precision threshold when normalizing a vector. That is, every element of the vector, whose absolute value is below this threshold, will be replaced by 0. The default is 1e-6.

prec.angle

[numeric(1L)]
Precision threshold used for comparing whether the angle (in degree) between two vectors is zero. The default is 1e-4.

scale.step

[numeric(1L)]
Scaling factor for the step size in the direction of the multi-objective gradient. The default is 0.5.

lower

[numeric(d)]
Vector of lower bounds.

upper

[numeric(d)]
Vector of upper bounds.

max.steps

[integer(1L)] Maximum number of local search steps to reach an optimum. The default is 1000L.

Value

[list(5L)]
List containing the matrix of points, which were visited in the course of the optimization, another matrix providing the number of performed function evaluations, two vectors providing the single-objective gradients of the last individual and a logical flag, indicating whether the optimizer found a local efficient point.

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Define two single-objective test problems:
fn1 = function(x) sum((x - c(2, 0))^2)
fn2 = function(x) sum((x - c(0, 1))^2)

# Visualize locally efficient set, i.e., the "area" where we ideally want to find a point:
plot(c(2, 0), c(0, 1), type = "o", pch = 19,
  xlab = expression(x[1]), ylab = expression(x[2]), las = 1, asp = 1)
text(2, 0, "Optimum of fn1", pos = 2, offset = 1.5)
text(0, 1, "Optimum of fn2", pos = 4, offset = 1.5)

# Place two points x1 and x2 on opposite sides of the bi-objective optimum:
x1 = c(1, 1)
x2 = c(0.5, 0)
x3 = c(0.8, 0.2)
points(rbind(x1, x2, x3), pch = 19, type = "o", lty = "dotted")
text(rbind(x1, x2, x3), labels = c("x1", "x2", "x3"), pos = 4)

# Optimize using weighted bisection optimization:
result = performMultiObjectiveLocalSearch(x1 = x1, x2 = x2, x3 = x3,
  fn1 = fn1, fn2 = fn2, lower = c(0, 0), upper = c(2, 1))
opt.path = result$opt.path

# Visualize the optimization path:
points(opt.path)

# Highlight the found local efficient point (= local optimum w.r.t. both objectives):
n = nrow(opt.path)
points(opt.path[n, 1], opt.path[n, 2], pch = 4, col = "red", cex = 2)
text(opt.path[n, 1], opt.path[n, 2], "Found Local Efficient Point", pos = 4, offset = 1.5)

kerschke/mogsa documentation built on Oct. 27, 2018, 12:13 a.m.