Source code for pyqlearning.annealingmodel.simulatedannealing.adaptive_simulated_annealing
# -*- coding: utf-8 -*-
import numpy as np
from pyqlearning.annealingmodel.simulated_annealing import SimulatedAnnealing
from pyqlearning.annealingmodel.cost_functionable import CostFunctionable
[docs]class AdaptiveSimulatedAnnealing(SimulatedAnnealing):
'''
Adaptive Simulated Annealing.
Adaptive Simulated Annealing, also known as the
very fast simulated reannealing, is a very efficient
version of simulated annealing.
References:
- Bertsimas, D., & Tsitsiklis, J. (1993). Simulated annealing. Statistical science, 8(1), 10-15.
- Du, K. L., & Swamy, M. N. S. (2016). Search and optimization by metaheuristics. New York City: Springer.
- Mezard, M., & Montanari, A. (2009). Information, physics, and computation. Oxford University Press.
- Nallusamy, R., Duraiswamy, K., Dhanalaksmi, R., & Parthiban, P. (2009). Optimization of non-linear multiple traveling salesman problem using k-means clustering, shrink wrap algorithm and meta-heuristics. International Journal of Nonlinear Science, 8(4), 480-487.
'''
# Now cycles.
__now_cycles = 0
# How often will this model reanneals there per cycles.
__reannealing_per = 50
# Thermostat.
__thermostat = 0.9
# The minimum temperature.
__t_min = 0.001
# The default temperature.
__t_default = 1.0
[docs] def adaptive_set(
self,
reannealing_per=50,
thermostat=0.9,
t_min=0.001,
t_default=1.0
):
'''
Init for Adaptive Simulated Annealing.
Args:
reannealing_per: How often will this model reanneals there per cycles.
thermostat: Thermostat.
t_min: The minimum temperature.
t_default: The default temperature.
'''
self.__reannealing_per = reannealing_per
self.__thermostat = thermostat
self.__t_min = t_min
self.__t_default = t_default
[docs] def change_t(self, t):
'''
Change temperature.
Override.
Args:
t: Now temperature.
Returns:
Next temperature.
'''
t = super().change_t(t)
self.__now_cycles += 1
if self.__now_cycles % self.__reannealing_per == 0:
t = t * self.__thermostat
if t < self.__t_min:
t = self.__t_default
return t