Commit e146ab4e6bd169fdbbabf00005479e799bdc66f0
1 parent
67b613e8
Exists in
Standardized
and in
1 other branch
selecttable criteria
Showing
19 changed files
with
339 additions
and
79 deletions
Show diff stats
MODFIRE-Prototype/out/production/MODFIRE-Prototype/CustomPropagator2.class
No preview for this file type
MODFIRE-Prototype/out/production/MODFIRE-Prototype/GetInput.class
No preview for this file type
MODFIRE-Prototype/out/production/MODFIRE-Prototype/Main5Criteria.class
No preview for this file type
MODFIRE-Prototype/out/production/MODFIRE-Prototype/MainDistance.class
No preview for this file type
MODFIRE-Prototype/out/production/MODFIRE-Prototype/MainLimit.class
No preview for this file type
MODFIRE-Prototype/out/production/MODFIRE-Prototype/MainRegion.class
No preview for this file type
MODFIRE-Prototype/out/production/MODFIRE-Prototype/MainWithSpecific.class
No preview for this file type
MODFIRE-Prototype/out/production/MODFIRE-Prototype/MultiOutput.class
No preview for this file type
... | ... | @@ -0,0 +1,193 @@ |
1 | +3,20 | |
2 | +4,500 | |
3 | +5,500 | |
4 | +7,1 | |
5 | +19,2 | |
6 | +20,1 | |
7 | +21,1 | |
8 | +22,1 | |
9 | +23,1 | |
10 | +24,1 | |
11 | +29,1 | |
12 | +34,1 | |
13 | +39,1 | |
14 | +40,1 | |
15 | +41,3 | |
16 | +46,1 | |
17 | +59,500 | |
18 | +63,500 | |
19 | +64,1 | |
20 | +66,500 | |
21 | +90,500 | |
22 | +91,20 | |
23 | +92,3 | |
24 | +93,500 | |
25 | +95,1 | |
26 | +97,1 | |
27 | +98,2 | |
28 | +99,2 | |
29 | +100,2 | |
30 | +101,501 | |
31 | +102,500 | |
32 | +103,501 | |
33 | +104,500 | |
34 | +105,3 | |
35 | +106,3 | |
36 | +108,2 | |
37 | +109,500 | |
38 | +110,1 | |
39 | +135,308 | |
40 | +136,2 | |
41 | +138,1 | |
42 | +144,1 | |
43 | +153,304 | |
44 | +163,500 | |
45 | +164,1 | |
46 | +172,500 | |
47 | +173,500 | |
48 | +174,1 | |
49 | +177,1 | |
50 | +178,3 | |
51 | +180,1 | |
52 | +181,3 | |
53 | +184,1 | |
54 | +187,1 | |
55 | +194,500 | |
56 | +195,1 | |
57 | +196,2 | |
58 | +210,500 | |
59 | +218,1 | |
60 | +219,500 | |
61 | +225,500 | |
62 | +226,3 | |
63 | +227,3 | |
64 | +229,2 | |
65 | +230,1 | |
66 | +231,3 | |
67 | +235,1 | |
68 | +236,3 | |
69 | +237,3 | |
70 | +246,2 | |
71 | +247,1 | |
72 | +248,3 | |
73 | +250,1 | |
74 | +251,2 | |
75 | +255,3 | |
76 | +256,19 | |
77 | +257,19 | |
78 | +258,2 | |
79 | +259,500 | |
80 | +260,1 | |
81 | +266,1 | |
82 | +267,1 | |
83 | +268,1 | |
84 | +269,3 | |
85 | +270,501 | |
86 | +271,312 | |
87 | +272,1 | |
88 | +274,500 | |
89 | +275,1 | |
90 | +276,1 | |
91 | +277,500 | |
92 | +278,2 | |
93 | +297,1 | |
94 | +307,316 | |
95 | +348,1 | |
96 | +363,3 | |
97 | +364,1 | |
98 | +368,1 | |
99 | +369,3 | |
100 | +370,1 | |
101 | +371,500 | |
102 | +372,2 | |
103 | +373,3 | |
104 | +374,500 | |
105 | +375,3 | |
106 | +376,1 | |
107 | +377,1 | |
108 | +378,1 | |
109 | +379,500 | |
110 | +380,1 | |
111 | +381,1 | |
112 | +384,500 | |
113 | +385,500 | |
114 | +386,1 | |
115 | +387,1 | |
116 | +391,3 | |
117 | +408,1 | |
118 | +409,1 | |
119 | +410,3 | |
120 | +414,1 | |
121 | +427,500 | |
122 | +428,500 | |
123 | +429,500 | |
124 | +433,1 | |
125 | +458,500 | |
126 | +459,1 | |
127 | +460,3 | |
128 | +461,3 | |
129 | +464,3 | |
130 | +465,2 | |
131 | +470,502 | |
132 | +474,802 | |
133 | +483,500 | |
134 | +484,1 | |
135 | +501,2 | |
136 | +502,2 | |
137 | +503,1 | |
138 | +504,1 | |
139 | +505,2 | |
140 | +512,500 | |
141 | +533,500 | |
142 | +555,19 | |
143 | +556,3 | |
144 | +557,2 | |
145 | +558,2 | |
146 | +559,3 | |
147 | +560,1 | |
148 | +586,1 | |
149 | +587,1 | |
150 | +588,3 | |
151 | +589,15 | |
152 | +590,500 | |
153 | +591,19 | |
154 | +592,3 | |
155 | +605,3 | |
156 | +606,2 | |
157 | +611,500 | |
158 | +612,3 | |
159 | +614,1 | |
160 | +615,1 | |
161 | +616,1 | |
162 | +618,2 | |
163 | +619,2 | |
164 | +642,3 | |
165 | +655,800 | |
166 | +675,1 | |
167 | +678,3 | |
168 | +679,1 | |
169 | +682,2 | |
170 | +712,29 | |
171 | +713,2 | |
172 | +730,34 | |
173 | +731,1 | |
174 | +736,500 | |
175 | +737,308 | |
176 | +742,2 | |
177 | +743,2 | |
178 | +746,801 | |
179 | +748,801 | |
180 | +749,500 | |
181 | +755,1 | |
182 | +756,1 | |
183 | +757,1 | |
184 | +762,3 | |
185 | +763,1 | |
186 | +764,1 | |
187 | +767,1 | |
188 | +773,500 | |
189 | +774,3600 | |
190 | +775,304 | |
191 | +776,801 | |
192 | +777,801 | |
193 | +782,1 | ... | ... |
MODFIRE-Prototype/src/CustomPropagator2.java
... | ... | @@ -16,7 +16,7 @@ public class CustomPropagator2 extends org.chocosolver.solver.constraints.Propag |
16 | 16 | |
17 | 17 | |
18 | 18 | |
19 | - public CustomPropagator2(int ugIndex, UG[] nodes, IntVar[] ugs, int sum, IntVar[] woodYield) { | |
19 | + public CustomPropagator2(int ugIndex, UG[] nodes, IntVar[] ugs, int sum ) { | |
20 | 20 | super(ugs, PropagatorPriority.LINEAR, false); |
21 | 21 | this.ugIndex = ugIndex; |
22 | 22 | this.nodes = nodes; | ... | ... |
MODFIRE-Prototype/src/GetInput.java
... | ... | @@ -170,7 +170,7 @@ public class GetInput { |
170 | 170 | //the propagator takes as parameters the index of the UG we are starting out from |
171 | 171 | //the nodes with all the info, the constraint variable array and the area limit |
172 | 172 | if(nodes[ugIndex].valid) { |
173 | - new Constraint("Area Limit Constraint", new CustomPropagator2(ugIndex, nodes, ugs, areaLimit, woodYield)).post(); | |
173 | + new Constraint("Area Limit Constraint", new CustomPropagator2(ugIndex, nodes, ugs, areaLimit)).post(); | |
174 | 174 | } |
175 | 175 | } |
176 | 176 | ... | ... |
MODFIRE-Prototype/src/Main5Criteria.java
... | ... | @@ -311,7 +311,7 @@ public class Main5Criteria { |
311 | 311 | //the propagator takes as parameters the index of the UG we are starting out from |
312 | 312 | //the nodes with all the info, the constraint variable array and the area limit |
313 | 313 | if(nodes[ugIndex].valid) { |
314 | - new Constraint("Area Limit Constraint", new CustomPropagator2(ugIndex, nodes, ugs, areaLimit, woodYield)).post(); | |
314 | + new Constraint("Area Limit Constraint", new CustomPropagator2(ugIndex, nodes, ugs, areaLimit)).post(); | |
315 | 315 | } |
316 | 316 | } |
317 | 317 | ... | ... |
MODFIRE-Prototype/src/MainDistance.java
... | ... | @@ -295,7 +295,7 @@ public class MainDistance { |
295 | 295 | //the propagator takes as parameters the index of the UG we are starting out from |
296 | 296 | //the nodes with all the info, the constraint variable array and the area limit |
297 | 297 | if(nodes[ugIndex].valid) { |
298 | - new Constraint("Area Limit Constraint", new CustomPropagator2(ugIndex, nodes, ugs, areaLimit, woodYield)).post(); | |
298 | + new Constraint("Area Limit Constraint", new CustomPropagator2(ugIndex, nodes, ugs, areaLimit)).post(); | |
299 | 299 | } |
300 | 300 | } |
301 | 301 | ... | ... |
MODFIRE-Prototype/src/MainLimit.java
... | ... | @@ -278,7 +278,7 @@ public class MainLimit { |
278 | 278 | //the propagator takes as parameters the index of the UG we are starting out from |
279 | 279 | //the nodes with all the info, the constraint variable array and the area limit |
280 | 280 | if(nodes[ugIndex].valid) { |
281 | - new Constraint("Area Limit Constraint", new CustomPropagator2(ugIndex, nodes, ugs, areaLimit, woodYield)).post(); | |
281 | + new Constraint("Area Limit Constraint", new CustomPropagator2(ugIndex, nodes, ugs, areaLimit)).post(); | |
282 | 282 | } |
283 | 283 | } |
284 | 284 | ... | ... |
MODFIRE-Prototype/src/MainRegion.java
... | ... | @@ -281,7 +281,7 @@ public class MainRegion { |
281 | 281 | //the propagator takes as parameters the index of the UG we are starting out from |
282 | 282 | //the nodes with all the info, the constraint variable array and the area limit |
283 | 283 | if(nodes[ugIndex].valid) { |
284 | - new Constraint("Area Limit Constraint", new CustomPropagator2(ugIndex, nodes, ugs, areaLimit, woodYield)).post(); | |
284 | + new Constraint("Area Limit Constraint", new CustomPropagator2(ugIndex, nodes, ugs, areaLimit)).post(); | |
285 | 285 | } |
286 | 286 | } |
287 | 287 | ... | ... |
MODFIRE-Prototype/src/MainWithSpecific.java
... | ... | @@ -228,21 +228,8 @@ public class MainWithSpecific { |
228 | 228 | String fileDirectory = args[1]; |
229 | 229 | |
230 | 230 | ArrayList<Integer> islandUGs = new ArrayList<>(); |
231 | - /*File island = new File("i_east"); | |
232 | - Scanner islandReader = new Scanner(island); | |
233 | - while (islandReader.hasNextLine()) { | |
234 | - islandUGs.add(Integer.parseInt(islandReader.nextLine())); | |
235 | - | |
236 | - } | |
237 | - | |
238 | - island = new File("i_eastop"); | |
239 | - islandReader = new Scanner(island); | |
240 | - while (islandReader.hasNextLine()) { | |
241 | - islandUGs.add(Integer.parseInt(islandReader.nextLine())); | |
242 | 231 | |
243 | - }*/ | |
244 | - | |
245 | - File island = new File("subregions/ip_continent"); | |
232 | + File island = new File("subregions/i_top"); | |
246 | 233 | Scanner islandReader = new Scanner(island); |
247 | 234 | while (islandReader.hasNextLine()) { |
248 | 235 | islandUGs.add(Integer.parseInt(islandReader.nextLine())); |
... | ... | @@ -265,6 +252,31 @@ public class MainWithSpecific { |
265 | 252 | default: |
266 | 253 | R = 0;} |
267 | 254 | |
255 | + | |
256 | + | |
257 | + /*Set Flags | |
258 | + 0-woodYield | |
259 | + 1-Soil Loss | |
260 | + 2-Perc_r | |
261 | + 3-Biodiversity | |
262 | + 4-Cashflow | |
263 | + 5-Carbon Stock | |
264 | + 6-NPV | |
265 | + 7-Perc_rait | |
266 | + 8-R | |
267 | + 9-Rait | |
268 | + 10-Sbiom | |
269 | + */ | |
270 | + String[] varNames = new String[]{"WoodYield","SoilLoss","Perc_r","Biodiversity","Cashflow","CarbonStock","NPV","Perc_rait","R","Rait","Sbiom"}; | |
271 | + ArrayList<Boolean> flags = new ArrayList<Boolean>(); | |
272 | + for(int i = 0; i < 11; i++) { | |
273 | + flags.add(false); | |
274 | + } | |
275 | + for(int i = 4; i < args.length; i++) { | |
276 | + flags.set(Integer.parseInt(args[i]), true); | |
277 | + } | |
278 | + | |
279 | + | |
268 | 280 | Model m = new Model("Forest Management"); |
269 | 281 | |
270 | 282 | BufferedReader reader = new BufferedReader(new FileReader(fileDirectory + "/ugs_init.txt")); |
... | ... | @@ -283,6 +295,7 @@ public class MainWithSpecific { |
283 | 295 | |
284 | 296 | IntVar[] ugs = new IntVar[nUgs]; // same for the constraint variable array |
285 | 297 | |
298 | + | |
286 | 299 | IntVar[] woodYield = new IntVar[nUgs]; |
287 | 300 | |
288 | 301 | IntVar[] soillossTotal = new IntVar[nUgs]; |
... | ... | @@ -298,7 +311,6 @@ public class MainWithSpecific { |
298 | 311 | IntVar[] rait_total = new IntVar[nUgs]; |
299 | 312 | IntVar[] sbiom_total = new IntVar[nUgs]; |
300 | 313 | |
301 | - | |
302 | 314 | giveDomains(m, ugs, fileDirectory, woodYield, soillossTotal, perc_r_Total, biodiversity_total, cashflow_total, cstock_total, |
303 | 315 | npv_total, perc_rait_total, r_total, rait_total, sbiom_total, nodes, R_option); // reads the ugs_init file and initializes each variable with its possible prescription values as domain |
304 | 316 | |
... | ... | @@ -310,7 +322,7 @@ public class MainWithSpecific { |
310 | 322 | //the propagator takes as parameters the index of the UG we are starting out from |
311 | 323 | //the nodes with all the info, the constraint variable array and the area limit |
312 | 324 | if(nodes[ugIndex].valid) { |
313 | - new Constraint("Area Limit Constraint", new CustomPropagator2(ugIndex, nodes, ugs, areaLimit, woodYield)).post(); | |
325 | + new Constraint("Area Limit Constraint", new CustomPropagator2(ugIndex, nodes, ugs, areaLimit)).post(); | |
314 | 326 | } |
315 | 327 | } |
316 | 328 | |
... | ... | @@ -401,23 +413,41 @@ public class MainWithSpecific { |
401 | 413 | IntVar raitSum = m.intVar("RaitR"+R,0, 99999999); |
402 | 414 | IntVar sbiomSum = m.intVar("SbiomR"+R,0, 99999999); |
403 | 415 | |
404 | - | |
405 | - m.sum(woodYield,"=", woodSum).post(); | |
406 | - m.sum(soillossTotal,"=", soilSum).post(); | |
407 | - m.sum(perc_r_Total,"=", percRSum).post(); | |
408 | - | |
409 | - m.sum(biodiversity_total, "=", bioSum).post(); | |
410 | - m.sum(cashflow_total, "=", cashSum).post(); | |
411 | - //m.sum(cstock_total, "=", cstockSum).post(); | |
412 | - //m.sum(npv_total, "=", npvSum).post(); | |
413 | - //m.sum(perc_rait_total, "=", percRaitSum).post(); | |
414 | - //m.sum(r_total, "=", rSum).post(); | |
415 | - //m.sum(rait_total, "=", raitSum).post(); | |
416 | - // m.sum(sbiom_total, "=", sbiomSum).post(); | |
416 | + System.out.println(flags.get(0)); | |
417 | + System.out.println(flags.get(1)); | |
418 | + System.out.println(flags.get(2)); | |
419 | + | |
420 | + if(flags.get(0)) | |
421 | + m.sum(woodYield,"=", woodSum).post(); | |
422 | + if(flags.get(1)) | |
423 | + m.sum(soillossTotal,"=", soilSum).post(); | |
424 | + if(flags.get(2)) | |
425 | + m.sum(perc_r_Total,"=", percRSum).post(); | |
426 | + if(flags.get(3)) | |
427 | + m.sum(biodiversity_total, "=", bioSum).post(); | |
428 | + if(flags.get(4)) | |
429 | + m.sum(cashflow_total, "=", cashSum).post(); | |
430 | + if(flags.get(5)) | |
431 | + m.sum(cstock_total, "=", cstockSum).post(); | |
432 | + if(flags.get(6)) | |
433 | + m.sum(npv_total, "=", npvSum).post(); | |
434 | + if(flags.get(7)) | |
435 | + m.sum(perc_rait_total, "=", percRaitSum).post(); | |
436 | + if(flags.get(8)) | |
437 | + m.sum(r_total, "=", rSum).post(); | |
438 | + if(flags.get(9)) | |
439 | + m.sum(rait_total, "=", raitSum).post(); | |
440 | + if(flags.get(10)) | |
441 | + m.sum(sbiom_total, "=", sbiomSum).post(); | |
442 | + | |
443 | + | |
444 | + IntVar[] toOptimize = new IntVar[10]; | |
445 | + IntVar[] allSums = new IntVar[]{woodSum, soilSum, percRSum, bioSum,cashSum,cstockSum,npvSum,percRaitSum,rSum,raitSum,sbiomSum}; | |
446 | + IntVar[][] allTotals = new IntVar[][]{woodYield, soillossTotal,perc_r_Total,biodiversity_total,cashflow_total,cstock_total,npv_total,perc_rait_total,r_total,rait_total,sbiom_total}; | |
417 | 447 | |
418 | 448 | // Single Criterion Optimization |
419 | 449 | if(criterion.equalsIgnoreCase("single")) { |
420 | - m.setObjective(Model.MAXIMIZE, woodSum); | |
450 | + //m.setObjective(Model.MAXIMIZE, woodSum); | |
421 | 451 | //m.setObjective(Model.MAXIMIZE, soilSum); |
422 | 452 | //m.setObjective(Model.MAXIMIZE, percRSum); |
423 | 453 | |
... | ... | @@ -428,7 +458,14 @@ public class MainWithSpecific { |
428 | 458 | FileWriter outputPairs = new FileWriter("outputPairs.csv"); |
429 | 459 | for (int i = 0; i < ugs.length; i++) { |
430 | 460 | if (nodes[i].valid) { |
431 | - System.out.println(ugs[i] + ", wy:" + woodYield[i] + ", sl:" + soillossTotal[i] + ", R" + R + ":" + perc_r_Total[i]); | |
461 | + System.out.print(ugs[i] + ", "); | |
462 | + | |
463 | + for (int j = 0; j < flags.size(); j++) { | |
464 | + if (flags.get(j)) | |
465 | + System.out.print(varNames[j]+":"+ allTotals[j][i] +","); | |
466 | + } | |
467 | + System.out.println("end"); | |
468 | + | |
432 | 469 | outputPairs.write(nodes[i].externalId + "," + ugs[i].getValue() + "\n"); |
433 | 470 | } |
434 | 471 | } |
... | ... | @@ -442,17 +479,29 @@ public class MainWithSpecific { |
442 | 479 | else { |
443 | 480 | //Multi Criterion with Pareto |
444 | 481 | |
482 | + int index = 0; | |
483 | + for(int i = 1; i<flags.toArray().length; i++){ | |
484 | + if(flags.get(i)){ | |
485 | + toOptimize[index] = allSums[i]; | |
486 | + } | |
487 | + } | |
488 | + | |
489 | + | |
445 | 490 | //ParetoOptimizer po = new ParetoOptimizer(Model.MAXIMIZE, new IntVar[]{woodSum, soilToMaximize, percToMaximize}); |
446 | - ParetoOptimizer po = new ParetoOptimizer(Model.MAXIMIZE, new IntVar[]{woodSum,soilSum,percRSum}); | |
491 | + ParetoOptimizer po = new ParetoOptimizer(Model.MAXIMIZE, toOptimize); | |
447 | 492 | |
448 | 493 | Solver solver = m.getSolver(); |
449 | 494 | solver.plugMonitor(po); |
450 | 495 | |
451 | 496 | |
452 | - FileWriter nonParetoWS = new FileWriter("nonParetoWS.csv"); | |
453 | - FileWriter nonParetoWR = new FileWriter("nonParetoWR.csv"); | |
454 | - FileWriter nonParetoSR = new FileWriter("nonParetoSR.csv"); | |
455 | - FileWriter nonParetoWSR = new FileWriter("nonParetoWSR.csv"); | |
497 | + FileWriter nonPareto = new FileWriter("nonPareto.csv"); | |
498 | + for (int i = 0; i < flags.size(); i++) { | |
499 | + if (flags.get(i)) { | |
500 | + nonPareto.write(varNames[i]+","); | |
501 | + } | |
502 | + } | |
503 | + nonPareto.write("end\n"); | |
504 | + | |
456 | 505 | FileWriter allSolutionPairs = new FileWriter("allSolutionPairs.csv"); |
457 | 506 | |
458 | 507 | // optimization |
... | ... | @@ -463,18 +512,33 @@ public class MainWithSpecific { |
463 | 512 | while(solver.solve() & (System.currentTimeMillis()-startTime)<32400000) |
464 | 513 | { |
465 | 514 | //System.out.println(l); |
466 | - nonParetoWSR.write(woodSum.getValue()+","+soilSum.getValue()+","+percRSum.getValue()+"\n"); | |
467 | - allSolutionPairs.write(l+", Wood: "+ woodSum.getValue()+", Soil:"+soilSum.getValue()+ | |
468 | - ", Perc_R"+R+":"+percRSum.getValue()+"\n"); | |
515 | + for (int i = 0; i < flags.size(); i++) { | |
516 | + if(flags.get(i)) | |
517 | + nonPareto.write(allSums[i].getValue()+","); | |
518 | + } | |
519 | + nonPareto.write("end\n"); | |
520 | + | |
521 | + allSolutionPairs.write(l+", "); | |
522 | + for (int i = 0; i < flags.size(); i++) { | |
523 | + if(flags.get(i)) | |
524 | + allSolutionPairs.write(varNames[i] +":"+ allSums[i].getValue()+","); | |
525 | + } | |
526 | + allSolutionPairs.write("end\n"); | |
527 | + | |
528 | + | |
469 | 529 | for(int i = 0; i < nodes.length; i++){ |
470 | 530 | if(nodes[i].valid){ |
471 | - allSolutionPairs.write(nodes[i].externalId+","+ugs[i].getValue()+"\n"); | |
472 | - //System.out.println(ugs[i] + ", wy:" + woodYield[i] + ", sl:" + soillossTotal[i] + ", R" + R + ":" + perc_r_Total[i]); | |
531 | + | |
532 | + System.out.print(ugs[i] + ", "); | |
533 | + | |
534 | + for (int j = 0; j < flags.size(); j++) { | |
535 | + if(flags.get(j)) | |
536 | + System.out.print(varNames[j] +":"+ allTotals[j][i].getValue()+","); | |
537 | + } | |
538 | + System.out.println("end"); | |
473 | 539 | } |
474 | 540 | } |
475 | - nonParetoWS.write(woodSum.getValue()+","+soilSum.getValue()+"\n"); | |
476 | - nonParetoWR.write(woodSum.getValue()+","+percRSum.getValue()+"\n"); | |
477 | - nonParetoSR.write(soilSum.getValue()+","+percRSum.getValue()+"\n"); | |
541 | + | |
478 | 542 | l++; |
479 | 543 | } |
480 | 544 | } |
... | ... | @@ -482,53 +546,56 @@ public class MainWithSpecific { |
482 | 546 | System.out.println("Reached Exception"); |
483 | 547 | } |
484 | 548 | |
485 | - nonParetoWS.close(); | |
486 | - nonParetoWR.close(); | |
487 | - nonParetoSR.close(); | |
488 | - nonParetoWSR.close(); | |
489 | - allSolutionPairs.close(); | |
549 | + nonPareto.close(); | |
550 | + //allSolutionPairs.close(); | |
490 | 551 | |
491 | 552 | List<Solution> paretoFront = po.getParetoFront(); |
492 | 553 | |
493 | 554 | System.out.println("The pareto front has " + paretoFront.size() + " solutions : "); |
494 | - FileWriter outputPairs = new FileWriter("outputPairsTopIslandWSR0.csv"); | |
555 | + FileWriter outputPairs = new FileWriter("outputPairsSpecif.csv"); | |
495 | 556 | |
496 | - FileWriter paretoWS = new FileWriter("paretoWS.csv"); | |
497 | - FileWriter paretoWR = new FileWriter("paretoWR.csv"); | |
498 | - FileWriter paretoSR = new FileWriter("paretoSR.csv"); | |
499 | - FileWriter paretoWSR = new FileWriter("paretoWSR.csv"); | |
557 | + FileWriter pareto = new FileWriter("pareto.csv"); | |
500 | 558 | |
501 | 559 | |
502 | 560 | int l2 = 0; |
503 | 561 | for (Solution so : paretoFront) { |
504 | - System.out.println("Wood = " + so.getIntVal(woodSum) + ", Soil = " + so.getIntVal(soilSum)+ | |
505 | - ", Perc_R"+R+":"+so.getIntVal(percRSum)); | |
506 | - outputPairs.write("Pareto Solution: " + l2 + ", Wood: "+so.getIntVal(woodSum)+", Soil:"+so.getIntVal(soilSum)+ | |
507 | - ", Perc_R"+R+":"+so.getIntVal(percRSum)+"\n"); | |
562 | + | |
563 | + for (int i = 0; i < flags.size(); i++) { | |
564 | + if (flags.get(i)) | |
565 | + System.out.print(varNames[i]+"="+so.getIntVal(allSums[i])+","); | |
566 | + } | |
567 | + System.out.println("end"); | |
568 | + | |
569 | + outputPairs.write("Pareto Solution: " + l2+","); | |
570 | + for (int i = 0; i < flags.size(); i++) { | |
571 | + if (flags.get(i)) | |
572 | + outputPairs.write(varNames[i]+":"+so.getIntVal(allSums[i])+","); | |
573 | + } | |
574 | + | |
575 | + outputPairs.write("end+\n"); | |
576 | + | |
508 | 577 | for (int i = 0; i < ugs.length; i++) { |
509 | 578 | if (nodes[i].valid) { |
510 | - System.out.println(i+"_"+so.getIntVal(ugs[i]) + ", wy:" + so.getIntVal(woodYield[i]) + ", sl:" + | |
511 | - so.getIntVal(soillossTotal[i]) + ", R" + R + ":" + so.getIntVal(perc_r_Total[i])); | |
512 | - outputPairs.write(nodes[i].externalId + "," +so.getIntVal(ugs[i]) + "\n"); | |
513 | - } | |
514 | 579 | |
515 | - } | |
580 | + System.out.print(i+"_"+so.getIntVal(ugs[i])+", "); | |
516 | 581 | |
517 | - //PARETO POINTS | |
518 | - paretoWS.write(so.getIntVal(woodSum)+","+so.getIntVal(soilSum)+"\n"); | |
519 | - paretoWR.write(so.getIntVal(woodSum)+","+so.getIntVal(percRSum)+"\n"); | |
520 | - paretoSR.write(so.getIntVal(soilSum)+","+so.getIntVal(percRSum)+"\n"); | |
521 | - paretoWSR.write(so.getIntVal(woodSum)+","+so.getIntVal(soilSum)+","+so.getIntVal(percRSum)+"\n"); | |
582 | + for (int j = 0; j < flags.size(); j++) { | |
583 | + if (flags.get(j)) | |
584 | + System.out.print(varNames[j]+":"+so.getIntVal(allTotals[j][i])+","); | |
585 | + } | |
586 | + System.out.println("end"); | |
522 | 587 | |
588 | + outputPairs.write(nodes[i].externalId + "," +so.getIntVal(ugs[i]) + "\n"); | |
589 | + } | |
590 | + } | |
523 | 591 | |
592 | + pareto.write(so.getIntVal(woodSum)+","+so.getIntVal(soilSum)+","+so.getIntVal(percRSum)+"\n"); | |
524 | 593 | |
525 | 594 | l2++; |
526 | 595 | } |
527 | 596 | outputPairs.close(); |
528 | - paretoWS.close(); | |
529 | - paretoWR.close(); | |
530 | - paretoSR.close(); | |
531 | - paretoWSR.close(); | |
597 | + | |
598 | + pareto.close(); | |
532 | 599 | System.out.println(l + " solutions"); |
533 | 600 | } |
534 | 601 | } | ... | ... |
MODFIRE-Prototype/src/MultiOutput.java
... | ... | @@ -163,7 +163,7 @@ public class MultiOutput { |
163 | 163 | //the propagator takes as parameters the index of the UG we are starting out from |
164 | 164 | //the nodes with all the info, the constraint variable array and the area limit |
165 | 165 | if(nodes[ugIndex].valid) { |
166 | - new Constraint("Area Limit Constraint", new CustomPropagator2(ugIndex, nodes, ugs, areaLimit, woodYield)).post(); | |
166 | + new Constraint("Area Limit Constraint", new CustomPropagator2(ugIndex, nodes, ugs, areaLimit)).post(); | |
167 | 167 | } |
168 | 168 | } |
169 | 169 | ... | ... |