for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
# Author: Simon Blanke
# Email: [email protected]
# License: MIT License
from . import HillClimbingOptimizer
class RepulsingHillClimbingOptimizer(HillClimbingOptimizer):
name = "Repulsing Hill Climbing"
_name_ = "repulsing_hill_climbing"
__name__ = "RepulsingHillClimbingOptimizer"
optimizer_type = "local"
computationally_expensive = False
def __init__(
self,
search_space,
initialize={"grid": 4, "random": 2, "vertices": 4},
constraints=[],
random_state=None,
rand_rest_p=0,
nth_process=None,
epsilon=0.03,
distribution="normal",
n_neighbours=3,
repulsion_factor=5,
):
super().__init__(
search_space=search_space,
initialize=initialize,
constraints=constraints,
random_state=random_state,
rand_rest_p=rand_rest_p,
nth_process=nth_process,
epsilon=epsilon,
distribution=distribution,
n_neighbours=n_neighbours,
)
self.tabus = []
self.repulsion_factor = repulsion_factor
self.epsilon_mod = 1
@HillClimbingOptimizer.track_new_pos
def iterate(self):
return self.move_climb(
self.pos_current,
epsilon=self.epsilon,
distribution=self.distribution,
epsilon_mod=self.epsilon_mod,
def evaluate(self, score_new):
super().evaluate(score_new)
if score_new <= self.score_current:
self.epsilon_mod = self.repulsion_factor
else: