1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.math4.neuralnet.sofm;
19
20 import org.junit.Test;
21 import org.junit.Assert;
22
23 import static org.junit.jupiter.api.Assertions.assertThrows;
24
25
26
27
28 public class LearningFactorFunctionFactoryTest {
29
30 @Test
31 public void testExponentialDecayPrecondition0() {
32 assertThrows(IllegalArgumentException.class, () ->
33 LearningFactorFunctionFactory.exponentialDecay(0d, 0d, 2));
34 }
35
36 @Test
37 public void testExponentialDecayPrecondition1() {
38 assertThrows(IllegalArgumentException.class, () ->
39 LearningFactorFunctionFactory.exponentialDecay(1 + 1e-10, 0d, 2));
40 }
41
42 @Test
43 public void testExponentialDecayPrecondition2() {
44 assertThrows(IllegalArgumentException.class, () ->
45 LearningFactorFunctionFactory.exponentialDecay(1d, 0d, 2));
46 }
47
48 @Test
49 public void testExponentialDecayPrecondition3() {
50 assertThrows(IllegalArgumentException.class, () ->
51 LearningFactorFunctionFactory.exponentialDecay(1d, 1d, 100));
52 }
53
54 @Test
55 public void testExponentialDecayPrecondition4() {
56 assertThrows(IllegalArgumentException.class, () ->
57 LearningFactorFunctionFactory.exponentialDecay(1d, 0.2, 0));
58 }
59
60 @Test
61 public void testExponentialDecayTrivial() {
62 final int n = 65;
63 final double init = 0.5;
64 final double valueAtN = 0.1;
65 final LearningFactorFunction f
66 = LearningFactorFunctionFactory.exponentialDecay(init, valueAtN, n);
67
68 Assert.assertEquals(init, f.value(0), 0d);
69 Assert.assertEquals(valueAtN, f.value(n), 0d);
70 Assert.assertEquals(0, f.value(Long.MAX_VALUE), 0d);
71 }
72
73 @Test
74 public void testQuasiSigmoidDecayPrecondition0() {
75 assertThrows(IllegalArgumentException.class, () ->
76 LearningFactorFunctionFactory.quasiSigmoidDecay(0d, -1d, 2));
77 }
78
79 @Test
80 public void testQuasiSigmoidDecayPrecondition1() {
81 assertThrows(IllegalArgumentException.class, () ->
82 LearningFactorFunctionFactory.quasiSigmoidDecay(1 + 1e-10, -1d, 2));
83 }
84
85 @Test
86 public void testQuasiSigmoidDecayPrecondition3() {
87 assertThrows(IllegalArgumentException.class, () ->
88 LearningFactorFunctionFactory.quasiSigmoidDecay(1d, 0d, 100));
89 }
90
91 @Test
92 public void testQuasiSigmoidDecayPrecondition4() {
93 assertThrows(IllegalArgumentException.class, () ->
94 LearningFactorFunctionFactory.quasiSigmoidDecay(1d, -1d, 0));
95 }
96
97 @Test
98 public void testQuasiSigmoidDecayTrivial() {
99 final int n = 65;
100 final double init = 0.5;
101 final double slope = -1e-1;
102 final LearningFactorFunction f
103 = LearningFactorFunctionFactory.quasiSigmoidDecay(init, slope, n);
104
105 Assert.assertEquals(init, f.value(0), 0d);
106
107 Assert.assertEquals(slope, f.value(n) - f.value(n - 1), 1e-2);
108 Assert.assertEquals(0, f.value(Long.MAX_VALUE), 0d);
109 }
110
111 }