1
1
import sys
2
2
import os
3
3
import numpy as np
4
+ import dotenv
5
+ import dotenv
6
+ import pytest
7
+ dotenv .load_dotenv ()
8
+ dotenv .load_dotenv (dotenv_path = ".env.local" )
4
9
5
10
sys .path .insert (0 , os .path .abspath (os .path .join (os .path .dirname (__file__ ), '..' )))
6
11
from pyduino .optimization .nelder_mead import NelderMead
7
12
8
- def test_nelder_mead_parabola () :
13
+ class TestOptim :
9
14
optimizer = NelderMead (population_size = 10 , ranges = [(- 10 , 10 )] * 4 )
10
- class Oracle :
11
- def ask (self , X ):
12
- return (X ** 2 ).sum (axis = 1 )
13
- oracle = Oracle ()
14
- optimizer .ask_oracle = oracle .ask
15
-
16
- # Set initial population to oracle
17
- optimizer .init_oracle ()
18
-
19
- for i in range (100 ):
20
- optimizer .step ()
21
- assert optimizer .view (optimizer .population ).shape == (10 , 4 )
22
- assert optimizer .view_g ().shape == (10 , 4 )
23
- assert optimizer .inverse_view (optimizer .view (optimizer .population )).shape == (10 , 4 )
24
- assert np .isclose (optimizer .y .min (), 0 , atol = 1e-4 ), f"Oracle: { optimizer .y .min ()} "
25
-
26
- def test_nelder_mead_rosenbrock ():
27
- optimizer = NelderMead (population_size = 10 , ranges = [(- 10 , 10 )] * 4 )
28
- class Oracle :
29
- def ask (self , X ):
30
- return ((1 - X [:, :- 1 ])** 2 ).sum (axis = 1 ) + 100 * ((X [:, 1 :] - X [:, :- 1 ]** 2 )** 2 ).sum (axis = 1 )
31
- oracle = Oracle ()
32
- optimizer .ask_oracle = oracle .ask
33
-
34
- # Set initial population to oracle
35
- optimizer .init_oracle ()
36
-
37
- for i in range (1000 ):
38
- optimizer .step ()
39
- assert optimizer .view (optimizer .population ).shape == (10 , 4 )
40
- assert optimizer .view_g ().shape == (10 , 4 )
41
- assert optimizer .inverse_view (optimizer .view (optimizer .population )).shape == (10 , 4 )
42
- assert np .isclose (optimizer .y .min (), 0 , atol = 1e-4 ), f"Oracle: { optimizer .y .min ()} "
15
+
16
+ def test_logic (self ):
17
+ x = (2 * np .random .random ((10 , 4 ))- 1 )* 100
18
+
19
+ print ("X" )
20
+ print (x )
21
+ print ("Forward -> Backward" )
22
+ print (self .optimizer .backward (self .optimizer .forward (x )))
23
+
24
+ assert np .allclose (x , self .optimizer .backward (self .optimizer .forward (x )))
25
+ assert np .allclose (x , self .optimizer .inverse_view (self .optimizer .view (x )))
26
+
27
+ assert np .all (self .optimizer .backward (np .zeros ((10 ,4 ))) < 1 )
28
+
29
+ def test_nelder_mead_parabola (self ):
30
+ class Oracle :
31
+ def ask (self , X ):
32
+ return (X ** 2 ).sum (axis = 1 )
33
+ oracle = Oracle ()
34
+ self .optimizer .ask_oracle = oracle .ask
35
+
36
+ # Set initial population to oracle
37
+ self .optimizer .init_oracle ()
38
+
39
+ for i in range (100 ):
40
+ self .optimizer .step ()
41
+ assert self .optimizer .view (self .optimizer .population ).shape == (10 , 4 )
42
+ assert self .optimizer .view_g ().shape == (10 , 4 )
43
+ assert self .optimizer .inverse_view (self .optimizer .view (self .optimizer .population )).shape == (10 , 4 )
44
+ assert np .isclose (self .optimizer .y .min (), 0 , atol = 1e-4 ), f"Oracle: { self .optimizer .y .min ()} "
45
+
46
+ def test_nelder_mead_rosenbrock (self ):
47
+ class Oracle :
48
+ def ask (self , X ):
49
+ return ((1 - X [:, :- 1 ])** 2 ).sum (axis = 1 ) + 100 * ((X [:, 1 :] - X [:, :- 1 ]** 2 )** 2 ).sum (axis = 1 )
50
+ oracle = Oracle ()
51
+ self .optimizer .ask_oracle = oracle .ask
52
+
53
+ # Set initial population to oracle
54
+ self .optimizer .init_oracle ()
55
+
56
+ for i in range (1000 ):
57
+ self .optimizer .step ()
58
+ assert self .optimizer .view (self .optimizer .population ).shape == (10 , 4 )
59
+ assert self .optimizer .view_g ().shape == (10 , 4 )
60
+ assert self .optimizer .inverse_view (self .optimizer .view (self .optimizer .population )).shape == (10 , 4 )
61
+ assert np .isclose (self .optimizer .y .min (), 0 , atol = 1e-4 ), f"Oracle: { self .optimizer .y .min ()} "
0 commit comments