OSDN Git Service

cflib は plugins プロジェクトから,Stigmata直下のプロジェクトに移行したため,このリポジトリからは削除した.
[stigmata/stigmata-plugins.git] / osb / src / test / java / jp / sourceforge / stigmata / birthmarks / osb / hungarian / HungarianMethodSolutionTest.java
1 package jp.sourceforge.stigmata.birthmarks.osb.hungarian;\r
2 \r
3 import org.junit.Assert;\r
4 import org.junit.Before;\r
5 import org.junit.Test;\r
6 \r
7 public class HungarianMethodSolutionTest{\r
8     @Before\r
9     public void setUp(){\r
10     }\r
11 \r
12     @Test\r
13     public void testBasic(){\r
14         CostMatrix matrix = new CostMatrix(new double[][] {\r
15             { 0.2, 0.2, 0.333, 0.1, },\r
16             { 0.75, 0.75, 0.666, 0.2, },\r
17             { 0.3, 0.3, 0.4, 0.15, },\r
18             { 0.2, 0.2, 1, 0.2, },\r
19         }, true);\r
20         HungarianMethod method = new HungarianMethod(matrix);\r
21 \r
22         Assert.assertEquals(0.8,   matrix.getValue(0, 0), 1E-6);\r
23         Assert.assertEquals(0.8,   matrix.getValue(0, 1), 1E-6);\r
24         Assert.assertEquals(0.667, matrix.getValue(0, 2), 1E-6);\r
25         Assert.assertEquals(0.9,   matrix.getValue(0, 3), 1E-6);\r
26         Assert.assertEquals(0.25,  matrix.getValue(1, 0), 1E-6);\r
27         Assert.assertEquals(0.25,  matrix.getValue(1, 1), 1E-6);\r
28         Assert.assertEquals(0.334, matrix.getValue(1, 2), 1E-6);\r
29         Assert.assertEquals(0.8,   matrix.getValue(1, 3), 1E-6);\r
30         Assert.assertEquals(0.7,   matrix.getValue(2, 0), 1E-6);\r
31         Assert.assertEquals(0.7,   matrix.getValue(2, 1), 1E-6);\r
32         Assert.assertEquals(0.6,   matrix.getValue(2, 2), 1E-6);\r
33         Assert.assertEquals(0.85,  matrix.getValue(2, 3), 1E-6);\r
34         Assert.assertEquals(0.8,   matrix.getValue(3, 0), 1E-6);\r
35         Assert.assertEquals(0.8,   matrix.getValue(3, 1), 1E-6);\r
36         Assert.assertEquals(0,     matrix.getValue(3, 2), 1E-6);\r
37         Assert.assertEquals(0.8,   matrix.getValue(3, 3), 1E-6);\r
38 \r
39         matrix.minimize();\r
40         \r
41         Assert.assertEquals(0.133, matrix.getValue(0, 0), 1E-6);\r
42         Assert.assertEquals(0.133, matrix.getValue(0, 1), 1E-6);\r
43         Assert.assertEquals(0,     matrix.getValue(0, 2), 1E-6);\r
44         Assert.assertEquals(0,     matrix.getValue(0, 3), 1E-6);\r
45         Assert.assertEquals(0,     matrix.getValue(1, 0), 1E-6);\r
46         Assert.assertEquals(0,     matrix.getValue(1, 1), 1E-6);\r
47         Assert.assertEquals(0.084, matrix.getValue(1, 2), 1E-6);\r
48         Assert.assertEquals(0.317, matrix.getValue(1, 3), 1E-6);\r
49         Assert.assertEquals(0.1,   matrix.getValue(2, 0), 1E-6);\r
50         Assert.assertEquals(0.1,   matrix.getValue(2, 1), 1E-6);\r
51         Assert.assertEquals(0,     matrix.getValue(2, 2), 1E-6);\r
52         Assert.assertEquals(0.017, matrix.getValue(2, 3), 1E-6);\r
53         Assert.assertEquals(0.8,   matrix.getValue(3, 0), 1E-6);\r
54         Assert.assertEquals(0.8,   matrix.getValue(3, 1), 1E-6);\r
55         Assert.assertEquals(0,     matrix.getValue(3, 2), 1E-6);\r
56         Assert.assertEquals(0.567, matrix.getValue(3, 3), 1E-6);\r
57 \r
58         Line[] lines1 = method.getLines();\r
59         Assert.assertEquals(3, lines1.length);\r
60 \r
61         Assert.assertEquals(Line.Direction.COLUMN, lines1[0].getDirection());\r
62         Assert.assertEquals(2, lines1[0].getIndex());\r
63         Assert.assertEquals(3, lines1[0].getCount());\r
64         Assert.assertEquals("[index: 2, count: 3(0) (COLUMN)]", lines1[0].toString());\r
65 \r
66         Assert.assertEquals(Line.Direction.ROW, lines1[1].getDirection());\r
67         Assert.assertEquals(1, lines1[1].getIndex());\r
68         Assert.assertEquals(2, lines1[1].getCount());\r
69         Assert.assertEquals("[index: 1, count: 2(1) (ROW)]", lines1[1].toString());\r
70 \r
71         Assert.assertEquals(Line.Direction.COLUMN, lines1[2].getDirection());\r
72         Assert.assertEquals(3, lines1[2].getIndex());\r
73         Assert.assertEquals(1, lines1[2].getCount());\r
74         Assert.assertEquals("[index: 3, count: 1(1) (COLUMN)]", lines1[2].toString());\r
75 \r
76         method.reduceMatrix(lines1);\r
77         Assert.assertEquals(0.033, matrix.getValue(0, 0), 1E-6);\r
78         Assert.assertEquals(0.033, matrix.getValue(0, 1), 1E-6);\r
79         Assert.assertEquals(0,     matrix.getValue(0, 2), 1E-6);\r
80         Assert.assertEquals(0,     matrix.getValue(0, 3), 1E-6);\r
81         Assert.assertEquals(0,     matrix.getValue(1, 0), 1E-6);\r
82         Assert.assertEquals(0,     matrix.getValue(1, 1), 1E-6);\r
83         Assert.assertEquals(0.184, matrix.getValue(1, 2), 1E-6);\r
84         Assert.assertEquals(0.417, matrix.getValue(1, 3), 1E-6);\r
85         Assert.assertEquals(0,     matrix.getValue(2, 0), 1E-6);\r
86         Assert.assertEquals(0,     matrix.getValue(2, 1), 1E-6);\r
87         Assert.assertEquals(0,     matrix.getValue(2, 2), 1E-6);\r
88         Assert.assertEquals(0.017, matrix.getValue(2, 3), 1E-6);\r
89         Assert.assertEquals(0.7,   matrix.getValue(3, 0), 1E-6);\r
90         Assert.assertEquals(0.7,   matrix.getValue(3, 1), 1E-6);\r
91         Assert.assertEquals(0,     matrix.getValue(3, 2), 1E-6);\r
92         Assert.assertEquals(0.567, matrix.getValue(3, 3), 1E-6);\r
93 \r
94         Line[] lines2 = method.getLines();\r
95         Assert.assertEquals(4, lines2.length);\r
96 \r
97         Assert.assertEquals(Line.Direction.COLUMN, lines2[0].getDirection());\r
98         Assert.assertEquals(2, lines2[0].getIndex());\r
99         Assert.assertEquals(3, lines2[0].getCount());\r
100 \r
101         Assert.assertEquals(Line.Direction.ROW, lines2[1].getDirection());\r
102         Assert.assertEquals(2, lines2[1].getIndex());\r
103         Assert.assertEquals(2, lines2[1].getCount());\r
104 \r
105         Assert.assertEquals(Line.Direction.ROW, lines2[2].getDirection());\r
106         Assert.assertEquals(1, lines2[2].getIndex());\r
107         Assert.assertEquals(2, lines2[2].getCount());\r
108 \r
109         Assert.assertEquals(Line.Direction.COLUMN, lines2[3].getDirection());\r
110         Assert.assertEquals(3, lines2[3].getIndex());\r
111         Assert.assertEquals(1, lines2[3].getCount());\r
112 \r
113         Assert.assertEquals(2.15, method.solve(), 1E-6);\r
114 \r
115         Cell[] cell = method.getSolutions();\r
116         Assert.assertEquals(4, cell.length);\r
117 \r
118         Assert.assertEquals(0, cell[0].getX());\r
119         Assert.assertEquals(3, cell[0].getY());\r
120         Assert.assertEquals(0.1, cell[0].getValue(), 1E-6);\r
121 \r
122         Assert.assertEquals(1, cell[1].getX());\r
123         Assert.assertEquals(0, cell[1].getY());\r
124         Assert.assertEquals(0.75, cell[1].getValue(), 1E-6);\r
125 \r
126         Assert.assertEquals(2, cell[2].getX());\r
127         Assert.assertEquals(1, cell[2].getY());\r
128         Assert.assertEquals(0.3, cell[2].getValue(), 1E-6);\r
129 \r
130         Assert.assertEquals(3, cell[3].getX());\r
131         Assert.assertEquals(2, cell[3].getY());\r
132         Assert.assertEquals(1, cell[3].getValue(), 1E-6);\r
133     }\r
134 }\r