Distances

class Euclidean(search_space=None, weights=None)[source]

Bases: zellij.core.addons.Distance

Euclidean distance

Compute the Euclidean distance between two points. More info on SciPy

Example

>>> from zellij.core.variables import ArrayVar, FloatVar
>>> from zellij.utils.distances import Euclidean
>>> from zellij.core.loss_func import Loss
>>> from zellij.utils.benchmark import himmelblau
>>> from zellij.core.search_space import ContinuousSearchspace
>>> lf = Loss()(himmelblau)
>>> a = ArrayVar(FloatVar("float_1", 0,1),
...              FloatVar("float_2", 0,1))
>>> sp = ContinuousSearchspace(a,lf, distance=Euclidean())
>>> p1,p2 = sp.random_point(), sp.random_point()
>>> print(p1)
[0.8922761649920034, 0.12709277668616326]
>>> print(p2)
[0.7730279148456985, 0.14715728189857524]
>>> sp.distance(p1,p2)
0.12092447863180801

See also

Distances

Distance addons

class Manhattan(search_space=None, weights=None)[source]

Bases: zellij.core.addons.Distance

Manhattan distance

Compute the Manhattan distance between two points. More info on SciPy

Example

>>> from zellij.core.variables import ArrayVar, FloatVar
>>> from zellij.utils.distances import Manhattan
>>> from zellij.core.loss_func import Loss
>>> from zellij.utils.benchmark import himmelblau
>>> from zellij.core.search_space import ContinuousSearchspace
>>> lf = Loss()(himmelblau)
>>> a = ArrayVar(FloatVar("float_1", 0,1),
...              FloatVar("float_2", 0,1))
>>> sp = ContinuousSearchspace(a,lf, distance=Manhattan())
>>> p1,p2 = sp.random_point(), sp.random_point()
>>> print(p1)
[0.12946481931952147, 0.31940702810480137]
>>> print(p2)
[0.32347527913737095, 0.9356077155539462]
>>> sp.distance(p1,p2)
0.8102111472669943

See also

Distances

Distance addons

class Mixed(search_space=None, weights=None)[source]

Bases: zellij.core.addons.Distance

Mixed distance

Compute a distance between two mixed points, using following equations:

\smash{
\begin{cases}
\delta_{i,j}^{(n)}=\frac{|x_{i,n}-x_{j,n}|}{max_h(x_{h,n})-min_h(x_{h,n})}, \quad \text{if: $x_{h,n}$ is continuous or discrete}\\
\begin{cases}
\delta_{i,j}^{(n)}=0, \quad \text{if, $x_{i,n}=x_{j,n}$}\\
\delta_{i,j}^{(n)}=1, \quad \text{otherwise}
\end{cases} , \quad \text{if: $x_{h,n}$ is categorical}\\
d(x_i,x_j)=\frac{\sum_{n=1}^{p}(\delta_{i,j}^{(n)})^2}{\sum_{n=1}^{p}\delta_{i,j}^{(n)}}\\
\end{cases}}

Example

>>> from zellij.core.variables import ArrayVar, IntVar, FloatVar, CatVar
>>> from zellij.utils.distances import Mixed
>>> from zellij.core.loss_func import Loss
>>> from zellij.utils.benchmark import himmelblau
>>> from zellij.core.search_space import MixedSearchspace
>>> a = ArrayVar(IntVar("int_1", 0,8),
>>>              IntVar("int_2", 4,45),
>>>              FloatVar("float_1", 2,12),
>>>              CatVar("cat_1", ["Hello", 87, 2.56]))
>>> lf = Loss()(himmelblau)
>>> sp = MixedSearchspace(a,lf, distance=Mixed())
>>> p1,p2 = sp.random_point(), sp.random_point()
>>> print(p1)
[5, 34, 4.8808143412719485, 87]
>>> print(p2)
[3, 42, 2.8196595134477738, 'Hello']
>>> sp.distance(p1,p2)
0.5990169287736146

See also

Distances

Distance addons

property target