aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <oszkar.semerath@gmail.com>2018-03-03 02:02:21 -0500
committerLibravatar OszkarSemerath <oszkar.semerath@gmail.com>2018-03-03 02:02:21 -0500
commita575e7d063ef1776d620fe6318b8ba2f30d82a11 (patch)
tree98e252632ce04fc0ec80cd0e204f58dbcdb91130
parent+SolverProcessMonitor to (optionally) report process and request cancel (diff)
downloadVIATRA-Generator-a575e7d063ef1776d620fe6318b8ba2f30d82a11.tar.gz
VIATRA-Generator-a575e7d063ef1776d620fe6318b8ba2f30d82a11.tar.zst
VIATRA-Generator-a575e7d063ef1776d620fe6318b8ba2f30d82a11.zip
ViatraSolver reports progress and stops at cancel
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend22
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java11
2 files changed, 13 insertions, 20 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 613c68b3..198beabb 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
@@ -29,6 +29,7 @@ import org.eclipse.viatra.dse.api.DesignSpaceExplorer
29import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel 29import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel
30import org.eclipse.viatra.dse.solutionstore.SolutionStore 30import org.eclipse.viatra.dse.solutionstore.SolutionStore
31import org.eclipse.viatra.dse.statecode.IStateCoderFactory 31import org.eclipse.viatra.dse.statecode.IStateCoderFactory
32import javax.security.auth.login.Configuration.Parameters
32 33
33class ViatraReasoner extends LogicReasoner{ 34class ViatraReasoner extends LogicReasoner{
34 val PartialInterpretationInitialiser initialiser = new PartialInterpretationInitialiser() 35 val PartialInterpretationInitialiser initialiser = new PartialInterpretationInitialiser()
@@ -79,7 +80,7 @@ class ViatraReasoner extends LogicReasoner{
79 80
80 dse.setInitialModel(emptySolution,false) 81 dse.setInitialModel(emptySolution,false)
81 82
82 var IStateCoderFactory statecoder = if(viatraConfig.stateCoderStrategy == StateCoderStrategy.Neighbourhood) { 83 val IStateCoderFactory statecoder = if(viatraConfig.stateCoderStrategy == StateCoderStrategy.Neighbourhood) {
83 new NeighbourhoodBasedStateCoderFactory 84 new NeighbourhoodBasedStateCoderFactory
84 } else { 85 } else {
85 new IdentifierBasedStateCoderFactory 86 new IdentifierBasedStateCoderFactory
@@ -98,11 +99,12 @@ class ViatraReasoner extends LogicReasoner{
98 dse.addTransformationRule(rule) 99 dse.addTransformationRule(rule)
99 } 100 }
100 101
101 val strategy = new BestFirstStrategyForModelGeneration( 102 val strategy = new BestFirstStrategyForModelGeneration(workspace,viatraConfig)
102 workspace,viatraConfig) 103 viatraConfig.progressMonitor.workedForwardTransformation
103 104
104 val transformationTime = System.nanoTime - transformationStartTime 105 val transformationTime = System.nanoTime - transformationStartTime
105 val solverStartTime = System.nanoTime 106 val solverStartTime = System.nanoTime
107
106 var boolean stoppedByTimeout 108 var boolean stoppedByTimeout
107 var boolean stoppedByException 109 var boolean stoppedByException
108 try{ 110 try{
@@ -112,10 +114,9 @@ class ViatraReasoner extends LogicReasoner{
112 stoppedByTimeout = false 114 stoppedByTimeout = false
113 stoppedByException = true 115 stoppedByException = true
114 } 116 }
115
116 val solverTime = System.nanoTime - solverStartTime 117 val solverTime = System.nanoTime - solverStartTime
118 viatraConfig.progressMonitor.workedSearchFinished
117 119
118 val statecoderFinal = statecoder
119 //additionalMatches = strategy.solutionStoreWithCopy.additionalMatches 120 //additionalMatches = strategy.solutionStoreWithCopy.additionalMatches
120 val statistics = createStatistics => [ 121 val statistics = createStatistics => [
121 //it.solverTime = viatraConfig.runtimeLimit 122 //it.solverTime = viatraConfig.runtimeLimit
@@ -134,7 +135,7 @@ class ViatraReasoner extends LogicReasoner{
134 it.name = "TypeAnalysisTime" it.value = (method.statistics.PreliminaryTypeAnalisisTime/1000000) as int 135 it.name = "TypeAnalysisTime" it.value = (method.statistics.PreliminaryTypeAnalisisTime/1000000) as int
135 ] 136 ]
136 it.entries += createIntStatisticEntry => [ 137 it.entries += createIntStatisticEntry => [
137 it.name = "StateCoderTime" it.value = (statecoderFinal.runtime/1000000) as int 138 it.name = "StateCoderTime" it.value = (statecoder.runtime/1000000) as int
138 ] 139 ]
139 it.entries += createIntStatisticEntry => [ 140 it.entries += createIntStatisticEntry => [
140 it.name = "StateCoderFailCount" it.value = strategy.numberOfStatecoderFail 141 it.name = "StateCoderFailCount" it.value = strategy.numberOfStatecoderFail
@@ -152,6 +153,8 @@ class ViatraReasoner extends LogicReasoner{
152 } 153 }
153 ] 154 ]
154 155
156 viatraConfig.progressMonitor.workedBackwardTransformationFinished
157
155 if(stoppedByTimeout) { 158 if(stoppedByTimeout) {
156 return createInsuficientResourcesResult=>[ 159 return createInsuficientResourcesResult=>[
157 it.problem = problem 160 it.problem = problem
@@ -165,12 +168,7 @@ class ViatraReasoner extends LogicReasoner{
165 it.statistics = statistics 168 it.statistics = statistics
166 ] 169 ]
167 } else { 170 } else {
168 171 return createModelResult => [
169 /*solutionStore.solutions.head.trajectories.head
170 solutionTrajectory.doTransformation(emptySolution)
171 *
172 */
173 return factory.createModelResult => [
174 it.problem = problem 172 it.problem = problem
175 it.trace = strategy.solutionStoreWithCopy.copyTraces 173 it.trace = strategy.solutionStoreWithCopy.copyTraces
176 it.representation += strategy.solutionStoreWithCopy.solutions 174 it.representation += strategy.solutionStoreWithCopy.solutions
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 f7a840f0..63697887 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
@@ -25,22 +25,16 @@ import org.eclipse.viatra.dse.base.ThreadContext;
25import org.eclipse.viatra.dse.objectives.Fitness; 25import org.eclipse.viatra.dse.objectives.Fitness;
26import org.eclipse.viatra.dse.objectives.ObjectiveComparatorHelper; 26import org.eclipse.viatra.dse.objectives.ObjectiveComparatorHelper;
27import org.eclipse.viatra.dse.solutionstore.SolutionStore; 27import org.eclipse.viatra.dse.solutionstore.SolutionStore;
28import org.eclipse.xtend.lib.annotations.AccessorType;
29import org.eclipse.xtend.lib.annotations.Accessors;
30 28
31import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasoner; 29import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasoner;
32import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicSolverConfiguration;
33import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem; 30import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem;
34import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.InconsistencyResult; 31import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.InconsistencyResult;
35import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicResult; 32import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicResult;
36import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult; 33import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult;
37import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.PartialInterpretation2Logic; 34import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.PartialInterpretation2Logic;
38import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation; 35import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation;
39import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretation2Gml;
40import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualisation; 36import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualisation;
41import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualiser; 37import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualiser;
42import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.DebugConfiguration;
43import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.DiversityDescriptor;
44import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasonerConfiguration; 38import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasonerConfiguration;
45import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace; 39import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace;
46 40
@@ -138,7 +132,7 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
138 TrajectoryWithFitness currentTrajectoryWithFittness = new TrajectoryWithFitness(firstTrajectory, firstFittness); 132 TrajectoryWithFitness currentTrajectoryWithFittness = new TrajectoryWithFitness(firstTrajectory, firstFittness);
139 trajectoiresToExplore.add(currentTrajectoryWithFittness); 133 trajectoiresToExplore.add(currentTrajectoryWithFittness);
140 134
141 mainLoop: while (!isInterrupted) { 135 mainLoop: while (!isInterrupted && !configuration.progressMonitor.isCancelled()) {
142 136
143 if (currentTrajectoryWithFittness == null) { 137 if (currentTrajectoryWithFittness == null) {
144 if (trajectoiresToExplore.isEmpty()) { 138 if (trajectoiresToExplore.isEmpty()) {
@@ -163,7 +157,7 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
163 List<Object> activationIds = selectActivation(); 157 List<Object> activationIds = selectActivation();
164 Iterator<Object> iterator = activationIds.iterator(); 158 Iterator<Object> iterator = activationIds.iterator();
165 159
166 while (!isInterrupted && iterator.hasNext()) { 160 while (!isInterrupted && !configuration.progressMonitor.isCancelled() && iterator.hasNext()) {
167 final Object nextActivation = iterator.next(); 161 final Object nextActivation = iterator.next();
168// if (!iterator.hasNext()) { 162// if (!iterator.hasNext()) {
169// logger.debug("Last untraversed activation of the state."); 163// logger.debug("Last untraversed activation of the state.");
@@ -239,6 +233,7 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
239 solutionStoreWithCopy.newSolution(context); 233 solutionStoreWithCopy.newSolution(context);
240 solutionStoreWithDiversityDescriptor.newSolution(context); 234 solutionStoreWithDiversityDescriptor.newSolution(context);
241 solutionStore.newSolution(context); 235 solutionStore.newSolution(context);
236 configuration.progressMonitor.workedModelFound(configuration.solutionScope.numberOfRequiredSolution);
242 237
243 logger.debug("Found a solution."); 238 logger.debug("Found a solution.");
244 } 239 }