@@ -54,7 +54,7 @@ def tune(searchspace: Searchspace, runner, tuning_options):
54
54
print (e )
55
55
return cost_func .results
56
56
57
- ap = acceptance_prob (old_cost , new_cost , T )
57
+ ap = acceptance_prob (old_cost , new_cost , T , tuning_options )
58
58
r = random .random ()
59
59
60
60
if ap > r :
@@ -85,20 +85,26 @@ def tune(searchspace: Searchspace, runner, tuning_options):
85
85
86
86
tune .__doc__ = common .get_strategy_docstring ("Simulated Annealing" , _options )
87
87
88
- def acceptance_prob (old_cost , new_cost , T ):
88
+ def acceptance_prob (old_cost , new_cost , T , tuning_options ):
89
89
"""Annealing equation, with modifications to work towards a lower value."""
90
90
error_val = sys .float_info .max
91
+ res = 0.0
91
92
# if start pos is not valid, always move
92
93
if old_cost == error_val :
93
- return 1.0
94
+ res = 1.0
94
95
# if we have found a valid ps before, never move to nonvalid pos
95
- if new_cost == error_val :
96
- return 0.0
96
+ elif new_cost == error_val :
97
+ res = 0.0
97
98
# always move if new cost is better
98
- if new_cost < old_cost :
99
- return 1.0
99
+ elif new_cost < old_cost :
100
+ res = 1.0
100
101
# maybe move if old cost is better than new cost depending on T and random value
101
- return np .exp (((old_cost - new_cost )/ old_cost )/ T )
102
+ else :
103
+ if tuning_options .objective_higher_is_better :
104
+ res = np .exp (((new_cost - old_cost )/ new_cost )/ T )
105
+ else :
106
+ res = np .exp (((old_cost - new_cost )/ old_cost )/ T )
107
+ return res
102
108
103
109
104
110
def neighbor (pos , searchspace : Searchspace ):
0 commit comments