aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver
diff options
context:
space:
mode:
authorLibravatar 20001LastOrder <boqi.chen@mail.mcgill.ca>2019-08-20 17:13:46 -0400
committerLibravatar 20001LastOrder <boqi.chen@mail.mcgill.ca>2019-08-20 17:13:46 -0400
commit8ca4668275e7f9298b9960acc66373aa94650453 (patch)
tree761e1561741a082fa2d278b31be654f426d31359 /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver
parentmodifty patterns for ecore (diff)
downloadVIATRA-Generator-8ca4668275e7f9298b9960acc66373aa94650453.tar.gz
VIATRA-Generator-8ca4668275e7f9298b9960acc66373aa94650453.tar.zst
VIATRA-Generator-8ca4668275e7f9298b9960acc66373aa94650453.zip
changes in settings of measurements
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend6
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/HillClimbingOnRealisticMetricStrategyForModelGeneration.java72
2 files changed, 61 insertions, 17 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend
index 482fcc1c..4331420d 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend
@@ -17,7 +17,7 @@ import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.par
17import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage 17import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage
18import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.statecoder.IdentifierBasedStateCoderFactory 18import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.statecoder.IdentifierBasedStateCoderFactory
19import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.statecoder.NeighbourhoodBasedStateCoderFactory 19import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.statecoder.NeighbourhoodBasedStateCoderFactory
20import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.BestFirstStrategyForModelGeneration 20import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.HillClimbingOnRealisticMetricStrategyForModelGeneration
21import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.ModelGenerationCompositeObjective 21import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.ModelGenerationCompositeObjective
22import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.PartialModelAsLogicInterpretation 22import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.PartialModelAsLogicInterpretation
23import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.ScopeObjective 23import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.ScopeObjective
@@ -33,7 +33,6 @@ import org.eclipse.viatra.dse.api.DesignSpaceExplorer
33import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel 33import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel
34import org.eclipse.viatra.dse.solutionstore.SolutionStore 34import org.eclipse.viatra.dse.solutionstore.SolutionStore
35import org.eclipse.viatra.dse.statecode.IStateCoderFactory 35import org.eclipse.viatra.dse.statecode.IStateCoderFactory
36import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.HillClimbingOnRealisticMetricStrategyForModelGeneration
37 36
38class ViatraReasoner extends LogicReasoner{ 37class ViatraReasoner extends LogicReasoner{
39 val PartialInterpretationInitialiser initialiser = new PartialInterpretationInitialiser() 38 val PartialInterpretationInitialiser initialiser = new PartialInterpretationInitialiser()
@@ -155,6 +154,9 @@ class ViatraReasoner extends LogicReasoner{
155 it.entries += createIntStatisticEntry => [ 154 it.entries += createIntStatisticEntry => [
156 it.name = "TypeAnalysisTime" it.value = (method.statistics.PreliminaryTypeAnalisisTime/1000000) as int 155 it.name = "TypeAnalysisTime" it.value = (method.statistics.PreliminaryTypeAnalisisTime/1000000) as int
157 ] 156 ]
157 it.entries += createIntStatisticEntry =>[
158 it.name = "MetricCalculationTime" it.value = (method.statistics.metricCalculationTime/1000000) as int
159 ]
158 it.entries += createIntStatisticEntry => [ 160 it.entries += createIntStatisticEntry => [
159 it.name = "StateCoderTime" it.value = (statecoder.runtime/1000000) as int 161 it.name = "StateCoderTime" it.value = (statecoder.runtime/1000000) as int
160 ] 162 ]
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/HillClimbingOnRealisticMetricStrategyForModelGeneration.java b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/HillClimbingOnRealisticMetricStrategyForModelGeneration.java
index c817d20b..eb7df089 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/HillClimbingOnRealisticMetricStrategyForModelGeneration.java
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/HillClimbingOnRealisticMetricStrategyForModelGeneration.java
@@ -190,8 +190,8 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements
190 190
191 List<Object> activationIds = selectActivation(); 191 List<Object> activationIds = selectActivation();
192 PartialInterpretation model = (PartialInterpretation) context.getModel(); 192 PartialInterpretation model = (PartialInterpretation) context.getModel();
193 System.out.println(model.getNewElements().size()); 193// System.out.println(model.getNewElements().size());
194 System.out.println("# violations: " + getNumberOfViolations(mayMatchers)); 194// System.out.println("# violations: " + getNumberOfViolations(mayMatchers));
195 195
196 Map<Object, Double> valueMap = new HashMap<Object,Double>(); 196 Map<Object, Double> valueMap = new HashMap<Object,Double>();
197 197
@@ -208,15 +208,13 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements
208 count++; 208 count++;
209 this.currentNodeTypeDistance = heuristics.getNodeTypeDistance(); 209 this.currentNodeTypeDistance = heuristics.getNodeTypeDistance();
210 numNodesToGenerate = model.getMaxNewElements(); 210 numNodesToGenerate = model.getMaxNewElements();
211 System.out.println("NA distance: " + heuristics.getNADistance()); 211// System.out.println("NA distance: " + heuristics.getNADistance());
212 System.out.println("MPC distance: " + heuristics.getMPCDistance()); 212// System.out.println("MPC distance: " + heuristics.getMPCDistance());
213 System.out.println("Out degree distance:" + heuristics.getOutDegreeDistance()); 213// System.out.println("Out degree distance:" + heuristics.getOutDegreeDistance());
214 System.out.println("NodeType :" + currentNodeTypeDistance); 214// System.out.println("NodeType :" + currentNodeTypeDistance);
215 215
216// System.out.println("FinalState :" + heuristics.getNodeTypePercentage("FinalState"));
217 216
218 //TODO: the number of activations to be checked should be configurasble 217 //TODO: the number of activations to be checked should be configurasble
219 System.out.println(activationIds.size());
220 if(activationIds.size() > 50) { 218 if(activationIds.size() > 50) {
221 activationIds = activationIds.subList(0, 50); 219 activationIds = activationIds.subList(0, 50);
222 } 220 }
@@ -301,23 +299,27 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements
301 } 299 }
302 300
303 //remove all the elements having large distance 301 //remove all the elements having large distance
304 activationIds.removeIf(li -> valueMap.get(li) >= 10000);
305 Collections.sort(activationIds, Comparator.comparing(li -> valueMap.get(li))); 302 Collections.sort(activationIds, Comparator.comparing(li -> valueMap.get(li)));
306 return valueMap; 303 return valueMap;
307 } 304 }
308 305
309 private double calculateFutureStateValue(int violation) { 306 private double calculateFutureStateValue(int violation) {
307 long start = System.nanoTime();
310 int nodeSize = ((PartialInterpretation) context.getModel()).getNewElements().size(); 308 int nodeSize = ((PartialInterpretation) context.getModel()).getNewElements().size();
311 double currentValue = calculateCurrentStateValue(nodeSize,violation); 309 double currentValue = calculateCurrentStateValue(nodeSize,violation);
312 double[] toPredict = metricDistance.calculateFeature(100, violation); 310 double[] toPredict = metricDistance.calculateFeature(100, violation);
313 if(Math.abs(currentValue - currentStateValue) < 0.001) { 311 if(Math.abs(currentValue - currentStateValue) < 0.001) {
312 this.method.getStatistics().addMetricCalculationTime(System.nanoTime() - start);
314 return Double.MAX_VALUE; 313 return Double.MAX_VALUE;
315 } 314 }
316 try { 315 try {
316 this.method.getStatistics().addMetricCalculationTime(System.nanoTime() - start);
317 return metricDistance.getLinearModel().getPredictionForNextDataSample(metricDistance.calculateFeature(nodeSize, violation), currentValue, toPredict); 317 return metricDistance.getLinearModel().getPredictionForNextDataSample(metricDistance.calculateFeature(nodeSize, violation), currentValue, toPredict);
318 }catch(IllegalArgumentException e) { 318 }catch(IllegalArgumentException e) {
319 this.method.getStatistics().addMetricCalculationTime(System.nanoTime() - start);
319 return currentValue; 320 return currentValue;
320 } 321 }
322
321 } 323 }
322 private double calculateCurrentStateValue(int factor, int violation) { 324 private double calculateCurrentStateValue(int factor, int violation) {
323 PartialInterpretation model = (PartialInterpretation) context.getModel(); 325 PartialInterpretation model = (PartialInterpretation) context.getModel();
@@ -343,7 +345,7 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements
343 } 345 }
344 346
345 return 100*(nodeTypeFactor) + normalFactor*(2*g.getNADistance() + g.getMPCDistance() + 2*g.getOutDegreeDistance()) + normalFactor / 5*consistenceWeights + unfinishFactor; 347 return 100*(nodeTypeFactor) + normalFactor*(2*g.getNADistance() + g.getMPCDistance() + 2*g.getOutDegreeDistance()) + normalFactor / 5*consistenceWeights + unfinishFactor;
346 }else { 348 }else if (domain == Domain.Ecore) {
347 double unfinishFactor = 100 * (1 - (double)factor / targetSize); 349 double unfinishFactor = 100 * (1 - (double)factor / targetSize);
348 double nodeTypeFactor = g.getNodeTypeDistance(); 350 double nodeTypeFactor = g.getNodeTypeDistance();
349 double normalFactor = 5; 351 double normalFactor = 5;
@@ -354,13 +356,53 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements
354 } 356 }
355 357
356 return 100*(nodeTypeFactor) + normalFactor*(2*g.getNADistance() + g.getMPCDistance() + 2*g.getOutDegreeDistance()) + normalFactor / 5*consistenceWeights + unfinishFactor; 358 return 100*(nodeTypeFactor) + normalFactor*(2*g.getNADistance() + g.getMPCDistance() + 2*g.getOutDegreeDistance()) + normalFactor / 5*consistenceWeights + unfinishFactor;
359 }else {
360 double unfinishFactor = context.calculateFitness().get("CompositeUnfinishednessObjective");
361 double nodeTypeFactor = g.getNodeTypeDistance();
362 double normalFactor = 5;
363 if(currentNodeTypeDistance <= 0.05 || numNodesToGenerate == 1) {
364 nodeTypeFactor = 0;
365 normalFactor = 100;
366 //unfinishFactor *= 0.5;
367 }
368
369 return 100*(nodeTypeFactor) + normalFactor*(2*g.getNADistance() + 2*g.getMPCDistance() + 2*g.getOutDegreeDistance()) + normalFactor / 5*consistenceWeights + unfinishFactor;
357 } 370 }
358 371
359 }else if(configuration.realisticGuidance == RealisticGuidance.Composite_Without_Violations) { 372 }else if(configuration.realisticGuidance == RealisticGuidance.Composite_Without_Violations) {
360 if(domain == Domain.Yakindumm) { 373 if(domain == Domain.Yakindumm) {
361 return 100.0 *(g.getNodeTypeDistance()) + 5*(g.getNADistance() + g.getMPCDistance() +g.getOutDegreeDistance()); 374 double unfinishFactor = 50 * (1 - (double)factor / targetSize);
362 }else { 375 double nodeTypeFactor = g.getNodeTypeDistance();
363 return 15*(g.getNodeTypeDistance()) + 5*(g.getNADistance() + g.getMPCDistance() + 4*g.getOutDegreeDistance()); 376 double normalFactor = 5;
377 if(currentNodeTypeDistance <= 0.05 || numNodesToGenerate == 1) {
378 nodeTypeFactor = 0;
379 normalFactor = 100;
380 unfinishFactor = 0;
381 }
382
383 return 100*(nodeTypeFactor) + normalFactor*(2*g.getNADistance() + g.getMPCDistance() + 2*g.getOutDegreeDistance()) + unfinishFactor;
384 }else if (domain == Domain.Github) {
385 double unfinishFactor = 100 * (1 - (double)factor / targetSize);
386 double nodeTypeFactor = g.getNodeTypeDistance();
387 double normalFactor = 5;
388 if(currentNodeTypeDistance <= 0.12 || numNodesToGenerate == 1) {
389 nodeTypeFactor = 0;
390 normalFactor = 100;
391 unfinishFactor *= 0.5;
392 }
393
394 return 100*(nodeTypeFactor) + normalFactor*(2*g.getNADistance() + g.getMPCDistance() + 2*g.getOutDegreeDistance()) + unfinishFactor;
395 } else {
396 double unfinishFactor = 100 * (1 - (double)factor / targetSize);
397 double nodeTypeFactor = g.getNodeTypeDistance();
398 double normalFactor = 5;
399 if(currentNodeTypeDistance <= 0.20 || numNodesToGenerate == 1) {
400 nodeTypeFactor = 0;
401 normalFactor = 100;
402 unfinishFactor *= 0.5;
403 }
404
405 return 100*(nodeTypeFactor) + normalFactor*(2*g.getNADistance() + g.getMPCDistance() + 2*g.getOutDegreeDistance()) + unfinishFactor;
364 } 406 }
365 }else { 407 }else {
366 return violation; 408 return violation;
@@ -426,8 +468,8 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements
426 468
427 private void checkForSolution(final Fitness fittness) { 469 private void checkForSolution(final Fitness fittness) {
428 if (fittness.isSatisifiesHardObjectives()) { 470 if (fittness.isSatisifiesHardObjectives()) {
429 System.out.println("Solution Found!!"); 471 logger.debug("Solution Found!!");
430 System.out.println("# violations: " + (getNumberOfViolations(mustMatchers))); 472 logger.debug("# violations: " + (getNumberOfViolations(mustMatchers)));
431 if (solutionStoreWithDiversityDescriptor.isDifferent(context)) { 473 if (solutionStoreWithDiversityDescriptor.isDifferent(context)) {
432 solutionStoreWithCopy.newSolution(context); 474 solutionStoreWithCopy.newSolution(context);
433 solutionStoreWithDiversityDescriptor.newSolution(context); 475 solutionStoreWithDiversityDescriptor.newSolution(context);