aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/HillClimbingOnRealisticMetricStrategyForModelGeneration.java
diff options
context:
space:
mode:
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/HillClimbingOnRealisticMetricStrategyForModelGeneration.java')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/HillClimbingOnRealisticMetricStrategyForModelGeneration.java69
1 files changed, 54 insertions, 15 deletions
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 f1bf96b6..d9f84b36 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
@@ -16,6 +16,7 @@ import java.util.Random;
16import java.util.Set; 16import java.util.Set;
17 17
18import org.apache.log4j.Logger; 18import org.apache.log4j.Logger;
19import org.eclipse.emf.ecore.EObject;
19import org.eclipse.emf.ecore.util.EcoreUtil; 20import org.eclipse.emf.ecore.util.EcoreUtil;
20import org.eclipse.viatra.dse.api.strategy.interfaces.IStrategy; 21import org.eclipse.viatra.dse.api.strategy.interfaces.IStrategy;
21import org.eclipse.viatra.dse.base.ThreadContext; 22import org.eclipse.viatra.dse.base.ThreadContext;
@@ -35,12 +36,12 @@ import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem;
35import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.InconsistencyResult; 36import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.InconsistencyResult;
36import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicResult; 37import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicResult;
37import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult; 38import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult;
38import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethod;
39import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.PartialInterpretation2Logic; 39import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.PartialInterpretation2Logic;
40import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation; 40import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation;
41import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.statecoder.NeighbourhoodBasedPartialInterpretationStateCoder; 41import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.statecoder.NeighbourhoodBasedPartialInterpretationStateCoder;
42import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualisation; 42import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualisation;
43import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualiser; 43import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualiser;
44import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ModelGenerationMethod;
44import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.RealisticGuidance; 45import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.RealisticGuidance;
45import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasonerConfiguration; 46import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasonerConfiguration;
46import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace; 47import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace;
@@ -84,6 +85,8 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements
84 private double currentNodeTypeDistance = 1; 85 private double currentNodeTypeDistance = 1;
85 private int numNodesToGenerate = 0; 86 private int numNodesToGenerate = 0;
86 public long explorationStarted = 0; 87 public long explorationStarted = 0;
88 public long globalConstraintEvaluationTime = 0;
89 public long fitnessCalculationTime = 0;
87 90
88 public HillClimbingOnRealisticMetricStrategyForModelGeneration( 91 public HillClimbingOnRealisticMetricStrategyForModelGeneration(
89 ReasonerWorkspace workspace, 92 ReasonerWorkspace workspace,
@@ -104,6 +107,13 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements
104 public int getNumberOfStatecoderFail() { 107 public int getNumberOfStatecoderFail() {
105 return numberOfStatecoderFail; 108 return numberOfStatecoderFail;
106 } 109 }
110
111 public long getForwardTime() {
112 return context.getDesignSpaceManager().getForwardTime();
113 }
114 public long getBacktrackingTime() {
115 return context.getDesignSpaceManager().getBacktrackingTime();
116 }
107 117
108 @Override 118 @Override
109 public void initStrategy(ThreadContext context) { 119 public void initStrategy(ThreadContext context) {
@@ -147,13 +157,13 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements
147 //set whether allows must violations during the realistic generation 157 //set whether allows must violations during the realistic generation
148 allowMustViolation = configuration.allowMustViolations; 158 allowMustViolation = configuration.allowMustViolations;
149 targetSize = configuration.typeScopes.maxNewElements + 2; 159 targetSize = configuration.typeScopes.maxNewElements + 2;
150 this.numericSolver = new NumericSolver(context, method, this.configuration.runIntermediateNumericalConsistencyChecks, false); 160 //this.numericSolver = new NumericSolver(method, this.configuration.runIntermediateNumericalConsistencyChecks, false);
151 } 161 }
152 162
153 @Override 163 @Override
154 public void explore() { 164 public void explore() {
155 this.explorationStarted=System.nanoTime(); 165 this.explorationStarted=System.nanoTime();
156 if (!context.checkGlobalConstraints()) { 166 if (!checkGlobalConstraints()) {
157 logger.info("Global contraint is not satisifed in the first state. Terminate."); 167 logger.info("Global contraint is not satisifed in the first state. Terminate.");
158 return; 168 return;
159 } 169 }
@@ -236,6 +246,14 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements
236 boolean consistencyCheckResult = checkConsistency(currentTrajectoryWithFittness); 246 boolean consistencyCheckResult = checkConsistency(currentTrajectoryWithFittness);
237 if(consistencyCheckResult == true) { continue mainLoop; } 247 if(consistencyCheckResult == true) { continue mainLoop; }
238 248
249// if (context.isCurrentStateAlreadyTraversed()) {
250// logger.info("The new state is already visited.");
251// context.backtrack();
252// } else if (!checkGlobalConstraints()) {
253// logger.debug("Global contraint is not satisifed.");
254// context.backtrack();
255// }
256
239 int currentSize = model.getNewElements().size(); 257 int currentSize = model.getNewElements().size();
240 int targetDiff = targetSize - currentSize; 258 int targetDiff = targetSize - currentSize;
241 boolean shouldFinish = currentSize >= targetSize; 259 boolean shouldFinish = currentSize >= targetSize;
@@ -278,6 +296,20 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements
278 logger.info("Interrupted."); 296 logger.info("Interrupted.");
279 } 297 }
280 298
299 private boolean checkGlobalConstraints() {
300 long start = System.nanoTime();
301 boolean result = context.checkGlobalConstraints();
302 globalConstraintEvaluationTime += System.nanoTime() - start;
303 return result;
304 }
305
306 private Fitness calculateFitness() {
307 long start = System.nanoTime();
308 Fitness fitness = context.calculateFitness();
309 fitnessCalculationTime += System.nanoTime() - start;
310 return fitness;
311 }
312
281 /** 313 /**
282 * 314 *
283 * @param activationIds 315 * @param activationIds
@@ -475,7 +507,7 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements
475 solutionStoreWithCopy.newSolution(context); 507 solutionStoreWithCopy.newSolution(context);
476 solutionStoreWithDiversityDescriptor.newSolution(context); 508 solutionStoreWithDiversityDescriptor.newSolution(context);
477 solutionStore.newSolution(context); 509 solutionStore.newSolution(context);
478 configuration.progressMonitor.workedModelFound(configuration.solutionScope.numberOfRequiredSolution); 510 configuration.progressMonitor.workedModelFound(configuration.solutionScope.numberOfRequiredSolutions);
479 511
480 logger.debug("Found a solution."); 512 logger.debug("Found a solution.");
481 } 513 }
@@ -484,23 +516,27 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements
484 516
485 public List<String> times = new LinkedList<String>(); 517 public List<String> times = new LinkedList<String>();
486 private void saveTimes() { 518 private void saveTimes() {
519 long forwardTime = context.getDesignSpaceManager().getForwardTime()/1000000;
520 long backtrackingTime = context.getDesignSpaceManager().getBacktrackingTime()/1000000;
487 long statecoderTime = ((NeighbourhoodBasedPartialInterpretationStateCoder)this.context.getStateCoder()).getStatecoderRuntime()/1000000; 521 long statecoderTime = ((NeighbourhoodBasedPartialInterpretationStateCoder)this.context.getStateCoder()).getStatecoderRuntime()/1000000;
488 long solutionCopy = solutionStoreWithCopy.getSumRuntime()/1000000; 522 long solutionCopy = solutionStoreWithCopy.getSumRuntime()/1000000;
489 long activationSelection = this.activationSelector.getRuntime()/1000000; 523 long activationSelection = this.activationSelector.getRuntime()/1000000;
490 long numericalSolverSumTime = this.numericSolver.getRuntime()/1000000; 524// long numericalSolverSumTime = this.numericSolver.getRuntime()/1000000;
491 long numericalSolverProblemForming = this.numericSolver.getSolverSolvingProblem()/1000000; 525// long numericalSolverProblemForming = this.numericSolver.getSolverSolvingProblem()/1000000;
492 long numericalSolverSolving = this.numericSolver.getSolverSolvingProblem()/1000000; 526// long numericalSolverSolving = this.numericSolver.getSolverSolvingProblem()/1000000;
493 long numericalSolverInterpreting = this.numericSolver.getSolverSolution()/1000000; 527// long numericalSolverInterpreting = this.numericSolver.getSolverSolution()/1000000;
494 long metricCalculationTime = this.method.getStatistics().metricCalculationTime / 1000000; 528 long metricCalculationTime = this.method.getStatistics().metricCalculationTime / 1000000;
495 this.times.add( 529 this.times.add(
496 "(TransformationExecutionTime"+method.getStatistics().transformationExecutionTime/1000000+ 530 "(TransformationExecutionTime"+method.getStatistics().transformationExecutionTime/1000000+
531 "|ForwardTime:"+forwardTime+
532 "|Backtrackingtime:"+backtrackingTime+
497 "|StateCoderTime:"+statecoderTime+ 533 "|StateCoderTime:"+statecoderTime+
498 "|SolutionCopyTime:"+solutionCopy+ 534 "|SolutionCopyTime:"+solutionCopy+
499 "|ActivationSelectionTime:"+activationSelection+ 535 "|ActivationSelectionTime:"+activationSelection+
500 "|NumericalSolverSumTime:"+numericalSolverSumTime+ 536 //"|NumericalSolverSumTime:"+numericalSolverSumTime+
501 "|NumericalSolverProblemFormingTime:"+numericalSolverProblemForming+ 537 //"|NumericalSolverProblemFormingTime:"+numericalSolverProblemForming+
502 "|NumericalSolverSolvingTime:"+numericalSolverSolving+ 538 //"|NumericalSolverSolvingTime:"+numericalSolverSolving+
503 "|NumericalSolverInterpretingSolution:"+numericalSolverInterpreting+ 539 //"|NumericalSolverInterpretingSolution:"+numericalSolverInterpreting+
504 "|MetricCalculationTime:"+metricCalculationTime + ")" 540 "|MetricCalculationTime:"+metricCalculationTime + ")"
505 ); 541 );
506 542
@@ -544,13 +580,16 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements
544// } 580// }
545 581
546 public void visualiseCurrentState() { 582 public void visualiseCurrentState() {
547 PartialInterpretationVisualiser partialInterpretatioVisualiser = configuration.debugCongiguration.partialInterpretatioVisualiser; 583 PartialInterpretationVisualiser partialInterpretatioVisualiser = configuration.debugConfiguration.partialInterpretatioVisualiser;
548 if(partialInterpretatioVisualiser != null && this.configuration.documentationLevel == DocumentationLevel.FULL && workspace != null) { 584 if(partialInterpretatioVisualiser != null && this.configuration.documentationLevel == DocumentationLevel.FULL && workspace != null) {
549 PartialInterpretation p = (PartialInterpretation) (context.getModel()); 585 PartialInterpretation p = (PartialInterpretation) (context.getModel());
550 int id = ++numberOfPrintedModel; 586 int id = ++numberOfPrintedModel;
551 if (id % configuration.debugCongiguration.partalInterpretationVisualisationFrequency == 0) { 587 if (id % configuration.debugConfiguration.partalInterpretationVisualisationFrequency == 0) {
552 PartialInterpretationVisualisation visualisation = partialInterpretatioVisualiser.visualiseConcretization(p); 588 PartialInterpretationVisualisation visualisation = partialInterpretatioVisualiser.visualiseConcretization(p);
553 visualisation.writeToFile(workspace, String.format("state%09d.png", id)); 589 logger.debug("Visualizing state: " + id + " (" + context.getDesignSpaceManager().getCurrentState() + ")");
590 String name = String.format("state%09d", id);
591 visualisation.writeToFile(workspace, name + ".png");
592 workspace.writeModel((EObject) context.getModel(), name + ".xmi");
554 } 593 }
555 } 594 }
556 } 595 }