Commit e146ab4e6bd169fdbbabf00005479e799bdc66f0

Authored by Eduardo Eloy
1 parent 67b613e8

selecttable criteria

MODFIRE-Prototype/allSolutionPairs.csv 0 โ†’ 100644
MODFIRE-Prototype/nonPareto.csv 0 โ†’ 100644
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
MODFIRE-Prototype/outputPairs.csv 0 โ†’ 100644
@@ -0,0 +1,193 @@ @@ -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,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 super(ugs, PropagatorPriority.LINEAR, false); 20 super(ugs, PropagatorPriority.LINEAR, false);
21 this.ugIndex = ugIndex; 21 this.ugIndex = ugIndex;
22 this.nodes = nodes; 22 this.nodes = nodes;
MODFIRE-Prototype/src/GetInput.java
@@ -170,7 +170,7 @@ public class GetInput { @@ -170,7 +170,7 @@ public class GetInput {
170 //the propagator takes as parameters the index of the UG we are starting out from 170 //the propagator takes as parameters the index of the UG we are starting out from
171 //the nodes with all the info, the constraint variable array and the area limit 171 //the nodes with all the info, the constraint variable array and the area limit
172 if(nodes[ugIndex].valid) { 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,7 +311,7 @@ public class Main5Criteria {
311 //the propagator takes as parameters the index of the UG we are starting out from 311 //the propagator takes as parameters the index of the UG we are starting out from
312 //the nodes with all the info, the constraint variable array and the area limit 312 //the nodes with all the info, the constraint variable array and the area limit
313 if(nodes[ugIndex].valid) { 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,7 +295,7 @@ public class MainDistance {
295 //the propagator takes as parameters the index of the UG we are starting out from 295 //the propagator takes as parameters the index of the UG we are starting out from
296 //the nodes with all the info, the constraint variable array and the area limit 296 //the nodes with all the info, the constraint variable array and the area limit
297 if(nodes[ugIndex].valid) { 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,7 +278,7 @@ public class MainLimit {
278 //the propagator takes as parameters the index of the UG we are starting out from 278 //the propagator takes as parameters the index of the UG we are starting out from
279 //the nodes with all the info, the constraint variable array and the area limit 279 //the nodes with all the info, the constraint variable array and the area limit
280 if(nodes[ugIndex].valid) { 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,7 +281,7 @@ public class MainRegion {
281 //the propagator takes as parameters the index of the UG we are starting out from 281 //the propagator takes as parameters the index of the UG we are starting out from
282 //the nodes with all the info, the constraint variable array and the area limit 282 //the nodes with all the info, the constraint variable array and the area limit
283 if(nodes[ugIndex].valid) { 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,21 +228,8 @@ public class MainWithSpecific {
228 String fileDirectory = args[1]; 228 String fileDirectory = args[1];
229 229
230 ArrayList<Integer> islandUGs = new ArrayList<>(); 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 Scanner islandReader = new Scanner(island); 233 Scanner islandReader = new Scanner(island);
247 while (islandReader.hasNextLine()) { 234 while (islandReader.hasNextLine()) {
248 islandUGs.add(Integer.parseInt(islandReader.nextLine())); 235 islandUGs.add(Integer.parseInt(islandReader.nextLine()));
@@ -265,6 +252,31 @@ public class MainWithSpecific { @@ -265,6 +252,31 @@ public class MainWithSpecific {
265 default: 252 default:
266 R = 0;} 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 Model m = new Model("Forest Management"); 280 Model m = new Model("Forest Management");
269 281
270 BufferedReader reader = new BufferedReader(new FileReader(fileDirectory + "/ugs_init.txt")); 282 BufferedReader reader = new BufferedReader(new FileReader(fileDirectory + "/ugs_init.txt"));
@@ -283,6 +295,7 @@ public class MainWithSpecific { @@ -283,6 +295,7 @@ public class MainWithSpecific {
283 295
284 IntVar[] ugs = new IntVar[nUgs]; // same for the constraint variable array 296 IntVar[] ugs = new IntVar[nUgs]; // same for the constraint variable array
285 297
  298 +
286 IntVar[] woodYield = new IntVar[nUgs]; 299 IntVar[] woodYield = new IntVar[nUgs];
287 300
288 IntVar[] soillossTotal = new IntVar[nUgs]; 301 IntVar[] soillossTotal = new IntVar[nUgs];
@@ -298,7 +311,6 @@ public class MainWithSpecific { @@ -298,7 +311,6 @@ public class MainWithSpecific {
298 IntVar[] rait_total = new IntVar[nUgs]; 311 IntVar[] rait_total = new IntVar[nUgs];
299 IntVar[] sbiom_total = new IntVar[nUgs]; 312 IntVar[] sbiom_total = new IntVar[nUgs];
300 313
301 -  
302 giveDomains(m, ugs, fileDirectory, woodYield, soillossTotal, perc_r_Total, biodiversity_total, cashflow_total, cstock_total, 314 giveDomains(m, ugs, fileDirectory, woodYield, soillossTotal, perc_r_Total, biodiversity_total, cashflow_total, cstock_total,
303 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 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,7 +322,7 @@ public class MainWithSpecific {
310 //the propagator takes as parameters the index of the UG we are starting out from 322 //the propagator takes as parameters the index of the UG we are starting out from
311 //the nodes with all the info, the constraint variable array and the area limit 323 //the nodes with all the info, the constraint variable array and the area limit
312 if(nodes[ugIndex].valid) { 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,23 +413,41 @@ public class MainWithSpecific {
401 IntVar raitSum = m.intVar("RaitR"+R,0, 99999999); 413 IntVar raitSum = m.intVar("RaitR"+R,0, 99999999);
402 IntVar sbiomSum = m.intVar("SbiomR"+R,0, 99999999); 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 // Single Criterion Optimization 448 // Single Criterion Optimization
419 if(criterion.equalsIgnoreCase("single")) { 449 if(criterion.equalsIgnoreCase("single")) {
420 - m.setObjective(Model.MAXIMIZE, woodSum); 450 + //m.setObjective(Model.MAXIMIZE, woodSum);
421 //m.setObjective(Model.MAXIMIZE, soilSum); 451 //m.setObjective(Model.MAXIMIZE, soilSum);
422 //m.setObjective(Model.MAXIMIZE, percRSum); 452 //m.setObjective(Model.MAXIMIZE, percRSum);
423 453
@@ -428,7 +458,14 @@ public class MainWithSpecific { @@ -428,7 +458,14 @@ public class MainWithSpecific {
428 FileWriter outputPairs = new FileWriter("outputPairs.csv"); 458 FileWriter outputPairs = new FileWriter("outputPairs.csv");
429 for (int i = 0; i < ugs.length; i++) { 459 for (int i = 0; i < ugs.length; i++) {
430 if (nodes[i].valid) { 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 outputPairs.write(nodes[i].externalId + "," + ugs[i].getValue() + "\n"); 469 outputPairs.write(nodes[i].externalId + "," + ugs[i].getValue() + "\n");
433 } 470 }
434 } 471 }
@@ -442,17 +479,29 @@ public class MainWithSpecific { @@ -442,17 +479,29 @@ public class MainWithSpecific {
442 else { 479 else {
443 //Multi Criterion with Pareto 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 //ParetoOptimizer po = new ParetoOptimizer(Model.MAXIMIZE, new IntVar[]{woodSum, soilToMaximize, percToMaximize}); 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 Solver solver = m.getSolver(); 493 Solver solver = m.getSolver();
449 solver.plugMonitor(po); 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 FileWriter allSolutionPairs = new FileWriter("allSolutionPairs.csv"); 505 FileWriter allSolutionPairs = new FileWriter("allSolutionPairs.csv");
457 506
458 // optimization 507 // optimization
@@ -463,18 +512,33 @@ public class MainWithSpecific { @@ -463,18 +512,33 @@ public class MainWithSpecific {
463 while(solver.solve() & (System.currentTimeMillis()-startTime)<32400000) 512 while(solver.solve() & (System.currentTimeMillis()-startTime)<32400000)
464 { 513 {
465 //System.out.println(l); 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 for(int i = 0; i < nodes.length; i++){ 529 for(int i = 0; i < nodes.length; i++){
470 if(nodes[i].valid){ 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 l++; 542 l++;
479 } 543 }
480 } 544 }
@@ -482,53 +546,56 @@ public class MainWithSpecific { @@ -482,53 +546,56 @@ public class MainWithSpecific {
482 System.out.println("Reached Exception"); 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 List<Solution> paretoFront = po.getParetoFront(); 552 List<Solution> paretoFront = po.getParetoFront();
492 553
493 System.out.println("The pareto front has " + paretoFront.size() + " solutions : "); 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 int l2 = 0; 560 int l2 = 0;
503 for (Solution so : paretoFront) { 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 for (int i = 0; i < ugs.length; i++) { 577 for (int i = 0; i < ugs.length; i++) {
509 if (nodes[i].valid) { 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 l2++; 594 l2++;
526 } 595 }
527 outputPairs.close(); 596 outputPairs.close();
528 - paretoWS.close();  
529 - paretoWR.close();  
530 - paretoSR.close();  
531 - paretoWSR.close(); 597 +
  598 + pareto.close();
532 System.out.println(l + " solutions"); 599 System.out.println(l + " solutions");
533 } 600 }
534 } 601 }
MODFIRE-Prototype/src/MultiOutput.java
@@ -163,7 +163,7 @@ public class MultiOutput { @@ -163,7 +163,7 @@ public class MultiOutput {
163 //the propagator takes as parameters the index of the UG we are starting out from 163 //the propagator takes as parameters the index of the UG we are starting out from
164 //the nodes with all the info, the constraint variable array and the area limit 164 //the nodes with all the info, the constraint variable array and the area limit
165 if(nodes[ugIndex].valid) { 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