1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.math4.neuralnet.twod;
19
20 import java.util.Collection;
21 import java.util.Set;
22 import java.util.HashSet;
23 import java.util.List;
24 import java.util.stream.StreamSupport;
25 import java.util.stream.Collectors;
26
27 import org.junit.Assert;
28 import org.junit.Test;
29
30 import org.apache.commons.rng.UniformRandomProvider;
31 import org.apache.commons.rng.simple.RandomSource;
32
33 import org.apache.commons.math4.neuralnet.FeatureInitializer;
34 import org.apache.commons.math4.neuralnet.FeatureInitializerFactory;
35 import org.apache.commons.math4.neuralnet.Network;
36 import org.apache.commons.math4.neuralnet.Neuron;
37 import org.apache.commons.math4.neuralnet.SquareNeighbourhood;
38
39 import static org.junit.jupiter.api.Assertions.assertThrows;
40
41
42
43
44
45 public class NeuronSquareMesh2DTest {
46
47 private final UniformRandomProvider rng = RandomSource.SPLIT_MIX_64.create();
48 private final FeatureInitializer init = FeatureInitializerFactory.uniform(rng, 0, 2);
49
50 @Test
51 public void testMinimalNetworkSize1() {
52 final FeatureInitializer[] initArray = {init};
53
54 assertThrows(IllegalArgumentException.class, () ->
55 new NeuronSquareMesh2D(1, false,
56 2, false,
57 SquareNeighbourhood.VON_NEUMANN,
58 initArray));
59 }
60
61 @Test
62 public void testMinimalNetworkSize2() {
63 final FeatureInitializer[] initArray = {init};
64
65 assertThrows(IllegalArgumentException.class, () ->
66 new NeuronSquareMesh2D(2, false,
67 0, false,
68 SquareNeighbourhood.VON_NEUMANN,
69 initArray));
70 }
71
72 @Test
73 public void testGetFeaturesSize() {
74 final FeatureInitializer[] initArray = {init, init, init};
75
76 final Network net = new NeuronSquareMesh2D(2, false,
77 2, false,
78 SquareNeighbourhood.VON_NEUMANN,
79 initArray).getNetwork();
80 Assert.assertEquals(3, net.getFeaturesSize());
81 }
82
83 @Test
84 public void testAccessors() {
85 final FeatureInitializer[] initArray = {init};
86 NeuronSquareMesh2D map;
87
88 for (SquareNeighbourhood type : SquareNeighbourhood.values()) {
89 map = new NeuronSquareMesh2D(4, false, 2, true, type, initArray);
90 Assert.assertFalse(map.isWrappedRow());
91 Assert.assertTrue(map.isWrappedColumn());
92 Assert.assertEquals(type, map.getSquareNeighbourhood());
93
94 map = new NeuronSquareMesh2D(3, true, 4, false, type, initArray);
95 Assert.assertTrue(map.isWrappedRow());
96 Assert.assertFalse(map.isWrappedColumn());
97 Assert.assertEquals(type, map.getSquareNeighbourhood());
98 }
99 }
100
101
102
103
104
105
106
107
108
109 @Test
110 public void test2x2Network() {
111 final FeatureInitializer[] initArray = {init};
112 final Network net = new NeuronSquareMesh2D(2, false,
113 2, false,
114 SquareNeighbourhood.VON_NEUMANN,
115 initArray).getNetwork();
116 Collection<Neuron> neighbours;
117
118
119 for (long id : new long[] {0, 3 }) {
120 neighbours = net.getNeighbours(net.getNeuron(id));
121 for (long nId : new long[] {1, 2 }) {
122 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
123 }
124
125 Assert.assertEquals(2, neighbours.size());
126 }
127
128
129 for (long id : new long[] {1, 2 }) {
130 neighbours = net.getNeighbours(net.getNeuron(id));
131 for (long nId : new long[] {0, 3 }) {
132 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
133 }
134
135 Assert.assertEquals(2, neighbours.size());
136 }
137 }
138
139
140
141
142
143
144
145
146
147 @Test
148 public void test2x2Network2() {
149 final FeatureInitializer[] initArray = {init};
150 final Network net = new NeuronSquareMesh2D(2, false,
151 2, false,
152 SquareNeighbourhood.MOORE,
153 initArray).getNetwork();
154 Collection<Neuron> neighbours;
155
156
157 for (long id : new long[] {0, 1, 2, 3 }) {
158 neighbours = net.getNeighbours(net.getNeuron(id));
159 for (long nId : new long[] {0, 1, 2, 3 }) {
160 if (id != nId) {
161 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
162 }
163 }
164 }
165 }
166
167
168
169
170
171
172
173
174
175 @Test
176 public void test3x2CylinderNetwork() {
177 final FeatureInitializer[] initArray = {init};
178 final Network net = new NeuronSquareMesh2D(2, false,
179 3, true,
180 SquareNeighbourhood.VON_NEUMANN,
181 initArray).getNetwork();
182 Collection<Neuron> neighbours;
183
184
185 neighbours = net.getNeighbours(net.getNeuron(0));
186 for (long nId : new long[] {1, 2, 3 }) {
187 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
188 }
189
190 Assert.assertEquals(3, neighbours.size());
191
192
193 neighbours = net.getNeighbours(net.getNeuron(1));
194 for (long nId : new long[] {0, 2, 4 }) {
195 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
196 }
197
198 Assert.assertEquals(3, neighbours.size());
199
200
201 neighbours = net.getNeighbours(net.getNeuron(2));
202 for (long nId : new long[] {0, 1, 5 }) {
203 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
204 }
205
206 Assert.assertEquals(3, neighbours.size());
207
208
209 neighbours = net.getNeighbours(net.getNeuron(3));
210 for (long nId : new long[] {0, 4, 5 }) {
211 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
212 }
213
214 Assert.assertEquals(3, neighbours.size());
215
216
217 neighbours = net.getNeighbours(net.getNeuron(4));
218 for (long nId : new long[] {1, 3, 5 }) {
219 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
220 }
221
222 Assert.assertEquals(3, neighbours.size());
223
224
225 neighbours = net.getNeighbours(net.getNeuron(5));
226 for (long nId : new long[] {2, 3, 4 }) {
227 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
228 }
229
230 Assert.assertEquals(3, neighbours.size());
231 }
232
233
234
235
236
237
238
239
240
241 @Test
242 public void test3x2CylinderNetwork2() {
243 final FeatureInitializer[] initArray = {init};
244 final Network net = new NeuronSquareMesh2D(2, false,
245 3, true,
246 SquareNeighbourhood.MOORE,
247 initArray).getNetwork();
248 Collection<Neuron> neighbours;
249
250
251 for (long id : new long[] {0, 1, 2, 3, 4, 5 }) {
252 neighbours = net.getNeighbours(net.getNeuron(id));
253 for (long nId : new long[] {0, 1, 2, 3, 4, 5 }) {
254 if (id != nId) {
255 Assert.assertTrue("id=" + id + " nId=" + nId,
256 neighbours.contains(net.getNeuron(nId)));
257 }
258 }
259 }
260 }
261
262
263
264
265
266
267
268
269
270
271
272
273 @Test
274 public void test3x3TorusNetwork() {
275 final FeatureInitializer[] initArray = {init};
276 final Network net = new NeuronSquareMesh2D(3, true,
277 3, true,
278 SquareNeighbourhood.VON_NEUMANN,
279 initArray).getNetwork();
280 Collection<Neuron> neighbours;
281
282
283 neighbours = net.getNeighbours(net.getNeuron(0));
284 for (long nId : new long[] {1, 2, 3, 6 }) {
285 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
286 }
287
288 Assert.assertEquals(4, neighbours.size());
289
290
291 neighbours = net.getNeighbours(net.getNeuron(1));
292 for (long nId : new long[] {0, 2, 4, 7 }) {
293 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
294 }
295
296 Assert.assertEquals(4, neighbours.size());
297
298
299 neighbours = net.getNeighbours(net.getNeuron(2));
300 for (long nId : new long[] {0, 1, 5, 8 }) {
301 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
302 }
303
304 Assert.assertEquals(4, neighbours.size());
305
306
307 neighbours = net.getNeighbours(net.getNeuron(3));
308 for (long nId : new long[] {0, 4, 5, 6 }) {
309 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
310 }
311
312 Assert.assertEquals(4, neighbours.size());
313
314
315 neighbours = net.getNeighbours(net.getNeuron(4));
316 for (long nId : new long[] {1, 3, 5, 7 }) {
317 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
318 }
319
320 Assert.assertEquals(4, neighbours.size());
321
322
323 neighbours = net.getNeighbours(net.getNeuron(5));
324 for (long nId : new long[] {2, 3, 4, 8 }) {
325 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
326 }
327
328 Assert.assertEquals(4, neighbours.size());
329
330
331 neighbours = net.getNeighbours(net.getNeuron(6));
332 for (long nId : new long[] {0, 3, 7, 8 }) {
333 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
334 }
335
336 Assert.assertEquals(4, neighbours.size());
337
338
339 neighbours = net.getNeighbours(net.getNeuron(7));
340 for (long nId : new long[] {1, 4, 6, 8 }) {
341 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
342 }
343
344 Assert.assertEquals(4, neighbours.size());
345
346
347 neighbours = net.getNeighbours(net.getNeuron(8));
348 for (long nId : new long[] {2, 5, 6, 7 }) {
349 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
350 }
351
352 Assert.assertEquals(4, neighbours.size());
353 }
354
355
356
357
358
359
360
361
362
363
364
365
366 @Test
367 public void test3x3TorusNetwork2() {
368 final FeatureInitializer[] initArray = {init};
369 final Network net = new NeuronSquareMesh2D(3, true,
370 3, true,
371 SquareNeighbourhood.MOORE,
372 initArray).getNetwork();
373 Collection<Neuron> neighbours;
374
375
376 for (long id : new long[] {0, 1, 2, 3, 4, 5, 6, 7, 8 }) {
377 neighbours = net.getNeighbours(net.getNeuron(id));
378 for (long nId : new long[] {0, 1, 2, 3, 4, 5, 6, 7, 8 }) {
379 if (id != nId) {
380 Assert.assertTrue("id=" + id + " nId=" + nId,
381 neighbours.contains(net.getNeuron(nId)));
382 }
383 }
384 }
385 }
386
387
388
389
390
391
392
393
394
395
396
397
398 @Test
399 public void test3x3CylinderNetwork() {
400 final FeatureInitializer[] initArray = {init};
401 final Network net = new NeuronSquareMesh2D(3, false,
402 3, true,
403 SquareNeighbourhood.MOORE,
404 initArray).getNetwork();
405 Collection<Neuron> neighbours;
406
407
408 neighbours = net.getNeighbours(net.getNeuron(0));
409 for (long nId : new long[] {1, 2, 3, 4, 5}) {
410 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
411 }
412
413 Assert.assertEquals(5, neighbours.size());
414
415
416 neighbours = net.getNeighbours(net.getNeuron(1));
417 for (long nId : new long[] {0, 2, 3, 4, 5 }) {
418 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
419 }
420
421 Assert.assertEquals(5, neighbours.size());
422
423
424 neighbours = net.getNeighbours(net.getNeuron(2));
425 for (long nId : new long[] {0, 1, 3, 4, 5 }) {
426 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
427 }
428
429 Assert.assertEquals(5, neighbours.size());
430
431
432 neighbours = net.getNeighbours(net.getNeuron(3));
433 for (long nId : new long[] {0, 1, 2, 4, 5, 6, 7, 8 }) {
434 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
435 }
436
437 Assert.assertEquals(8, neighbours.size());
438
439
440 neighbours = net.getNeighbours(net.getNeuron(4));
441 for (long nId : new long[] {0, 1, 2, 3, 5, 6, 7, 8 }) {
442 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
443 }
444
445 Assert.assertEquals(8, neighbours.size());
446
447
448 neighbours = net.getNeighbours(net.getNeuron(5));
449 for (long nId : new long[] {0, 1, 2, 3, 4, 6, 7, 8 }) {
450 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
451 }
452
453 Assert.assertEquals(8, neighbours.size());
454
455
456 neighbours = net.getNeighbours(net.getNeuron(6));
457 for (long nId : new long[] {3, 4, 5, 7, 8 }) {
458 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
459 }
460
461 Assert.assertEquals(5, neighbours.size());
462
463
464 neighbours = net.getNeighbours(net.getNeuron(7));
465 for (long nId : new long[] {3, 4, 5, 6, 8 }) {
466 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
467 }
468
469 Assert.assertEquals(5, neighbours.size());
470
471
472 neighbours = net.getNeighbours(net.getNeuron(8));
473 for (long nId : new long[] {3, 4, 5, 6, 7 }) {
474 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
475 }
476
477 Assert.assertEquals(5, neighbours.size());
478 }
479
480
481
482
483
484
485
486
487
488
489
490
491 @Test
492 public void test3x3CylinderNetwork2() {
493 final FeatureInitializer[] initArray = {init};
494 final Network net = new NeuronSquareMesh2D(3, false,
495 3, false,
496 SquareNeighbourhood.MOORE,
497 initArray).getNetwork();
498 Collection<Neuron> neighbours;
499
500
501 neighbours = net.getNeighbours(net.getNeuron(0));
502 for (long nId : new long[] {1, 3, 4}) {
503 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
504 }
505
506 Assert.assertEquals(3, neighbours.size());
507
508
509 neighbours = net.getNeighbours(net.getNeuron(1));
510 for (long nId : new long[] {0, 2, 3, 4, 5 }) {
511 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
512 }
513
514 Assert.assertEquals(5, neighbours.size());
515
516
517 neighbours = net.getNeighbours(net.getNeuron(2));
518 for (long nId : new long[] {1, 4, 5 }) {
519 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
520 }
521
522 Assert.assertEquals(3, neighbours.size());
523
524
525 neighbours = net.getNeighbours(net.getNeuron(3));
526 for (long nId : new long[] {0, 1, 4, 6, 7 }) {
527 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
528 }
529
530 Assert.assertEquals(5, neighbours.size());
531
532
533 neighbours = net.getNeighbours(net.getNeuron(4));
534 for (long nId : new long[] {0, 1, 2, 3, 5, 6, 7, 8 }) {
535 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
536 }
537
538 Assert.assertEquals(8, neighbours.size());
539
540
541 neighbours = net.getNeighbours(net.getNeuron(5));
542 for (long nId : new long[] {1, 2, 4, 7, 8 }) {
543 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
544 }
545
546 Assert.assertEquals(5, neighbours.size());
547
548
549 neighbours = net.getNeighbours(net.getNeuron(6));
550 for (long nId : new long[] {3, 4, 7 }) {
551 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
552 }
553
554 Assert.assertEquals(3, neighbours.size());
555
556
557 neighbours = net.getNeighbours(net.getNeuron(7));
558 for (long nId : new long[] {3, 4, 5, 6, 8 }) {
559 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
560 }
561
562 Assert.assertEquals(5, neighbours.size());
563
564
565 neighbours = net.getNeighbours(net.getNeuron(8));
566 for (long nId : new long[] {4, 5, 7 }) {
567 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
568 }
569
570 Assert.assertEquals(3, neighbours.size());
571 }
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590 @Test
591 public void testConcentricNeighbourhood() {
592 final FeatureInitializer[] initArray = {init};
593 final Network net = new NeuronSquareMesh2D(5, true,
594 5, true,
595 SquareNeighbourhood.VON_NEUMANN,
596 initArray).getNetwork();
597
598 Collection<Neuron> neighbours;
599 Collection<Neuron> exclude = new HashSet<>();
600
601
602 neighbours = net.getNeighbours(net.getNeuron(12));
603 for (long nId : new long[] {7, 11, 13, 17 }) {
604 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
605 }
606
607 Assert.assertEquals(4, neighbours.size());
608
609
610 exclude.add(net.getNeuron(12));
611
612 exclude.addAll(neighbours);
613
614 neighbours = net.getNeighbours(neighbours, exclude);
615 for (long nId : new long[] {6, 8, 16, 18, 2, 10, 14, 22 }) {
616 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
617 }
618
619 Assert.assertEquals(8, neighbours.size());
620 }
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639 @Test
640 public void testConcentricNeighbourhood2() {
641 final FeatureInitializer[] initArray = {init};
642 final Network net = new NeuronSquareMesh2D(5, true,
643 5, true,
644 SquareNeighbourhood.MOORE,
645 initArray).getNetwork();
646
647 Collection<Neuron> neighbours;
648 Collection<Neuron> exclude = new HashSet<>();
649
650
651 neighbours = net.getNeighbours(net.getNeuron(8));
652 for (long nId : new long[] {2, 3, 4, 7, 9, 12, 13, 14}) {
653 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
654 }
655
656 Assert.assertEquals(8, neighbours.size());
657
658
659 exclude.add(net.getNeuron(8));
660
661 exclude.addAll(neighbours);
662
663 neighbours = net.getNeighbours(neighbours, exclude);
664 for (long nId : new long[] {1, 6, 11, 16, 17, 18, 19, 15, 10, 5, 0, 20, 24, 23, 22, 21}) {
665 Assert.assertTrue(neighbours.contains(net.getNeuron(nId)));
666 }
667
668 Assert.assertEquals(16, neighbours.size());
669 }
670
671
672
673
674
675
676
677
678
679 @Test
680 public void testGetNeuron() {
681 final FeatureInitializer[] initArray = {init};
682 final NeuronSquareMesh2D net = new NeuronSquareMesh2D(2, false,
683 2, true,
684 SquareNeighbourhood.VON_NEUMANN,
685 initArray);
686 Assert.assertEquals(0, net.getNeuron(0, 0).getIdentifier());
687 Assert.assertEquals(1, net.getNeuron(0, 1).getIdentifier());
688 Assert.assertEquals(2, net.getNeuron(1, 0).getIdentifier());
689 Assert.assertEquals(3, net.getNeuron(1, 1).getIdentifier());
690
691 try {
692 net.getNeuron(2, 0);
693 Assert.fail("exception expected");
694 } catch (IllegalArgumentException e) {
695
696 }
697 try {
698 net.getNeuron(0, 2);
699 Assert.fail("exception expected");
700 } catch (IllegalArgumentException e) {
701
702 }
703 try {
704 net.getNeuron(-1, 0);
705 Assert.fail("exception expected");
706 } catch (IllegalArgumentException e) {
707
708 }
709 try {
710 net.getNeuron(0, -1);
711 Assert.fail("exception expected");
712 } catch (IllegalArgumentException e) {
713
714 }
715 }
716
717
718
719
720
721
722
723
724
725
726
727
728 @Test
729 public void testGetNeuronAlongDirection() {
730 final FeatureInitializer[] initArray = {init};
731 final NeuronSquareMesh2D net = new NeuronSquareMesh2D(3, false,
732 3, false,
733 SquareNeighbourhood.VON_NEUMANN,
734 initArray);
735 Assert.assertEquals(0, net.getNeuron(1, 1,
736 NeuronSquareMesh2D.HorizontalDirection.LEFT,
737 NeuronSquareMesh2D.VerticalDirection.UP).getIdentifier());
738 Assert.assertEquals(1, net.getNeuron(1, 1,
739 NeuronSquareMesh2D.HorizontalDirection.CENTER,
740 NeuronSquareMesh2D.VerticalDirection.UP).getIdentifier());
741 Assert.assertEquals(2, net.getNeuron(1, 1,
742 NeuronSquareMesh2D.HorizontalDirection.RIGHT,
743 NeuronSquareMesh2D.VerticalDirection.UP).getIdentifier());
744 Assert.assertEquals(3, net.getNeuron(1, 1,
745 NeuronSquareMesh2D.HorizontalDirection.LEFT,
746 NeuronSquareMesh2D.VerticalDirection.CENTER).getIdentifier());
747 Assert.assertEquals(4, net.getNeuron(1, 1,
748 NeuronSquareMesh2D.HorizontalDirection.CENTER,
749 NeuronSquareMesh2D.VerticalDirection.CENTER).getIdentifier());
750 Assert.assertEquals(5, net.getNeuron(1, 1,
751 NeuronSquareMesh2D.HorizontalDirection.RIGHT,
752 NeuronSquareMesh2D.VerticalDirection.CENTER).getIdentifier());
753 Assert.assertEquals(6, net.getNeuron(1, 1,
754 NeuronSquareMesh2D.HorizontalDirection.LEFT,
755 NeuronSquareMesh2D.VerticalDirection.DOWN).getIdentifier());
756 Assert.assertEquals(7, net.getNeuron(1, 1,
757 NeuronSquareMesh2D.HorizontalDirection.CENTER,
758 NeuronSquareMesh2D.VerticalDirection.DOWN).getIdentifier());
759 Assert.assertEquals(8, net.getNeuron(1, 1,
760 NeuronSquareMesh2D.HorizontalDirection.RIGHT,
761 NeuronSquareMesh2D.VerticalDirection.DOWN).getIdentifier());
762
763
764 Assert.assertNull(net.getNeuron(0, 1,
765 NeuronSquareMesh2D.HorizontalDirection.CENTER,
766 NeuronSquareMesh2D.VerticalDirection.UP));
767 Assert.assertNull(net.getNeuron(1, 0,
768 NeuronSquareMesh2D.HorizontalDirection.LEFT,
769 NeuronSquareMesh2D.VerticalDirection.CENTER));
770 Assert.assertNull(net.getNeuron(2, 1,
771 NeuronSquareMesh2D.HorizontalDirection.CENTER,
772 NeuronSquareMesh2D.VerticalDirection.DOWN));
773 Assert.assertNull(net.getNeuron(1, 2,
774 NeuronSquareMesh2D.HorizontalDirection.RIGHT,
775 NeuronSquareMesh2D.VerticalDirection.CENTER));
776 }
777
778
779
780
781
782
783
784
785
786
787
788
789 @Test
790 public void testGetNeuronAlongDirectionWrappedMap() {
791 final FeatureInitializer[] initArray = {init};
792 final NeuronSquareMesh2D net = new NeuronSquareMesh2D(3, true,
793 3, true,
794 SquareNeighbourhood.VON_NEUMANN,
795 initArray);
796
797 Assert.assertEquals(3, net.getNeuron(0, 0,
798 NeuronSquareMesh2D.HorizontalDirection.CENTER,
799 NeuronSquareMesh2D.VerticalDirection.DOWN).getIdentifier());
800
801 Assert.assertEquals(2, net.getNeuron(0, 0,
802 NeuronSquareMesh2D.HorizontalDirection.LEFT,
803 NeuronSquareMesh2D.VerticalDirection.CENTER).getIdentifier());
804 Assert.assertEquals(7, net.getNeuron(0, 0,
805 NeuronSquareMesh2D.HorizontalDirection.RIGHT,
806 NeuronSquareMesh2D.VerticalDirection.UP).getIdentifier());
807 Assert.assertEquals(8, net.getNeuron(0, 0,
808 NeuronSquareMesh2D.HorizontalDirection.LEFT,
809 NeuronSquareMesh2D.VerticalDirection.UP).getIdentifier());
810 Assert.assertEquals(6, net.getNeuron(0, 0,
811 NeuronSquareMesh2D.HorizontalDirection.CENTER,
812 NeuronSquareMesh2D.VerticalDirection.UP).getIdentifier());
813 Assert.assertEquals(5, net.getNeuron(0, 0,
814 NeuronSquareMesh2D.HorizontalDirection.LEFT,
815 NeuronSquareMesh2D.VerticalDirection.DOWN).getIdentifier());
816
817
818 Assert.assertEquals(1, net.getNeuron(1, 2,
819 NeuronSquareMesh2D.HorizontalDirection.LEFT,
820 NeuronSquareMesh2D.VerticalDirection.UP).getIdentifier());
821
822 Assert.assertEquals(0, net.getNeuron(1, 2,
823 NeuronSquareMesh2D.HorizontalDirection.RIGHT,
824 NeuronSquareMesh2D.VerticalDirection.UP).getIdentifier());
825 Assert.assertEquals(3, net.getNeuron(1, 2,
826 NeuronSquareMesh2D.HorizontalDirection.RIGHT,
827 NeuronSquareMesh2D.VerticalDirection.CENTER).getIdentifier());
828 Assert.assertEquals(6, net.getNeuron(1, 2,
829 NeuronSquareMesh2D.HorizontalDirection.RIGHT,
830 NeuronSquareMesh2D.VerticalDirection.DOWN).getIdentifier());
831 }
832
833 @Test
834 public void testIterator() {
835 final FeatureInitializer[] initArray = {init};
836 final NeuronSquareMesh2D map = new NeuronSquareMesh2D(3, true,
837 3, true,
838 SquareNeighbourhood.VON_NEUMANN,
839 initArray);
840 final Set<Neuron> fromMap = new HashSet<>();
841 for (Neuron n : map) {
842 fromMap.add(n);
843 }
844
845 final Network net = map.getNetwork();
846 final Set<Neuron> fromNet = new HashSet<>();
847 for (Neuron n : net) {
848 fromNet.add(n);
849 }
850
851 for (Neuron n : fromMap) {
852 Assert.assertTrue(fromNet.contains(n));
853 }
854 for (Neuron n : fromNet) {
855 Assert.assertTrue(fromMap.contains(n));
856 }
857 }
858
859 @Test
860 public void testDataVisualization() {
861 final FeatureInitializer[] initArray = {init};
862 final NeuronSquareMesh2D map = new NeuronSquareMesh2D(3, true,
863 3, true,
864 SquareNeighbourhood.VON_NEUMANN,
865 initArray);
866
867
868
869 final List<double[]> data = StreamSupport.stream(map.spliterator(), false)
870 .map(n -> n.getFeatures())
871 .collect(Collectors.toList());
872 final NeuronSquareMesh2D.DataVisualization v = map.computeQualityIndicators(data);
873
874 final int numRows = map.getNumberOfRows();
875 final int numCols = map.getNumberOfColumns();
876
877
878 final double[][] hits = v.getNormalizedHits();
879 final double expectedHits = 1d / (numRows * numCols);
880 for (int i = 0; i < numRows; i++) {
881 for (int j = 0; j < numCols; j++) {
882 Assert.assertEquals(expectedHits, hits[i][j], 0d);
883 }
884 }
885
886
887 final double[][] qe = v.getQuantizationError();
888 final double expectedQE = 0;
889 for (int i = 0; i < numRows; i++) {
890 for (int j = 0; j < numCols; j++) {
891 Assert.assertEquals(expectedQE, qe[i][j], 0d);
892 }
893 }
894 }
895
896 }