Exemple #1
0
    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))
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
0
    def generate(seed, size=60, t_pct=0.1):
        np.random.seed(seed)
        fitness = ContinuousPeaks(t_pct=t_pct)
        problem = DiscreteOpt(length=size, fitness_fn=fitness)

        crossover = one_point_crossover.OnePointCrossOver(problem)

        problem = DiscreteOpt(length=size,
                              fitness_fn=fitness,
                              crossover=crossover)
        return problem
Exemple #6
0
    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)
Exemple #7
0
    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)
Exemple #8
0
    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)
Exemple #9
0
    def test_hill_climb_discrete_min():
        """Test hill_climb function for a discrete minimization problem"""

        problem = DiscreteOpt(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)
Exemple #10
0
    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)
Exemple #11
0
    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)
Exemple #12
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
Exemple #13
0
    def test_random_hill_climb_discrete_max():
        """Test random_hill_climb function for a discrete maximization
        problem"""

        problem = DiscreteOpt(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)
Exemple #14
0
    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
Exemple #15
0
    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)
Exemple #16
0
    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)
Exemple #17
0
    def test_find_top_pct_min():
        """Test find_top_pct method for a minimization problem"""

        problem = DiscreteOpt(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],
                        [100, 0, 0, 0, 0],
                        [0, 0, 0, 0, 0],
                        [1, 1, 1, 1, 1],
                        [0, 0, 0, 0, -50]])

        problem.set_population(pop)
        problem.find_top_pct(keep_pct=0.25)

        x = np.array([[0, 0, 0, 0, 0],
                      [0, 0, 0, 0, -50]])

        assert np.array_equal(problem.get_keep_sample(), x)
Exemple #18
0
    def test_sample_pop():
        """Test sample_pop 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()

        sample = problem.sample_pop(100)

        assert (np.shape(sample)[0] == 100 and np.shape(sample)[1] == 5
                and np.sum(sample) > 0 and np.sum(sample) < 500)
Exemple #19
0
 def generate(seed, size=20, t_pct=0.15):
     np.random.seed(seed)
     fitness = FourPeaks(t_pct=t_pct)
     problem = DiscreteOpt(length=size, fitness_fn=fitness)
     return problem
Exemple #20
0
    # plt.figure()
    fit_func = SixPeaks()

    # plot time over problem sizes
    lens = [len(init_state) for init_state in init_states]
    RHC_vals = []
    SA_vals = []
    GA_vals = []
    MIMIC_vals = []
    RHC_times = []
    SA_times = []
    GA_times = []
    MIMIC_times = []
    plt.figure()
    for init_state in init_states:
        problem = DiscreteOpt(length=len(init_state), fitness_fn=fit_func)
        fit, duration, _ = run_RHC_2(problem, init_state)
        RHC_vals.append(fit)
        RHC_times.append(duration)
        fit, duration, _ = run_SA_2(problem, init_state)
        SA_vals.append(fit)
        SA_times.append(duration)
        fit, duration, _ = run_GA_2(problem, init_state)
        GA_vals.append(fit)
        GA_times.append(duration)
        fit, duration, _ = run_MIMIC_2(problem, init_state)
        MIMIC_vals.append(fit)
        MIMIC_times.append(duration)
    plt.plot(lens, RHC_vals, label="rhc")
    plt.plot(lens, SA_vals, label="sa")
    plt.plot(lens, GA_vals, label="ga")