gradient_free_optimizers/optimizers/exp_opt/random_annealing.py
# Author: Simon Blanke
# Email: simon.blanke@yahoo.com
# License: MIT License
from ..local_opt import HillClimbingOptimizer
class RandomAnnealingOptimizer(HillClimbingOptimizer):
name = "Random Annealing"
_name_ = "random_annealing"
def __init__(
self,
*args,
epsilon=0.03,
distribution="normal",
n_neighbours=3,
annealing_rate=0.98,
start_temp=10,
**kwargs
):
super().__init__(*args, **kwargs)
self.epsilon = epsilon
self.distribution = distribution
self.n_neighbours = n_neighbours
self.annealing_rate = annealing_rate
self.start_temp = start_temp
self.temp = start_temp
@HillClimbingOptimizer.track_new_pos
@HillClimbingOptimizer.random_iteration
def iterate(self):
pos = self.move_climb(self.pos_current, epsilon_mod=self.temp)
self.temp = self.temp * self.annealing_rate
return pos