# performMultiObjectiveLocalSearch: Performs a multi-objective local search. In kerschke/mogsa: A Multi-Objective Optimization Algorithm Based on Multi-Objective Gradients

## 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.