From 991dacefdb8f78fccc359d3d2ec836dc2e7fc80a Mon Sep 17 00:00:00 2001 From: 20001LastOrder Date: Wed, 10 Jul 2019 10:56:00 -0400 Subject: measurements for the different violation types, comparison for differenct generation config --- .../ca/mcgill/ecse/socialnetwork/runner/Main.java | 143 ++++++++++++++++----- 1 file changed, 108 insertions(+), 35 deletions(-) (limited to 'Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca') diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java index 72ea45d1..e1698e5b 100644 --- a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java @@ -4,6 +4,10 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.PrintStream; import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.eclipse.viatra.query.runtime.matchers.aggregators.count; import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain; import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistance; @@ -23,59 +27,127 @@ public class Main { return message; } + private static String configFolder = "yakinduum/"; + private static String configFileName = configFolder + "info.csv"; + private static String aggregateViolationMeasureFileName = configFolder + "aggregateInfo2.csv"; + public static void main(String args[]) { // try { + + long begin = System.currentTimeMillis(); + String message = null;//runWithPath("yakinduGeneration.vsconfig"); + long elapsed = System.currentTimeMillis() - begin; + + if(message != null) { + return; + } ArrayList> output = new ArrayList>(); + String time = formatTime(elapsed); + ArrayList infoOutput = new ArrayList(); + infoOutput.add(time); + output.add(infoOutput); + System.out.println(time); + //CsvFileWriter.write(output, configFileName); + + + output = new ArrayList>(); output.add(prepareInfo()); - CsvFileWriter.write(output, "yakinduum/info.csv"); - //YakinduumModel.init(); - generateModel(1); -// }catch(Exception e) { -// e.printStackTrace(); -// }finally { -// outDegreeStatistic(); + //CsvFileWriter.append(output, configFileName); + +// for(int i = 0; i < 50; i++) { +// singleModelViolationMeasure(i+1); // } -// outDegreeStatistic(); - + aggregateViolationMeasure(50); + System.out.println("Finished"); } - + public static void generateModel(int run) { + String filename = run+"_1.xmi"; //prepare initial info - long begin = System.currentTimeMillis(); - String message = runWithPath("yakinduGeneration.vsconfig"); + ArrayList> output = new ArrayList>(); + ArrayList infoOutput = new ArrayList(); + infoOutput.add(run+ ""); + infoOutput.addAll(calculateMetric(run)); + + YakinduumModel model = new YakinduumModel("output/Viatra_100/run"+run+"/"+ filename); + int violationCount = ViolationCheck.calculateViolationCounts(model.yakinduum); + infoOutput.add(violationCount + ""); + + + + //save model to another directory + model.save(configFolder + run + ".xmi"); + + CsvFileWriter.append(output, configFileName); + } + public static void singleModelViolationMeasure(int run) { + String filename = run+".xmi"; + //prepare initial info + ArrayList> output = new ArrayList>(); + ArrayList infoOutput = new ArrayList(); + infoOutput.add(run+ ""); + + YakinduumModel model = new YakinduumModel("yakinduum\\config8\\"+ filename); + //parse map of violation counts to two list and add them to the result list + Map map = ViolationCheck.violationMaps(model.yakinduum); + ArrayList counts = new ArrayList(); + ArrayList violationNames = new ArrayList(map.keySet()); + for(int i = 0; i < violationNames.size(); i++) { + String name = violationNames.get(i); + int total = map.get(name); + counts.add(total + ""); + } + output.add(infoOutput); + output.add(violationNames); + output.add(counts); + + CsvFileWriter.append(output, configFileName); + } + + public static void aggregateViolationMeasure(int size) { + ArrayList> output = new ArrayList>(); + ArrayList counts = new ArrayList(); + ArrayList violationNames = null; + for(int run = 1; run < size+1; run++) { + String filename = run+".xmi"; + YakinduumModel model = new YakinduumModel("yakinduum\\config8\\"+ filename); + + Map map = ViolationCheck.violationMaps(model.yakinduum); + if(run == 1) { + violationNames = new ArrayList(map.keySet()); + for(int i = 0; i < violationNames.size(); i++) { + String name = violationNames.get(i); + int total = map.get(name); + counts.add(total + ""); + } + }else { + for(int i = 0; i < violationNames.size(); i++) { + int count = Integer.parseInt(counts.get(i)); + String name = violationNames.get(i); + int total = count + map.get(name); + counts.set(i, total + ""); + } + } + } - if(message == null) { - ArrayList> output = new ArrayList>(); - long elapsed = System.currentTimeMillis() - begin; - String time = formatTime(elapsed); - - ArrayList infoOutput = new ArrayList(); - infoOutput.add(run+ ""); - infoOutput.add(time); - infoOutput.addAll(calculateMetric()); - - YakinduumModel model = new YakinduumModel("output/Viatra_100/1.xmi"); - int violationCount = ViolationCheck.calculateViolationCounts(model.yakinduum); - infoOutput.add(violationCount + ""); - - //save model to another directory - model.save("yakinduum/" + run + ".xmi"); - - output.add(infoOutput); - CsvFileWriter.append(output, "yakinduum/info.csv"); - System.out.println("Finished"); + for(int i = 0; i < counts.size(); i++) { + double count = Integer.parseInt(counts.get(i)) / (double) size; + counts.set(i, count + ""); } + output.add(violationNames); + output.add(counts); + CsvFileWriter.write(output, aggregateViolationMeasureFileName); } - public static ArrayList calculateMetric() { + public static ArrayList calculateMetric(int run) { //read model and metric ArrayList output = new ArrayList(); GraphReader reader = new GraphReader(YakindummPackage.eINSTANCE); - EMFGraph graph = reader.readModels("output/Viatra_100/").get(0); + EMFGraph graph = reader.readModels("output/Viatra_100/run"+run+"/").get(0); //KS distance KSDistance ks = new KSDistance(Domain.Yakinduum); @@ -86,17 +158,18 @@ public class Main { output.add(ks.outDegreeDistance(samples.outDegreeSamples) + ""); output.add(ks.naDistance(samples.naSamples)+ ""); output.add(ks.mpcDistance(samples.mpcSamples) + ""); + output.add(ks.typedOutDegreeDistance(samples.typedOutDegreeSamples) + ""); return output; } public static ArrayList prepareInfo() { ArrayList info = new ArrayList(); info.add("ID"); - info.add("Time"); info.add("# of Nodes"); info.add("Out Degree"); info.add("Node Activity"); info.add("MPC"); + info.add("Typed Out Degree"); info.add("Violations"); return info; } -- cgit v1.2.3-70-g09d2