def test_exponential_random_solutions(): """ Checks if the exponential ``accept`` method correctly decides in two known cases for a fixed seed. This is the exponential equivalent to the linear random solutions test above. """ simulated_annealing = SimulatedAnnealing(2, 1, 0.5, "exponential") state = rnd.RandomState(0) assert_(simulated_annealing.accept(state, Zero(), Zero(), One())) assert_(not simulated_annealing.accept(state, Zero(), Zero(), One()))
def test_linear_random_solutions(): """ Checks if the linear ``accept`` method correctly decides in two known cases for a fixed seed. """ simulated_annealing = SimulatedAnnealing(2, 1, 1) state = rnd.RandomState(0) # Using the above seed, the first two random numbers are 0.55 and .72, # respectively. The acceptance probability is 0.61 first, so the first # should be accepted (0.61 > 0.55). Thereafter, it drops to 0.37, so the # second should not (0.37 < 0.72). assert_(simulated_annealing.accept(state, Zero(), Zero(), One())) assert_(not simulated_annealing.accept(state, Zero(), Zero(), One()))
def test_accepts_better(): for _ in range(1, 100): simulated_annealing = SimulatedAnnealing(2, 1, 1) assert_( simulated_annealing.accept(rnd.RandomState(), One(), Zero(), Zero()))
def test_accepts_equal(): simulated_annealing = SimulatedAnnealing(2, 1, 1) for _ in range(100): # This results in an acceptance probability of exp{0}, that is, one. # Thus, the candidate state should always be accepted. assert_( simulated_annealing.accept(rnd.RandomState(), One(), One(), One()))
def test_accepts_generator_and_random_state(): """ Tests if SimulatedAnnealing works with both Generator and RandomState randomness classes. See also https://numpy.org/doc/1.18/reference/random/index.html#quick-start """ class Old: # old RandomState interface mock def random_sample(self): # pylint: disable=no-self-use return 0.5 simulated_annealing = SimulatedAnnealing(2, 1, 1) assert_(simulated_annealing.accept(Old(), One(), One(), Zero())) class New: # new Generator interface mock def random(self): # pylint: disable=no-self-use return 0.5 simulated_annealing = SimulatedAnnealing(2, 1, 1) assert_(simulated_annealing.accept(New(), One(), One(), Zero()))