1
2
3
4
5
6
7
8
9
10
11
12
13
14 package fuzzy.mf;
15
16 import static org.junit.Assert.assertEquals;
17
18 import java.math.RoundingMode;
19 import java.text.NumberFormat;
20 import java.util.Locale;
21 import java.util.function.Function;
22
23 import org.junit.After;
24 import org.junit.Before;
25 import org.junit.Test;
26
27
28
29
30
31
32
33 public class TestDifferentialSigmoidalMembershipFunction extends BaseMembershipFunctionTest<Function<?, ?>> {
34
35 protected DifferentialSigmoidalMembershipFunction mf;
36
37 private final double a1 = 5.0;
38 private final double c1 = 2.0;
39 private final double a2 = 5.0;
40 private final double c2 = 7.0;
41
42 private final double[][] expected = new double[101][2];
43
44 @Override
45 protected DifferentialSigmoidalMembershipFunction makeMembershipFunction() {
46 return new DifferentialSigmoidalMembershipFunction(a1, c1, a2, c2);
47 }
48
49
50
51
52 @Before
53 public void setUp() throws Exception {
54 mf = makeMembershipFunction();
55
56
57
58
59
60
61
62 expected[0] = new double[]{0.0000, 0.0000};
63 expected[1] = new double[]{0.1000, 0.0001};
64 expected[2] = new double[]{0.2000, 0.0001};
65 expected[3] = new double[]{0.3000, 0.0002};
66 expected[4] = new double[]{0.4000, 0.0003};
67 expected[5] = new double[]{0.5000, 0.0006};
68 expected[6] = new double[]{0.6000, 0.0009};
69 expected[7] = new double[]{0.7000, 0.0015};
70 expected[8] = new double[]{0.8000, 0.0025};
71 expected[9] = new double[]{0.9000, 0.0041};
72 expected[10] = new double[]{1.0000, 0.0067};
73 expected[11] = new double[]{1.1000, 0.0110};
74 expected[12] = new double[]{1.2000, 0.0180};
75 expected[13] = new double[]{1.3000, 0.0293};
76 expected[14] = new double[]{1.4000, 0.0474};
77 expected[15] = new double[]{1.5000, 0.0759};
78 expected[16] = new double[]{1.6000, 0.1192};
79 expected[17] = new double[]{1.7000, 0.1824};
80 expected[18] = new double[]{1.8000, 0.2689};
81 expected[19] = new double[]{1.9000, 0.3775};
82 expected[20] = new double[]{2.0000, 0.5000};
83 expected[21] = new double[]{2.1000, 0.6225};
84 expected[22] = new double[]{2.2000, 0.7311};
85 expected[23] = new double[]{2.3000, 0.8176};
86 expected[24] = new double[]{2.4000, 0.8808};
87 expected[25] = new double[]{2.5000, 0.9241};
88 expected[26] = new double[]{2.6000, 0.9526};
89 expected[27] = new double[]{2.7000, 0.9707};
90 expected[28] = new double[]{2.8000, 0.9820};
91 expected[29] = new double[]{2.9000, 0.9890};
92 expected[30] = new double[]{3.0000, 0.9933};
93 expected[31] = new double[]{3.1000, 0.9959};
94 expected[32] = new double[]{3.2000, 0.9975};
95 expected[33] = new double[]{3.3000, 0.9985};
96 expected[34] = new double[]{3.4000, 0.9991};
97 expected[35] = new double[]{3.5000, 0.9994};
98 expected[36] = new double[]{3.6000, 0.9997};
99 expected[37] = new double[]{3.7000, 0.9998};
100 expected[38] = new double[]{3.8000, 0.9999};
101 expected[39] = new double[]{3.9000, 0.9999};
102 expected[40] = new double[]{4.0000, 1.0000};
103 expected[41] = new double[]{4.1000, 1.0000};
104 expected[42] = new double[]{4.2000, 1.0000};
105 expected[43] = new double[]{4.3000, 1.0000};
106 expected[44] = new double[]{4.4000, 1.0000};
107 expected[45] = new double[]{4.5000, 1.0000};
108 expected[46] = new double[]{4.6000, 1.0000};
109 expected[47] = new double[]{4.7000, 1.0000};
110 expected[48] = new double[]{4.8000, 1.0000};
111 expected[49] = new double[]{4.9000, 1.0000};
112 expected[50] = new double[]{5.0000, 1.0000};
113 expected[51] = new double[]{5.1000, 0.9999};
114 expected[52] = new double[]{5.2000, 0.9999};
115 expected[53] = new double[]{5.3000, 0.9998};
116 expected[54] = new double[]{5.4000, 0.9997};
117 expected[55] = new double[]{5.5000, 0.9994};
118 expected[56] = new double[]{5.6000, 0.9991};
119 expected[57] = new double[]{5.7000, 0.9985};
120 expected[58] = new double[]{5.8000, 0.9975};
121 expected[59] = new double[]{5.9000, 0.9959};
122 expected[60] = new double[]{6.0000, 0.9933};
123 expected[61] = new double[]{6.1000, 0.9890};
124 expected[62] = new double[]{6.2000, 0.9820};
125 expected[63] = new double[]{6.3000, 0.9707};
126 expected[64] = new double[]{6.4000, 0.9526};
127 expected[65] = new double[]{6.5000, 0.9241};
128 expected[66] = new double[]{6.6000, 0.8808};
129 expected[67] = new double[]{6.7000, 0.8176};
130 expected[68] = new double[]{6.8000, 0.7311};
131 expected[69] = new double[]{6.9000, 0.6225};
132 expected[70] = new double[]{7.0000, 0.5000};
133 expected[71] = new double[]{7.1000, 0.3775};
134 expected[72] = new double[]{7.2000, 0.2689};
135 expected[73] = new double[]{7.3000, 0.1824};
136 expected[74] = new double[]{7.4000, 0.1192};
137 expected[75] = new double[]{7.5000, 0.0759};
138 expected[76] = new double[]{7.6000, 0.0474};
139 expected[77] = new double[]{7.7000, 0.0293};
140 expected[78] = new double[]{7.8000, 0.0180};
141 expected[79] = new double[]{7.9000, 0.0110};
142 expected[80] = new double[]{8.0000, 0.0067};
143 expected[81] = new double[]{8.1000, 0.0041};
144 expected[82] = new double[]{8.2000, 0.0025};
145 expected[83] = new double[]{8.3000, 0.0015};
146 expected[84] = new double[]{8.4000, 0.0009};
147 expected[85] = new double[]{8.5000, 0.0006};
148 expected[86] = new double[]{8.6000, 0.0003};
149 expected[87] = new double[]{8.7000, 0.0002};
150 expected[88] = new double[]{8.8000, 0.0001};
151 expected[89] = new double[]{8.9000, 0.0001};
152 expected[90] = new double[]{9.0000, 0.0000};
153 expected[91] = new double[]{9.1000, 0.0000};
154 expected[92] = new double[]{9.2000, 0.0000};
155 expected[93] = new double[]{9.3000, 0.0000};
156 expected[94] = new double[]{9.4000, 0.0000};
157 expected[95] = new double[]{9.5000, 0.0000};
158 expected[96] = new double[]{9.6000, 0.0000};
159 expected[97] = new double[]{9.7000, 0.0000};
160 expected[98] = new double[]{9.8000, 0.0000};
161 expected[99] = new double[]{9.9000, 0.0000};
162 expected[100] = new double[]{10.0000, 0.0000};
163 }
164
165
166
167
168 @After
169 public void tearDown() throws Exception {
170 mf = null;
171 }
172
173
174
175
176 @Test
177 public void testEvaluate() {
178 final NumberFormat nf = NumberFormat.getInstance(Locale.US);
179 nf.setMaximumFractionDigits(4);
180 nf.setRoundingMode(RoundingMode.HALF_UP);
181 int i = 0;
182 for(double x = 0.0 ; x <= 10.0 ; x+=0.1) {
183 double y = Double.parseDouble(nf.format(mf.apply(x)));
184 assertEquals(Double.valueOf(expected[i][1]), Double.valueOf(y));
185 i++;
186 }
187 }
188
189 }