_visualize_search_paths   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 117
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 89
dl 0
loc 117
rs 10
c 0
b 0
f 0
wmc 3

2 Functions

Rating   Name   Duplication   Size   Complexity  
A objective_function() 0 3 1
B plot_search_path() 0 62 2
1
import os
2
import numpy as np
3
import matplotlib.pyplot as plt
4
from gradient_free_optimizers import (
5
    HillClimbingOptimizer,
6
    StochasticHillClimbingOptimizer,
7
    TabuOptimizer,
8
    RandomSearchOptimizer,
9
    RandomRestartHillClimbingOptimizer,
10
    RandomAnnealingOptimizer,
11
    SimulatedAnnealingOptimizer,
12
    ParallelTemperingOptimizer,
13
    ParticleSwarmOptimizer,
14
    EvolutionStrategyOptimizer,
15
    BayesianOptimizer,
16
    TreeStructuredParzenEstimators,
17
    ForestOptimizer,
18
    EnsembleOptimizer,
19
)
20
21
n_inits = 4
22
23
optimizer_dict = {
24
    "HillClimbing": (HillClimbingOptimizer, 1),
25
    "StochasticHillClimbing": (StochasticHillClimbingOptimizer, 1),
26
    "TabuSearch": (TabuOptimizer, 1),
27
    "RandomSearch": (RandomSearchOptimizer, 1),
28
    "RandomRestartHillClimbing": (RandomRestartHillClimbingOptimizer, 1),
29
    "RandomAnnealing": (RandomAnnealingOptimizer, 1),
30
    "SimulatedAnnealing": (SimulatedAnnealingOptimizer, 1),
31
    "ParallelTempering": (ParallelTemperingOptimizer, n_inits),
32
    "ParticleSwarm": (ParticleSwarmOptimizer, n_inits),
33
    "EvolutionStrategy": (EvolutionStrategyOptimizer, n_inits),
34
    "Bayesian": (BayesianOptimizer, 1),
35
    "TPE": (TreeStructuredParzenEstimators, 1),
36
    "DecisionTree": (ForestOptimizer, 1),
37
    "Ensemble": (EnsembleOptimizer, 1),
38
}
39
40
41
def objective_function(pos_new):
42
    score = -(pos_new["x1"] * pos_new["x1"] + pos_new["x2"] * pos_new["x2"])
43
    return score
44
45
46
search_space = {"x1": np.arange(-100, 100, 1), "x2": np.arange(-100, 100, 1)}
47
48
49
def plot_search_path(optimizer_key):
50
    opt_class, n_inits = optimizer_dict[optimizer_key]
51
    opt = opt_class(search_space)
52
53
    opt.search(
54
        objective_function,
55
        n_iter=50,
56
        random_state=0,
57
        memory=False,
58
        verbosity={"progress_bar": True, "print_results": False},
59
        initialize={"vertices": n_inits},
60
    )
61
62
    optimizers = opt.optimizers
63
64
    print(optimizers, "\n")
65
66
    plt.figure(figsize=(5.5, 4.7))
67
    plt.set_cmap("jet")
68
69
    for n, opt_ in enumerate(optimizers):
70
        pos_list = np.array(opt_.pos_new_list)
71
        score_list = np.array(opt_.score_new_list)
72
73
        # print("\npos_list\n", pos_list, "\n", len(pos_list))
74
        # print("score_list\n", score_list, "\n", len(score_list))
75
76
        plt.plot(
77
            pos_list[:, 0],
78
            pos_list[:, 1],
79
            linestyle="--",
80
            marker=",",
81
            color="black",
82
            alpha=0.33,
83
            label=n,
84
        )
85
        plt.scatter(
86
            pos_list[:, 0],
87
            pos_list[:, 1],
88
            c=score_list,
89
            marker="H",
90
            s=5,
91
            vmin=-1000,
92
            vmax=0,
93
            label=n,
94
        )
95
96
    plt.xlabel("X")
97
    plt.ylabel("Y")
98
99
    plt.xlim((0, 200))
100
    plt.ylim((0, 200))
101
    plt.colorbar()
102
    # plt.legend(loc="upper left")
103
104
    plt.tight_layout()
105
    plt.savefig(
106
        os.path.abspath(os.path.dirname(__file__))
107
        + "/plots/temp/"
108
        + optimizer_key
109
        + "_path.png",
110
        dpi=400,
111
    )
112
113
114
for key in optimizer_dict.keys():
115
    print(key)
116
    plot_search_path(key)
117