Skip to content

Commit 4c9d60d

Browse files
authored
Merge pull request #17 from zStupan/master
Add tests
2 parents 8dd231c + e160427 commit 4c9d60d

File tree

5 files changed

+223
-16
lines changed

5 files changed

+223
-16
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
strategy:
1414
matrix:
1515
os: [ubuntu-latest, windows-latest, macos-latest]
16-
python-version: ['3.9', '3.10']
16+
python-version: ['3.9', '3.10', '3.11', '3.12']
1717
defaults:
1818
run:
1919
shell: bash

examples/run.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
import numpy as np
21
from fireflyalgorithm import FireflyAlgorithm
3-
4-
5-
def sphere(x):
6-
return np.sum(x ** 2)
2+
from fireflyalgorithm.problems import sphere
73

84

95
FA = FireflyAlgorithm()

fireflyalgorithm/problems.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def katsuura(x):
5656
dim = len(x)
5757
k = np.atleast_2d(np.arange(1, 33)).T
5858
i = np.arange(0, dim * 1)
59-
inner = np.round(2**k * x) * (2 ** (-k))
59+
inner = np.round(2**k * x) * (2.0 ** (-k))
6060
return np.prod(np.sum(inner, axis=0) * (i + 1) + 1)
6161

6262

@@ -165,7 +165,9 @@ def schaffer4(x):
165165

166166
def schwefel(x):
167167
dim = len(x)
168-
return 418.9829 * dim - np.sum(x * np.sin(np.sqrt(np.abs(x))))
168+
return 418.982887272433799807913601398 * dim - np.sum(
169+
x * np.sin(np.sqrt(np.abs(x)))
170+
)
169171

170172

171173
def schwefel21(x):

tests/test_firefly.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
11
from unittest import TestCase
2-
3-
import numpy as np
42
from fireflyalgorithm import FireflyAlgorithm
5-
6-
def sphere(x):
7-
return np.sum(x ** 2)
3+
from fireflyalgorithm.problems import sphere
84

95

106
class TestFA(TestCase):
11-
127
def test_algorithm(self):
13-
FA = FireflyAlgorithm()
14-
best = FA.run(function=sphere, dim=10, lb=-5, ub=5, max_evals=10000)
8+
algorithm = FireflyAlgorithm()
9+
best = algorithm.run(function=sphere, dim=10, lb=-5, ub=5, max_evals=10000)
1510
self.assertLess(best, 5)

tests/test_problems.py

Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
from unittest import TestCase
2+
import numpy as np
3+
from fireflyalgorithm.problems import (
4+
get_problem,
5+
ackley,
6+
alpine1,
7+
alpine2,
8+
cigar,
9+
cosine_mixture,
10+
csendes,
11+
dixon_price,
12+
griewank,
13+
katsuura,
14+
levy,
15+
michalewicz,
16+
perm1,
17+
perm2,
18+
pinter,
19+
powell,
20+
quing,
21+
quintic,
22+
rastrigin,
23+
rosenbrock,
24+
salomon,
25+
schaffer2,
26+
schaffer4,
27+
schwefel,
28+
schwefel21,
29+
schwefel22,
30+
sphere,
31+
step,
32+
step2,
33+
styblinski_tang,
34+
trid,
35+
weierstrass,
36+
whitley,
37+
zakharov,
38+
)
39+
40+
41+
class TestProblems(TestCase):
42+
def test_problem_factory(self):
43+
self.assertRaises(KeyError, get_problem, "spherekjl2")
44+
self.assertEqual(get_problem("ackley"), ackley)
45+
self.assertEqual(get_problem("alpine1"), alpine1)
46+
self.assertEqual(get_problem("alpine2"), alpine2)
47+
self.assertEqual(get_problem("cigar"), cigar)
48+
self.assertEqual(get_problem("cosine_mixture"), cosine_mixture)
49+
self.assertEqual(get_problem("csendes"), csendes)
50+
self.assertEqual(get_problem("dixon_price"), dixon_price)
51+
self.assertEqual(get_problem("griewank"), griewank)
52+
self.assertEqual(get_problem("katsuura"), katsuura)
53+
self.assertEqual(get_problem("levy"), levy)
54+
self.assertEqual(get_problem("michalewicz"), michalewicz)
55+
self.assertEqual(get_problem("perm1"), perm1)
56+
self.assertEqual(get_problem("perm2"), perm2)
57+
self.assertEqual(get_problem("pinter"), pinter)
58+
self.assertEqual(get_problem("powell"), powell)
59+
self.assertEqual(get_problem("quing"), quing)
60+
self.assertEqual(get_problem("quintic"), quintic)
61+
self.assertEqual(get_problem("rastrigin"), rastrigin)
62+
self.assertEqual(get_problem("rosenbrock"), rosenbrock)
63+
self.assertEqual(get_problem("salomon"), salomon)
64+
self.assertEqual(get_problem("schaffer2"), schaffer2)
65+
self.assertEqual(get_problem("schaffer4"), schaffer4)
66+
self.assertEqual(get_problem("schwefel"), schwefel)
67+
self.assertEqual(get_problem("schwefel21"), schwefel21)
68+
self.assertEqual(get_problem("schwefel22"), schwefel22)
69+
self.assertEqual(get_problem("sphere"), sphere)
70+
self.assertEqual(get_problem("step"), step)
71+
self.assertEqual(get_problem("step2"), step2)
72+
self.assertEqual(get_problem("styblinski_tang"), styblinski_tang)
73+
self.assertEqual(get_problem("trid"), trid)
74+
self.assertEqual(get_problem("weierstrass"), weierstrass)
75+
self.assertEqual(get_problem("whitley"), whitley)
76+
self.assertEqual(get_problem("zakharov"), zakharov)
77+
78+
def test_ackley(self):
79+
x = np.zeros(5)
80+
self.assertAlmostEqual(ackley(x), 0.0)
81+
82+
def test_alpine1(self):
83+
x = np.zeros(5)
84+
self.assertAlmostEqual(alpine1(x), 0.0)
85+
86+
def test_alpine2(self):
87+
x = np.full(5, 7.9170526982459462172)
88+
self.assertAlmostEqual(alpine2(x), 2.8081311800070053291**5)
89+
90+
def test_cigar(self):
91+
x = np.zeros(5)
92+
self.assertAlmostEqual(cigar(x), 0.0)
93+
94+
def test_cosine_mixture(self):
95+
x = np.zeros(5)
96+
self.assertAlmostEqual(cosine_mixture(x), -0.5)
97+
98+
def test_csendes(self):
99+
x = np.zeros(5)
100+
self.assertAlmostEqual(csendes(x), 0.0)
101+
102+
def test_dixon_price(self):
103+
x = np.array([2 ** -((2**i - 2) / 2**i) for i in range(1, 6)])
104+
self.assertAlmostEqual(dixon_price(x), 0.0)
105+
106+
def test_griewank(self):
107+
x = np.zeros(5)
108+
self.assertAlmostEqual(griewank(x), 0.0)
109+
110+
def test_katsuura(self):
111+
x = np.zeros(5)
112+
self.assertAlmostEqual(katsuura(x), 1.0)
113+
114+
def test_levy(self):
115+
x = np.full(5, 1)
116+
self.assertAlmostEqual(levy(x), 0.0)
117+
118+
def test_michalewicz(self):
119+
x = np.array([2.20290552014618, 1.57079632677565])
120+
self.assertAlmostEqual(michalewicz(x), -1.80130341009855321)
121+
122+
def test_perm1(self):
123+
x = np.arange(1, 6)
124+
self.assertAlmostEqual(perm1(x), 0.0)
125+
126+
def test_perm2(self):
127+
x = 1 / np.arange(1, 6)
128+
self.assertAlmostEqual(perm2(x), 0.0)
129+
130+
def test_pinter(self):
131+
x = np.zeros(5)
132+
self.assertAlmostEqual(pinter(x), 0.0)
133+
134+
def test_powell(self):
135+
x = np.zeros(5)
136+
self.assertAlmostEqual(powell(x), 0.0)
137+
138+
def test_quing(self):
139+
x = np.sqrt(np.arange(1, 6))
140+
self.assertAlmostEqual(quing(x), 0.0)
141+
142+
def test_quintic(self):
143+
x = np.full(5, -1)
144+
self.assertAlmostEqual(quintic(x), 0.0)
145+
146+
def test_rastrigin(self):
147+
x = np.zeros(5)
148+
self.assertAlmostEqual(rastrigin(x), 0.0)
149+
150+
def test_rosenbrock(self):
151+
x = np.full(5, 1)
152+
self.assertAlmostEqual(rosenbrock(x), 0.0)
153+
154+
def test_salomon(self):
155+
x = np.zeros(5)
156+
self.assertAlmostEqual(rastrigin(x), 0.0)
157+
158+
def test_schaffer2(self):
159+
x = np.zeros(5)
160+
self.assertAlmostEqual(schaffer2(x), 0.0)
161+
162+
def test_schaffer4(self):
163+
x1 = np.array([0, 1.253131828792882])
164+
x2 = np.array([0, -1.253131828792882])
165+
x3 = np.array([1.253131828792882, 0])
166+
x4 = np.array([-1.253131828792882, 0])
167+
self.assertAlmostEqual(schaffer4(x1), 0.292578632035980)
168+
self.assertAlmostEqual(schaffer4(x2), 0.292578632035980)
169+
self.assertAlmostEqual(schaffer4(x3), 0.292578632035980)
170+
self.assertAlmostEqual(schaffer4(x4), 0.292578632035980)
171+
172+
def test_schwefel(self):
173+
x = np.full(5, 420.968746)
174+
self.assertAlmostEqual(schwefel(x), 0.0)
175+
176+
def test_schwefel21(self):
177+
x = np.zeros(5)
178+
self.assertAlmostEqual(schwefel21(x), 0.0)
179+
180+
def test_schwefel22(self):
181+
x = np.zeros(5)
182+
self.assertAlmostEqual(schwefel22(x), 0.0)
183+
184+
def test_sphere(self):
185+
x = np.zeros(5)
186+
self.assertAlmostEqual(sphere(x), 0.0)
187+
188+
def test_step(self):
189+
x = np.full(5, 0.5)
190+
self.assertAlmostEqual(step(x), 0.0)
191+
192+
def test_step2(self):
193+
x = np.full(5, 0.5)
194+
self.assertAlmostEqual(step(x), 0.0)
195+
196+
def test_styblinski_tang(self):
197+
x = np.full(5, -2.903534018185960)
198+
self.assertAlmostEqual(styblinski_tang(x), -39.16616570377142 * 5)
199+
200+
def test_trid(self):
201+
x = np.array([6, 10, 12, 12, 10, 6])
202+
self.assertAlmostEqual(trid(x), -50)
203+
204+
def test_weierstrass(self):
205+
x = np.zeros(5)
206+
self.assertAlmostEqual(weierstrass(x), 0.0)
207+
208+
def test_whitley(self):
209+
x = np.full(5, 1)
210+
self.assertAlmostEqual(whitley(x), 0.0)
211+
212+
def test_zakharov(self):
213+
x = np.zeros(5)
214+
self.assertAlmostEqual(zakharov(x), 0.0)

0 commit comments

Comments
 (0)