source: ip/src/main/java/geniusweb/ip/inputOutput/Output.java@ 52

Last change on this file since 52 was 52, checked in by ruud, 14 months ago

Fixed small issues in domaineditor.

File size: 11.8 KB
Line 
1package geniusweb.ip.inputOutput;
2
3import java.util.Arrays;
4
5import geniusweb.ip.general.Combinations;
6import geniusweb.ip.general.General;
7import geniusweb.ip.ipSolver.Node;
8import geniusweb.ip.ipSolver.Subspace;
9import geniusweb.ip.mainSolver.Result;
10
11public class Output {
12 private StringBuffer time_numOfRemainingCoalitions;
13 private StringBuffer time_solutionQuality;
14 private StringBuffer time_boundQuality;
15 private StringBuffer numOfSearchedCoalitions_solutionQuality;
16 private StringBuffer numOfSearchedCoalitions_boundQuality;
17 private double[] prevValues_time_numOfRemainingCoalitions;
18 private double[] prevValues_time_solutionQuality;
19 private double[] prevValues_time_boundQuality;
20 private double[] prevValues_numOfSearchedCoalitions_solutionQuality;
21 private double[] prevValues_numOfSearchedCoalitions_boundQuality;
22
23 // ******************************************************************************************************
24
25 /**
26 * Initialization
27 */
28 public Output(Input input) {
29 prevValues_time_solutionQuality = new double[2];
30 prevValues_time_boundQuality = new double[2];
31 prevValues_numOfSearchedCoalitions_boundQuality = new double[2];
32 prevValues_time_numOfRemainingCoalitions = new double[2];
33 prevValues_numOfSearchedCoalitions_solutionQuality = new double[2];
34
35 prevValues_time_solutionQuality[0] = 0;
36 prevValues_time_solutionQuality[1] = 0;
37 prevValues_time_boundQuality[0] = 0;
38 prevValues_time_boundQuality[1] = 0;
39 prevValues_numOfSearchedCoalitions_boundQuality[0] = 0;
40 prevValues_numOfSearchedCoalitions_boundQuality[1] = 0;
41 prevValues_time_numOfRemainingCoalitions[0] = 0;
42 prevValues_time_numOfRemainingCoalitions[1] = 0;
43 prevValues_numOfSearchedCoalitions_solutionQuality[0] = 0;
44 prevValues_numOfSearchedCoalitions_solutionQuality[1] = 0;
45
46 time_numOfRemainingCoalitions = new StringBuffer();
47 time_solutionQuality = new StringBuffer();
48 time_boundQuality = new StringBuffer();
49 numOfSearchedCoalitions_solutionQuality = new StringBuffer();
50 numOfSearchedCoalitions_boundQuality = new StringBuffer();
51 }
52
53 // ******************************************************************************************************
54
55 /**
56 * Empty the contents of the String-Buffers to the relevant output files.
57 */
58 public void emptyStringBufferContentsIntoOutputFiles(Input input) {
59 if (input.printInterimResultsOfIPToFiles) {
60 General.createFolder(input.outputFolder);
61 String tempStr = input.outputFolder + "/" + "(" + input.problemID
62 + ")_";
63
64 if (time_numOfRemainingCoalitions.length() != 0) {
65 General.printToFile(
66 tempStr + "time_numOfRemainingCoalitions.txt",
67 time_numOfRemainingCoalitions.toString(), false);
68 time_numOfRemainingCoalitions.setLength(0);
69 }
70 if (time_solutionQuality.length() != 0) {
71 General.printToFile(tempStr + "time_solutionQuality.txt",
72 time_solutionQuality.toString(), false);
73 time_solutionQuality.setLength(0);
74 }
75 if (time_boundQuality.length() != 0) {
76 General.printToFile(tempStr + "time_boundQuality.txt",
77 time_boundQuality.toString(), false);
78 time_boundQuality.setLength(0);
79 }
80 if (numOfSearchedCoalitions_solutionQuality.length() != 0) {
81 General.printToFile(
82 tempStr + "numOfSearchedCoalitions_solutionQuality.txt",
83 numOfSearchedCoalitions_solutionQuality.toString(),
84 false);
85 numOfSearchedCoalitions_solutionQuality.setLength(0);
86 }
87 if (numOfSearchedCoalitions_boundQuality.length() != 0) {
88 General.printToFile(
89 tempStr + "numOfSearchedCoalitions_boundQuality.txt",
90 numOfSearchedCoalitions_boundQuality.toString(), false);
91 numOfSearchedCoalitions_boundQuality.setLength(0);
92 }
93 }
94 }
95
96 // ******************************************************************************************************
97
98 /**
99 * Print the details of IP (or ODP-IP) to string buffers.
100 */
101 public void printCurrentResultsOfIPToStringBuffer_ifPrevResultsAreDifferent(
102 Input input, Result result) {
103 if (input.printInterimResultsOfIPToFiles) {
104 long timeThatElapsedSinceIPStarted = System.currentTimeMillis()
105 - result.ipStartTime;
106 double boundQuality = result.ipUpperBoundOnOptimalValue
107 / result.get_ipValueOfBestCSFound();
108
109 if ((prevValues_time_solutionQuality[0] != timeThatElapsedSinceIPStarted)
110 && (prevValues_time_solutionQuality[1] != result
111 .get_ipValueOfBestCSFound())) {
112 time_solutionQuality.append(timeThatElapsedSinceIPStarted + ", "
113 + result.get_ipValueOfBestCSFound() + "\n");
114 prevValues_time_solutionQuality[0] = timeThatElapsedSinceIPStarted;
115 prevValues_time_solutionQuality[1] = result
116 .get_ipValueOfBestCSFound();
117 }
118 if ((prevValues_time_boundQuality[0] != timeThatElapsedSinceIPStarted)
119 && (prevValues_time_boundQuality[1] != boundQuality)) {
120 time_boundQuality.append(timeThatElapsedSinceIPStarted + ", "
121 + boundQuality + "\n");
122 prevValues_time_boundQuality[0] = timeThatElapsedSinceIPStarted;
123 prevValues_time_boundQuality[1] = boundQuality;
124 }
125 if ((prevValues_numOfSearchedCoalitions_boundQuality[0] != result.ipNumOfExpansions)
126 && (prevValues_numOfSearchedCoalitions_boundQuality[1] != boundQuality)) {
127 numOfSearchedCoalitions_boundQuality.append(
128 result.ipNumOfExpansions + ", " + boundQuality + "\n");
129 prevValues_numOfSearchedCoalitions_boundQuality[0] = result.ipNumOfExpansions;
130 prevValues_numOfSearchedCoalitions_boundQuality[1] = boundQuality;
131 }
132
133 if ((prevValues_numOfSearchedCoalitions_solutionQuality[0] != result.ipNumOfExpansions)
134 && (prevValues_numOfSearchedCoalitions_solutionQuality[1] != result
135 .get_ipValueOfBestCSFound())) {
136 numOfSearchedCoalitions_solutionQuality
137 .append(result.ipNumOfExpansions + ", "
138 + result.get_ipValueOfBestCSFound() + "\n");
139 prevValues_numOfSearchedCoalitions_solutionQuality[0] = result.ipNumOfExpansions;
140 prevValues_numOfSearchedCoalitions_solutionQuality[1] = result
141 .get_ipValueOfBestCSFound();
142 }
143 }
144 }
145
146 // ******************************************************************************************************
147
148 /**
149 * print the current results of IP to the relevant output files
150 */
151 public void printFinalResultsOfIPToFiles(Input input, Result result) {
152 if (input.printInterimResultsOfIPToFiles) {
153 General.createFolder(input.outputFolder);
154
155 // Get the optimal coalition structure, and convert it to string
156 String bestCSFoundByIP_asString;
157 if (result.get_ipBestCSFound() == null)
158 bestCSFoundByIP_asString = "null";
159 else
160 bestCSFoundByIP_asString = Arrays
161 .deepToString(result.get_ipBestCSFound());
162
163 // Get the level of the optimal coalition structure, and convert it
164 // to string
165 String levelOfBestCSFoundByIP_asString;
166 if (result.get_ipBestCSFound() == null)
167 levelOfBestCSFoundByIP_asString = "null";
168 else
169 levelOfBestCSFoundByIP_asString = (new Integer(
170 (result.get_ipBestCSFound()).length)).toString();
171
172 // Get the integer partition of the optimal coailtion structure, and
173 // convert it to string
174 String integerPartitionOfBestCSFoundByIP_asString;
175 if (result.get_ipBestCSFound() == null)
176 integerPartitionOfBestCSFoundByIP_asString = "null";
177 else {
178 int[][] ipBestCSFound = result.get_ipBestCSFound();
179 int[] integerPartitionOfBestCSFoundByIP = new int[ipBestCSFound.length];
180 for (int i = 0; i < ipBestCSFound.length; i++)
181 integerPartitionOfBestCSFoundByIP[i] = ipBestCSFound[i].length;
182 integerPartitionOfBestCSFoundByIP_asString = General
183 .convertArrayToString(
184 integerPartitionOfBestCSFoundByIP);
185 }
186
187 // Print the results
188 String tempStr = input.outputFolder + "/";
189 General.printToFile(tempStr + "bestCSFoundByIP.txt",
190 bestCSFoundByIP_asString + "\n", false);
191 General.printToFile(
192 tempStr + "integerPartitionOfBestCSFoundByIP.txt",
193 integerPartitionOfBestCSFoundByIP_asString + "\n", false);
194 General.printToFile(tempStr + "levelOfBestCSFoundByIP.txt",
195 levelOfBestCSFoundByIP_asString + "\n", false);
196 General.printToFile(tempStr + "valueOfBestCSFoundByIP.txt",
197 result.get_ipValueOfBestCSFound() + "\n", false);
198
199 tempStr += "(" + input.problemID + ")_";
200 long timeThatElapsedSinceIPStarted = System.currentTimeMillis()
201 - result.ipStartTime;
202 double boundQuality = 1;// result.ipUpperBoundOnOptimalValue /
203 // result.ipValueOfBestCSFound;
204
205 General.printToFile(tempStr + "time_solutionQuality.txt",
206 timeThatElapsedSinceIPStarted + ", "
207 + result.get_ipValueOfBestCSFound() + "\n",
208 false);
209 General.printToFile(tempStr + "time_boundQuality.txt",
210 timeThatElapsedSinceIPStarted + ", " + boundQuality + "\n",
211 false);
212 General.printToFile(
213 tempStr + "numOfSearchedCoalitions_boundQuality.txt",
214 result.ipNumOfExpansions + ", " + boundQuality + "\n",
215 false);
216 General.printToFile(
217 tempStr + "numOfSearchedCoalitions_solutionQuality.txt",
218 result.ipNumOfExpansions + ", "
219 + result.get_ipValueOfBestCSFound() + "\n",
220 false);
221 }
222 }
223
224 // ******************************************************************************************************
225
226 /**
227 * Print the size, upperBound, and lowerBound for each subspace
228 */
229 public void printDetailsOfSubspaces(Input input, Result result) {
230 if (input.printDetailsOfSubspaces) {
231 // Count the number of possible coalition structures
232 long numOfCS = Combinations.getNumOfCS(input.numOfAgents);
233
234 Node[][] nodes = result.ipIntegerPartitionGraph.nodes;
235 double[] percentagePerLevel = new double[nodes.length];
236 double maxPercentage = 0;
237 int ii = 0;
238 int jj = 0;
239 for (int i = 0; i < nodes.length; i++) {
240 System.out.println("");
241 percentagePerLevel[i] = 0;
242
243 for (int j = 0; j < nodes[i].length; j++) {
244 Subspace curSubspace = nodes[i][j].subspace;
245
246 double percentagePerSubspace = (double) (curSubspace.sizeOfSubspace
247 * 100) / numOfCS;
248 if (maxPercentage < percentagePerSubspace) {
249 maxPercentage = percentagePerSubspace;
250 ii = i; // Store the location of the biggest subspace
251 jj = j; // Store the location of the biggest subspace
252 }
253
254 // Update the percentage for the current level
255 percentagePerLevel[i] += percentagePerSubspace;
256
257 // Printing the details
258 General.printArray("subspace[" + i + "][" + j + "] = ",
259 curSubspace.integers);
260 System.out.println(", size = "
261 + curSubspace.sizeOfSubspace + " ("
262 + General.setDecimalPrecision(percentagePerSubspace,
263 5)
264 + "%)," + " UB = " + curSubspace.UB + ", LB = "
265 + curSubspace.LB + ", AVG = " + curSubspace.Avg);
266 }
267 }
268 // Print the percentage per level
269 System.out.println("");
270 for (int i = 0; i < nodes.length; i++)
271 System.out.println("level" + (i + 1) + ": "
272 + General.setDecimalPrecision(percentagePerLevel[i], 5)
273 + "%\n");
274
275 // Printing the biggest subspace:
276 Subspace biggestSubspace = nodes[ii][jj].subspace;
277 General.printArray("The biggest subspace is:",
278 biggestSubspace.integers);
279 System.out.println(" (" + maxPercentage + "%)\n");
280 }
281 }
282
283 // ******************************************************************************************************
284
285 /**
286 * Prints to a file the time required to search a given subspace
287 */
288 public void printTimeRequiredForEachSubspace(Subspace subspace,
289 Input input) {
290 // Print the time required to search this sub-space
291 if (input.printTimeTakenByIPForEachSubspace) {
292 General.createFolder(input.outputFolder);
293 String integerPartitionAsString = General
294 .convertArrayToString(subspace.integers);
295 System.out.println("Searching " + integerPartitionAsString
296 + " took " + subspace.timeToSearchThisSubspace + " ms.");
297 General.printToFile(
298 input.outputFolder + "/" + "(" + input.problemID + ")_"
299 + "ipTimeForEachSubspace.txt",
300 "Searching " + integerPartitionAsString + " took "
301 + subspace.timeToSearchThisSubspace + "\n",
302 false);
303 }
304 }
305}
Note: See TracBrowser for help on using the repository browser.