|
6 | 6 | from pymoo.model.evaluator import Evaluator |
7 | 7 | from pymoo.model.individual import Individual |
8 | 8 | from pymoo.model.population import Population |
| 9 | +from pymoo.operators.sampling.random_sampling import FloatRandomSampling |
9 | 10 | from pymoo.optimize import minimize |
10 | | -from pymoo.problems.single import Rosenbrock |
| 11 | +from pymoo.problems.single import Rosenbrock, Ackley, Sphere |
11 | 12 |
|
12 | 13 |
|
13 | 14 | class PatternSearchTest(unittest.TestCase): |
14 | 15 |
|
15 | 16 | def test_against_orginal_implementation(self): |
16 | 17 |
|
17 | | - problem = Rosenbrock(n_var=2) |
18 | | - problem.xl = None |
19 | | - problem.xu = None |
20 | | - x0 = np.array([-1.2, 1.0]) |
21 | | - pop = run(problem, x0)[1:] |
| 18 | + for problem in [ |
| 19 | + Sphere(n_var=10), |
| 20 | + Ackley(n_var=2), |
| 21 | + Rosenbrock(n_var=2), |
| 22 | + ]: |
22 | 23 |
|
| 24 | + print(problem.__class__.__name__) |
23 | 25 |
|
24 | | - algorithm = PatternSearch(x0=x0, explr_delta=np.array([0.6, 0.5])) |
| 26 | + x0 = FloatRandomSampling().do(problem, 1)[0].X |
25 | 27 |
|
26 | | - ret = minimize(problem, algorithm, verbose=True) |
| 28 | + problem.xl = None |
| 29 | + problem.xu = None |
27 | 30 |
|
28 | | - X, _X = pop.get("X"), ret.pop.get("X") |
29 | | - F, _F = pop.get("F"), ret.pop.get("F") |
| 31 | + rho = 0.5 |
30 | 32 |
|
31 | | - n = min(len(X), len(_X)) |
32 | | - X, _X, F, _F = X[:n], _X[:n], F[:n], _F[:n] |
| 33 | + pop = run(problem, x0, rho=rho)[1:] |
33 | 34 |
|
34 | | - np.testing.assert_allclose(X, _X) |
35 | | - np.testing.assert_allclose(F, _F) |
| 35 | + delta = np.zeros(problem.n_var) |
| 36 | + for i in range(0, problem.n_var): |
| 37 | + if (x0[i] == 0.0): |
| 38 | + delta[i] = rho |
| 39 | + else: |
| 40 | + delta[i] = rho * abs(x0[i]) |
36 | 41 |
|
| 42 | + algorithm = PatternSearch(x0=x0, explr_delta=delta) |
| 43 | + |
| 44 | + ret = minimize(problem, algorithm, verbose=True) |
| 45 | + |
| 46 | + X, _X = pop.get("X"), ret.pop.get("X") |
| 47 | + F, _F = pop.get("F"), ret.pop.get("F") |
| 48 | + |
| 49 | + n = min(len(X), len(_X)) |
| 50 | + X, _X, F, _F = X[:n], _X[:n], F[:n], _F[:n] |
| 51 | + |
| 52 | + np.testing.assert_allclose(X, _X, rtol=0, atol=1e-4) |
| 53 | + np.testing.assert_allclose(F, _F, rtol=0, atol=1e-4) |
37 | 54 |
|
38 | 55 |
|
39 | 56 | def best_nearby(delta, point, prevbest, nvars, f, funevals): |
|
0 commit comments