diff options
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/HillClimbingOnRealisticMetricStrategyForModelGeneration.java')
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; | |||
16 | import java.util.Set; | 16 | import java.util.Set; |
17 | 17 | ||
18 | import org.apache.log4j.Logger; | 18 | import org.apache.log4j.Logger; |
19 | import org.eclipse.emf.ecore.EObject; | ||
19 | import org.eclipse.emf.ecore.util.EcoreUtil; | 20 | import org.eclipse.emf.ecore.util.EcoreUtil; |
20 | import org.eclipse.viatra.dse.api.strategy.interfaces.IStrategy; | 21 | import org.eclipse.viatra.dse.api.strategy.interfaces.IStrategy; |
21 | import org.eclipse.viatra.dse.base.ThreadContext; | 22 | import org.eclipse.viatra.dse.base.ThreadContext; |
@@ -35,12 +36,12 @@ import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem; | |||
35 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.InconsistencyResult; | 36 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.InconsistencyResult; |
36 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicResult; | 37 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicResult; |
37 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult; | 38 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult; |
38 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethod; | ||
39 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.PartialInterpretation2Logic; | 39 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.PartialInterpretation2Logic; |
40 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation; | 40 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation; |
41 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.statecoder.NeighbourhoodBasedPartialInterpretationStateCoder; | 41 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.statecoder.NeighbourhoodBasedPartialInterpretationStateCoder; |
42 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualisation; | 42 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualisation; |
43 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualiser; | 43 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualiser; |
44 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ModelGenerationMethod; | ||
44 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.RealisticGuidance; | 45 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.RealisticGuidance; |
45 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasonerConfiguration; | 46 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasonerConfiguration; |
46 | import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace; | 47 | import 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 | } |