def test_eval_node_probs(): """Test eval_node_probs method""" problem = DiscreteOpt(5, OneMax(), maximize=True) pop = np.array([[0, 0, 0, 0, 1], [1, 0, 1, 0, 1], [1, 1, 1, 1, 0], [1, 0, 0, 0, 1], [0, 0, 0, 0, 0], [1, 1, 1, 1, 1]]) problem.keep_sample = pop problem.eval_node_probs() parent = np.array([2, 0, 1, 0]) probs = np.array([[[0.33333, 0.66667], [0.33333, 0.66667]], [[1.0, 0.0], [0.33333, 0.66667]], [[1.0, 0.0], [0.25, 0.75]], [[1.0, 0.0], [0.0, 1.0]], [[0.5, 0.5], [0.25, 0.75]]]) assert (np.allclose(problem.node_probs, probs, atol=0.00001) and np.array_equal(problem.parent_nodes, parent))
def test_eval_fitness_min(): """Test eval_fitness method for a minimization problem""" problem = OptProb(5, OneMax(), maximize=False) x = np.array([0, 1, 2, 3, 4]) fitness = problem.eval_fitness(x) assert fitness == -10
def test_random(): """Test random method""" problem = DiscreteOpt(5, OneMax(), maximize=True, max_val=5) rand = problem.random() assert (len(rand) == 5 and max(rand) >= 0 and min(rand) <= 4)
def test_mimic_discrete_min(): """Test mimic function for a discrete minimization problem""" problem = DiscreteOpt(5, OneMax(), maximize=False) best_state, best_fitness, _ = mimic(problem, max_attempts=50) x = np.array([0, 0, 0, 0, 0]) assert (np.array_equal(best_state, x) and best_fitness == 0)
def test_genetic_alg_continuous_min(): """Test genetic_alg function for a continuous minimization problem""" problem = ContinuousOpt(5, OneMax(), maximize=False) best_state, best_fitness, _ = genetic_alg(problem, max_attempts=200) x = np.array([0, 0, 0, 0, 0]) assert (np.allclose(best_state, x, atol=0.5) and best_fitness < 1)
def test_genetic_alg_discrete_max(): """Test genetic_alg function for a discrete maximization problem""" problem = DiscreteOpt(5, OneMax(), maximize=True) best_state, best_fitness, _ = genetic_alg(problem, max_attempts=50) x = np.array([1, 1, 1, 1, 1]) assert (np.array_equal(best_state, x) and best_fitness == 5)
def test_hill_climb_discrete_max(): """Test hill_climb function for a discrete maximization problem""" problem = DiscreteOpt(5, OneMax(), maximize=True) best_state, best_fitness, _ = hill_climb(problem, restarts=20) x = np.array([1, 1, 1, 1, 1]) assert (np.array_equal(best_state, x) and best_fitness == 5)
def test_hill_climb_continuous_min(): """Test hill_climb function for a continuous minimization problem""" problem = ContinuousOpt(5, OneMax(), maximize=False) best_state, best_fitness, _ = hill_climb(problem, restarts=20) x = np.array([0, 0, 0, 0, 0]) assert (np.array_equal(best_state, x) and best_fitness == 0)
def test_random(): """Test random method""" problem = ContinuousOpt(5, OneMax(), maximize=True, min_val=0, max_val=4) rand = problem.random() assert (len(rand) == 5 and max(rand) >= 0 and min(rand) <= 4)
def test_set_state_min(): """Test set_state method for a minimization problem""" problem = OptProb(5, OneMax(), maximize=False) x = np.array([0, 1, 2, 3, 4]) problem.set_state(x) assert (np.array_equal(problem.get_state(), x) and problem.get_fitness() == -10)
def test_find_sample_order(): """Test find_sample_order method""" problem = DiscreteOpt(5, OneMax(), maximize=True) problem.parent_nodes = np.array([2, 0, 1, 0]) order = np.array([0, 2, 4, 1, 3]) problem.find_sample_order() assert np.array_equal(np.array(problem.sample_order), order)
def test_reproduce_mut1_max2(): """Test reproduce method when mutation_prob is 1 and max_val is 2""" problem = DiscreteOpt(5, OneMax(), maximize=True) father = np.array([0, 0, 0, 0, 0]) mother = np.array([1, 1, 1, 1, 1]) child = problem.reproduce(father, mother, mutation_prob=1) assert (len(child) == 5 and sum(child) > 0 and sum(child) <= 5)
def test_simulated_annealing_continuous_min(): """Test simulated_annealing function for a continuous minimization problem""" problem = ContinuousOpt(5, OneMax(), maximize=False) best_state, best_fitness, _ = simulated_annealing(problem, max_attempts=50) x = np.array([0, 0, 0, 0, 0]) assert (np.array_equal(best_state, x) and best_fitness == 0)
def test_reproduce_mut0(): """Test reproduce method when mutation_prob is 0""" problem = ContinuousOpt(5, OneMax(), maximize=True, min_val=0, max_val=1, step=1) father = np.array([0, 0, 0, 0, 0]) mother = np.array([1, 1, 1, 1, 1]) child = problem.reproduce(father, mother, mutation_prob=0) assert (len(child) == 5 and sum(child) > 0 and sum(child) < 5)
def test_random_hill_climb_discrete_min(): """Test random_hill_climb function for a discrete minimization problem""" problem = DiscreteOpt(5, OneMax(), maximize=False) best_state, best_fitness, _ = random_hill_climb(problem, max_attempts=10, restarts=20) x = np.array([0, 0, 0, 0, 0]) assert (np.array_equal(best_state, x) and best_fitness == 0)
def test_hill_climb_max_iters(): """Test hill_climb function with max_iters less than infinite""" problem = DiscreteOpt(5, OneMax(), maximize=True) x = np.array([0, 0, 0, 0, 0]) best_state, best_fitness, _ = hill_climb(problem, max_iters=1, restarts=0, init_state=x) assert best_fitness == 1
def test_random_neighbor_max2(): """Test random_neighbor method when max_val is equal to 2""" problem = DiscreteOpt(5, OneMax(), maximize=True) x = np.array([0, 0, 1, 1, 1]) problem.set_state(x) neigh = problem.random_neighbor() sum_diff = np.sum(np.abs(x - neigh)) assert (len(neigh) == 5 and sum_diff == 1)
def test_random_hill_climb_continuous_max(): """Test random_hill_climb function for a continuous maximization problem""" problem = ContinuousOpt(5, OneMax(), maximize=True) best_state, best_fitness, _ = random_hill_climb(problem, max_attempts=10, restarts=20) x = np.array([1, 1, 1, 1, 1]) assert (np.array_equal(best_state, x) and best_fitness == 5)
def test_reproduce_mut1_range_gt_step(): """Test reproduce method when mutation_prob is 1 and range is greater than step size""" problem = ContinuousOpt(5, OneMax(), maximize=True, min_val=0, max_val=2, step=1) father = np.array([0, 0, 0, 0, 0]) mother = np.array([2, 2, 2, 2, 2]) child = problem.reproduce(father, mother, mutation_prob=1) assert (len(child) == 5 and sum(child) > 0 and sum(child) < 10)
def test_random_pop(): """Test random_pop method""" problem = DiscreteOpt(5, OneMax(), maximize=True) problem.random_pop(100) pop = problem.get_population() pop_fitness = problem.get_pop_fitness() assert (np.shape(pop)[0] == 100 and np.shape(pop)[1] == 5 and np.sum(pop) > 0 and np.sum(pop) < 500 and len(pop_fitness) == 100)
def test_simulated_annealing_max_iters(): """Test simulated_annealing function with max_iters less than infinite""" problem = DiscreteOpt(5, OneMax(), maximize=True) x = np.array([0, 0, 0, 0, 0]) best_state, best_fitness, _ = simulated_annealing(problem, max_attempts=1, max_iters=1, init_state=x) assert best_fitness == 1
def test_random_pop(): """Test random_pop method""" problem = ContinuousOpt(5, OneMax(), maximize=True, min_val=0, max_val=1, step=1) problem.random_pop(100) pop = problem.get_population() pop_fitness = problem.get_pop_fitness() assert (np.shape(pop)[0] == 100 and np.shape(pop)[1] == 5 and np.sum(pop) > 0 and np.sum(pop) < 500 and len(pop_fitness) == 100)
def test_random_neighbor_range_eq_step(): """Test random_neighbor method when range equals step size""" problem = ContinuousOpt(5, OneMax(), maximize=True, min_val=0, max_val=1, step=1) x = np.array([0, 0, 1, 1, 1]) problem.set_state(x) neigh = problem.random_neighbor() sum_diff = np.sum(np.abs(x - neigh)) assert (len(neigh) == 5 and sum_diff == 1)
def test_update_state_in_range(): """Test update_state method where all updated values are within the tolerated range""" problem = ContinuousOpt(5, OneMax(), maximize=True, min_val=0, max_val=20, step=1) x = np.array([0, 1, 2, 3, 4]) problem.set_state(x) y = np.array([2, 4, 6, 8, 10]) updated = problem.update_state(y) assert np.array_equal(updated, (x + y))
def test_reproduce_mut1_max_gt2(): """Test reproduce method when mutation_prob is 1 and max_val is greater than 2""" problem = DiscreteOpt(5, OneMax(), maximize=True, max_val=3) problem._crossover = OnePointCrossOver(problem) father = np.array([0, 0, 0, 0, 0]) mother = np.array([2, 2, 2, 2, 2]) child = problem.reproduce(father, mother, mutation_prob=1) assert (len(child) == 5 and sum(child) > 0 and sum(child) < 10)
def test_random_neighbor_max_gt2(): """Test random_neighbor method when max_val is greater than 2""" problem = DiscreteOpt(5, OneMax(), maximize=True, max_val=5) x = np.array([0, 1, 2, 3, 4]) problem.set_state(x) neigh = problem.random_neighbor() abs_diff = np.abs(x - neigh) abs_diff[abs_diff > 0] = 1 sum_diff = np.sum(abs_diff) assert (len(neigh) == 5 and sum_diff == 1)
def test_update_state_outside_range(): """Test update_state method where some updated values are outside the tolerated range""" problem = ContinuousOpt(5, OneMax(), maximize=True, min_val=0, max_val=5, step=1) x = np.array([0, 1, 2, 3, 4]) problem.set_state(x) y = np.array([2, -4, 6, -8, 10]) updated = problem.update_state(y) z = np.array([2, 0, 5, 0, 5]) assert np.array_equal(updated, z)
def test_random_neighbor_range_gt_step(): """Test random_neighbor method when range greater than step size""" problem = ContinuousOpt(5, OneMax(), maximize=True, min_val=0, max_val=2, step=1) x = np.array([0, 1, 2, 3, 4]) problem.set_state(x) neigh = problem.random_neighbor() abs_diff = np.abs(x - neigh) abs_diff[abs_diff > 0] = 1 sum_diff = np.sum(abs_diff) assert (len(neigh) == 5 and sum_diff == 1)
def test_find_neighbors_max2(): """Test find_neighbors method when max_val is equal to 2""" problem = DiscreteOpt(5, OneMax(), maximize=True, max_val=2) x = np.array([0, 1, 0, 1, 0]) problem.set_state(x) problem.find_neighbors() neigh = np.array([[1, 1, 0, 1, 0], [0, 0, 0, 1, 0], [0, 1, 1, 1, 0], [0, 1, 0, 0, 0], [0, 1, 0, 1, 1]]) assert np.array_equal(np.array(problem.neighbors), neigh)
def test_eval_mate_probs_maximize_false(): """Test eval_mate_probs method""" problem = OptProb(5, OneMax(), maximize=False) pop = np.array([[0, 0, 0, 0, 1], [1, 0, 1, 0, 1], [1, 1, 1, 1, 0], [1, 0, 0, 0, 1], [0, 0, 0, 0, 0], [1, 1, 1, 1, 1]]) problem.set_population(pop) problem.eval_mate_probs() probs = np.array([0.26667, 0.13333, 0.06667, 0.2, 0.33333, 0]) assert np.allclose(problem.get_mate_probs(), probs, atol=0.00001)