Downhill Simplex Optimizer
Introduction
The downhill simplex optimizer works by grouping number of dimensions + 1-positions into a simplex, which can explore the search-space by changing shape.
The simplex changes shape by reflecting, expanding, contracting or shrinking via
the alpha, gamma, beta or sigma parameters.
Example
About the implementation
The downhill simplex algorithm works in a completly different way from the other local hill climbing based optimizers. It is much more complex, because there are reflecting-, expanding-, contracting- and shrinking-steps for each the iteration and the evaluation. This leads to a bigger and more complex source code than the hill climbing based algorithms.
In this implementation the downhill simplex algorithm has some similarities to population-based algorithms. It needs at least number of dimensions + 1 initial positions to form a simplex in the search-space and the movement of the positions in the simplex are affected by each other.
- Choose
number of dimensions + 1positions to build a simplex - Sort simplex positions by their score:
- \(x_0\) is the best position
- \(x_{N-1}\) is the second worst
- \(x_N\) is the worst
- ...
- Calculate the center position \(m\) of all but the worst position
- \(m = \frac{1}{N}\sum^{N-1}_{i=0}x_i\)
- Reflect (\(\alpha\)) the worst position at the center position
- \(r = m + \alpha (m - x_N)\)
- If the reflected position is better than \(x_0\):
- \(e=m+\gamma(m-x_N)\)
- \(p\) is the better position of \(e\) and \(r\)
- \(x_N \leftarrow p\)
- If the reflected position is better than \(x_{N-1}\):
- \(x_N \leftarrow r\)
- Go to step 2
- If \(h\) is the better position of \(x_N\) and \(r\):
- \(c=h+\beta(m-h)\)
- If c is better than \(x_N\):
- \(x_N \leftarrow c\)
- Shrink the simplex
- For each dimension \((i \in {1, ..., N})\)
- \(x_i \leftarrow x_i + \sigma(x_o - x_i)\)
- Go to step 2
Parameters
alpha
The reflection parameter of the simplex algorithm.
- type: float
- default: 1
- typical range: 0.5 ... 2
gamma
The expansion parameter of the simplex algorithm.
- type: float
- default: 2
- typical range: 0.5 ... 5
beta
The contraction parameter of the simplex algorithm.
- type: float
- default: 0.5
- typical range: 0.25 ... 3
sigma
The shrinking parameter of the simplex algorithm.
- type: float
- default: 0.5
- typical range: 0.25 ... 3