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
22 import org.junit.After;
23 import org.junit.Before;
24 import org.junit.Test;
25
26
27
28
29
30
31
32 public class TestProductSigmoidalMembershipFunction extends BaseMembershipFunctionTest<ProductSigmoidalMembershipFunction> {
33
34 protected ProductSigmoidalMembershipFunction mf;
35
36 private final double a1 = 2.0;
37 private final double c1 = 3.0;
38 private final double a2 = -5.0;
39 private final double c2 = 8.0;
40
41 private final double[][] expected = new double[101][2];
42
43 @Override
44 protected ProductSigmoidalMembershipFunction makeMembershipFunction() {
45 return new ProductSigmoidalMembershipFunction(a1, c1, a2, c2);
46 }
47
48
49
50
51 @Before
52 public void setUp() throws Exception {
53 mf = makeMembershipFunction();
54
55
56
57
58
59
60 expected[0] = new double[] { 0.0000, 0.0025 };
61 expected[1] = new double[] { 0.1000, 0.0030 };
62 expected[2] = new double[] { 0.2000, 0.0037 };
63 expected[3] = new double[] { 0.3000, 0.0045 };
64 expected[4] = new double[] { 0.4000, 0.0055 };
65 expected[5] = new double[] { 0.5000, 0.0067 };
66 expected[6] = new double[] { 0.6000, 0.0082 };
67 expected[7] = new double[] { 0.7000, 0.0100 };
68 expected[8] = new double[] { 0.8000, 0.0121 };
69 expected[9] = new double[] { 0.9000, 0.0148 };
70 expected[10] = new double[] { 1.0000, 0.0180 };
71 expected[11] = new double[] { 1.1000, 0.0219 };
72 expected[12] = new double[] { 1.2000, 0.0266 };
73 expected[13] = new double[] { 1.3000, 0.0323 };
74 expected[14] = new double[] { 1.4000, 0.0392 };
75 expected[15] = new double[] { 1.5000, 0.0474 };
76 expected[16] = new double[] { 1.6000, 0.0573 };
77 expected[17] = new double[] { 1.7000, 0.0691 };
78 expected[18] = new double[] { 1.8000, 0.0832 };
79 expected[19] = new double[] { 1.9000, 0.0998 };
80 expected[20] = new double[] { 2.0000, 0.1192 };
81 expected[21] = new double[] { 2.1000, 0.1419 };
82 expected[22] = new double[] { 2.2000, 0.1680 };
83 expected[23] = new double[] { 2.3000, 0.1978 };
84 expected[24] = new double[] { 2.4000, 0.2315 };
85 expected[25] = new double[] { 2.5000, 0.2689 };
86 expected[26] = new double[] { 2.6000, 0.3100 };
87 expected[27] = new double[] { 2.7000, 0.3543 };
88 expected[28] = new double[] { 2.8000, 0.4013 };
89 expected[29] = new double[] { 2.9000, 0.4502 };
90 expected[30] = new double[] { 3.0000, 0.5000 };
91 expected[31] = new double[] { 3.1000, 0.5498 };
92 expected[32] = new double[] { 3.2000, 0.5987 };
93 expected[33] = new double[] { 3.3000, 0.6457 };
94 expected[34] = new double[] { 3.4000, 0.6900 };
95 expected[35] = new double[] { 3.5000, 0.7311 };
96 expected[36] = new double[] { 3.6000, 0.7685 };
97 expected[37] = new double[] { 3.7000, 0.8022 };
98 expected[38] = new double[] { 3.8000, 0.8320 };
99 expected[39] = new double[] { 3.9000, 0.8581 };
100 expected[40] = new double[] { 4.0000, 0.8808 };
101 expected[41] = new double[] { 4.1000, 0.9002 };
102 expected[42] = new double[] { 4.2000, 0.9168 };
103 expected[43] = new double[] { 4.3000, 0.9309 };
104 expected[44] = new double[] { 4.4000, 0.9427 };
105 expected[45] = new double[] { 4.5000, 0.9526 };
106 expected[46] = new double[] { 4.6000, 0.9608 };
107 expected[47] = new double[] { 4.7000, 0.9677 };
108 expected[48] = new double[] { 4.8000, 0.9734 };
109 expected[49] = new double[] { 4.9000, 0.9781 };
110 expected[50] = new double[] { 5.0000, 0.9820 };
111 expected[51] = new double[] { 5.1000, 0.9852 };
112 expected[52] = new double[] { 5.2000, 0.9879 };
113 expected[53] = new double[] { 5.3000, 0.9900 };
114 expected[54] = new double[] { 5.4000, 0.9918 };
115 expected[55] = new double[] { 5.5000, 0.9933 };
116 expected[56] = new double[] { 5.6000, 0.9945 };
117 expected[57] = new double[] { 5.7000, 0.9955 };
118 expected[58] = new double[] { 5.8000, 0.9963 };
119 expected[59] = new double[] { 5.9000, 0.9970 };
120 expected[60] = new double[] { 6.0000, 0.9975 };
121 expected[61] = new double[] { 6.1000, 0.9979 };
122 expected[62] = new double[] { 6.2000, 0.9982 };
123 expected[63] = new double[] { 6.3000, 0.9984 };
124 expected[64] = new double[] { 6.4000, 0.9986 };
125 expected[65] = new double[] { 6.5000, 0.9985 };
126 expected[66] = new double[] { 6.6000, 0.9983 };
127 expected[67] = new double[] { 6.7000, 0.9979 };
128 expected[68] = new double[] { 6.8000, 0.9970 };
129 expected[69] = new double[] { 6.9000, 0.9955 };
130 expected[70] = new double[] { 7.0000, 0.9930 };
131 expected[71] = new double[] { 7.1000, 0.9887 };
132 expected[72] = new double[] { 7.2000, 0.9818 };
133 expected[73] = new double[] { 7.3000, 0.9705 };
134 expected[74] = new double[] { 7.4000, 0.9524 };
135 expected[75] = new double[] { 7.5000, 0.9240 };
136 expected[76] = new double[] { 7.6000, 0.8807 };
137 expected[77] = new double[] { 7.7000, 0.8175 };
138 expected[78] = new double[] { 7.8000, 0.7310 };
139 expected[79] = new double[] { 7.9000, 0.6224 };
140 expected[80] = new double[] { 8.0000, 0.5000 };
141 expected[81] = new double[] { 8.1000, 0.3775 };
142 expected[82] = new double[] { 8.2000, 0.2689 };
143 expected[83] = new double[] { 8.3000, 0.1824 };
144 expected[84] = new double[] { 8.4000, 0.1192 };
145 expected[85] = new double[] { 8.5000, 0.0759 };
146 expected[86] = new double[] { 8.6000, 0.0474 };
147 expected[87] = new double[] { 8.7000, 0.0293 };
148 expected[88] = new double[] { 8.8000, 0.0180 };
149 expected[89] = new double[] { 8.9000, 0.0110 };
150 expected[90] = new double[] { 9.0000, 0.0067 };
151 expected[91] = new double[] { 9.1000, 0.0041 };
152 expected[92] = new double[] { 9.2000, 0.0025 };
153 expected[93] = new double[] { 9.3000, 0.0015 };
154 expected[94] = new double[] { 9.4000, 0.0009 };
155 expected[95] = new double[] { 9.5000, 0.0006 };
156 expected[96] = new double[] { 9.6000, 0.0003 };
157 expected[97] = new double[] { 9.7000, 0.0002 };
158 expected[98] = new double[] { 9.8000, 0.0001 };
159 expected[99] = new double[] { 9.9000, 0.0001 };
160 expected[100] = new double[] { 10.0000, 0.0000 };
161
162 }
163
164
165
166
167 @After
168 public void tearDown() throws Exception {
169 mf = null;
170 }
171
172
173
174
175 @Test
176 public void testEvaluate() {
177 final NumberFormat nf = NumberFormat.getInstance(Locale.US);
178 nf.setMaximumFractionDigits(4);
179 nf.setRoundingMode(RoundingMode.HALF_UP);
180 int i = 0;
181 for(double x = 0.0 ; x <= 10.0 ; x+=0.1) {
182 double y = Double.parseDouble(nf.format(mf.apply(x)));
183 assertEquals(Double.valueOf(expected[i][1]), Double.valueOf(y));
184 i++;
185 }
186 }
187
188 }