From 7595605950a45892af9e19cb8a5968da127479f4 Mon Sep 17 00:00:00 2001 From: 20001LastOrder Date: Mon, 27 May 2019 16:20:40 -0400 Subject: modify generation to log metrics measurements --- .../META-INF/MANIFEST.MF | 3 ++- .../viatrasolver/reasoner/ViatraReasoner.xtend | 12 +++++++++--- .../dse/BestFirstStrategyForModelGeneration.java | 17 +++++++++++++++-- 3 files changed, 26 insertions(+), 6 deletions(-) (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner') diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/META-INF/MANIFEST.MF b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/META-INF/MANIFEST.MF index 2a271acf..7077ae34 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/META-INF/MANIFEST.MF +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/META-INF/MANIFEST.MF @@ -17,7 +17,8 @@ Require-Bundle: hu.bme.mit.inf.dslreasoner.ecore2logic;bundle-version="1.0.0", org.eclipse.viatra.query.runtime;bundle-version="1.5.0", org.eclipse.viatra.dse;bundle-version="0.20.0", org.eclipse.emf.ecore.edit;bundle-version="2.9.0", - org.eclipse.viatra.query.runtime.base.itc;bundle-version="1.7.0" + org.eclipse.viatra.query.runtime.base.itc;bundle-version="1.7.0", + ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator;bundle-version="1.0.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Import-Package: org.apache.log4j Automatic-Module-Name: hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner 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 6639e5f3..7ef7073a 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 @@ -1,5 +1,6 @@ package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.PartialInterpretationMetric import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasoner import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasonerException @@ -27,12 +28,11 @@ import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace import java.util.List import java.util.Map import org.eclipse.emf.ecore.EObject +import org.eclipse.emf.ecore.util.EcoreUtil import org.eclipse.viatra.dse.api.DesignSpaceExplorer import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel import org.eclipse.viatra.dse.solutionstore.SolutionStore import org.eclipse.viatra.dse.statecode.IStateCoderFactory -import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.SolutionStoreWithDiversityDescriptor -import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.DiversityGranularity class ViatraReasoner extends LogicReasoner{ val PartialInterpretationInitialiser initialiser = new PartialInterpretationInitialiser() @@ -61,11 +61,12 @@ class ViatraReasoner extends LogicReasoner{ val emptySolution = initialiser.initialisePartialInterpretation(problem,viatraConfig.typeScopes).output + if((viatraConfig.documentationLevel == DocumentationLevel::FULL || viatraConfig.documentationLevel == DocumentationLevel::NORMAL) && workspace !== null) { workspace.writeModel(emptySolution,"init.partialmodel") } emptySolution.problemConainer = problem - + val emptySolutionCopy = EcoreUtil.copy(emptySolution) val ScopePropagator scopePropagator = new ScopePropagator(emptySolution) scopePropagator.propagateAllScopeConstraints @@ -129,6 +130,11 @@ class ViatraReasoner extends LogicReasoner{ val solverTime = System.nanoTime - solverStartTime viatraConfig.progressMonitor.workedSearchFinished + //find trajectory to each solution + if(viatraConfig.documentationLevel == DocumentationLevel.METRICS){ + PartialInterpretationMetric.outputTrajectories(emptySolutionCopy, dse.solutions.toList()); + } + //additionalMatches = strategy.solutionStoreWithCopy.additionalMatches val statistics = createStatistics => [ //it.solverTime = viatraConfig.runtimeLimit diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java index 60f46033..21efd7ba 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java @@ -32,6 +32,7 @@ import org.eclipse.viatra.query.runtime.api.IQuerySpecification; import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.PartialInterpretationMetric; import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel; import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasoner; import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem; @@ -190,6 +191,7 @@ public class BestFirstStrategyForModelGeneration implements IStrategy { List activationIds = selectActivation(); Iterator iterator = activationIds.iterator(); + while (!isInterrupted && !configuration.progressMonitor.isCancelled() && iterator.hasNext()) { final Object nextActivation = iterator.next(); // if (!iterator.hasNext()) { @@ -198,7 +200,7 @@ public class BestFirstStrategyForModelGeneration implements IStrategy { // } logger.debug("Executing new activation: " + nextActivation); context.executeAcitvationId(nextActivation); - + visualiseCurrentState(); // for(ViatraQueryMatcher matcher : matchers) { // System.out.println(matcher.getPatternName()); @@ -209,6 +211,9 @@ public class BestFirstStrategyForModelGeneration implements IStrategy { // System.out.println("---------"); // } + //calculate the metrics for each state + logCurrentStateMetric(); + boolean consistencyCheckResult = checkConsistency(currentTrajectoryWithFittness); if(consistencyCheckResult == true) { continue mainLoop; } @@ -248,7 +253,6 @@ public class BestFirstStrategyForModelGeneration implements IStrategy { } } } - logger.debug("State is fully traversed."); trajectoiresToExplore.remove(currentTrajectoryWithFittness); currentTrajectoryWithFittness = null; @@ -309,6 +313,15 @@ public class BestFirstStrategyForModelGeneration implements IStrategy { return trajectoiresToExplore.element(); } } + + private void logCurrentStateMetric() { + if(this.configuration.documentationLevel != DocumentationLevel.METRICS || workspace == null) { + return; + } + + PartialInterpretation interpretation = (PartialInterpretation)context.getModel(); //pattern.get("interpretation"); + PartialInterpretationMetric.calculateMetric(interpretation, "debug/metric/" + context.getModel().hashCode(), context.getCurrentStateId().toString()); + } public void visualiseCurrentState() { PartialInterpretationVisualiser partialInterpretatioVisualiser = configuration.debugCongiguration.partialInterpretatioVisualiser; -- cgit v1.2.3-70-g09d2