aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend
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/ViatraReasoner.xtend')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend65
1 files changed, 58 insertions, 7 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 aa02cd30..3033eca7 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
@@ -42,6 +42,7 @@ import org.eclipse.viatra.dse.api.DesignSpaceExplorer
42import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel 42import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel
43import org.eclipse.viatra.dse.solutionstore.SolutionStore 43import org.eclipse.viatra.dse.solutionstore.SolutionStore
44import org.eclipse.viatra.dse.statecode.IStateCoderFactory 44import org.eclipse.viatra.dse.statecode.IStateCoderFactory
45import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.NumericSolver
45 46
46class ViatraReasoner extends LogicReasoner { 47class ViatraReasoner extends LogicReasoner {
47 val PartialInterpretationInitialiser initialiser = new PartialInterpretationInitialiser() 48 val PartialInterpretationInitialiser initialiser = new PartialInterpretationInitialiser()
@@ -66,12 +67,12 @@ class ViatraReasoner extends LogicReasoner {
66 dse.addMetaModelPackage(PartialinterpretationPackage.eINSTANCE) 67 dse.addMetaModelPackage(PartialinterpretationPackage.eINSTANCE)
67 68
68 val transformationStartTime = System.nanoTime 69 val transformationStartTime = System.nanoTime
69
70 val emptySolution = initialiser.initialisePartialInterpretation(problem, viatraConfig.typeScopes).output 70 val emptySolution = initialiser.initialisePartialInterpretation(problem, viatraConfig.typeScopes).output
71 if ((viatraConfig.documentationLevel == DocumentationLevel::FULL || 71 if ((viatraConfig.documentationLevel == DocumentationLevel::FULL ||
72 viatraConfig.documentationLevel == DocumentationLevel::NORMAL) && workspace !== null) { 72 viatraConfig.documentationLevel == DocumentationLevel::NORMAL) && workspace !== null) {
73 workspace.writeModel(emptySolution, "init.partialmodel") 73 workspace.writeModel(emptySolution, "init.partialmodel")
74 } 74 }
75
75 emptySolution.problemConainer = problem 76 emptySolution.problemConainer = problem
76 var BasicScopeGlobalConstraint basicScopeGlobalConstraint = null 77 var BasicScopeGlobalConstraint basicScopeGlobalConstraint = null
77 if (viatraConfig.scopePropagatorStrategy == ScopePropagatorStrategy.None) { 78 if (viatraConfig.scopePropagatorStrategy == ScopePropagatorStrategy.None) {
@@ -93,7 +94,8 @@ class ViatraReasoner extends LogicReasoner {
93 dse.addObjective(new ModelGenerationCompositeObjective( 94 dse.addObjective(new ModelGenerationCompositeObjective(
94 basicScopeGlobalConstraint ?: new ScopeObjective, 95 basicScopeGlobalConstraint ?: new ScopeObjective,
95 method.unfinishedMultiplicities.map[new UnfinishedMultiplicityObjective(it)], 96 method.unfinishedMultiplicities.map[new UnfinishedMultiplicityObjective(it)],
96 wf2ObjectiveConverter.createCompletenessObjective(method.unfinishedWF) 97 wf2ObjectiveConverter.createCompletenessObjective(method.unfinishedWF),
98 viatraConfig
97 )) 99 ))
98 100
99 val extremalObjectives = Lists.newArrayListWithExpectedSize(viatraConfig.costObjectives.size) 101 val extremalObjectives = Lists.newArrayListWithExpectedSize(viatraConfig.costObjectives.size)
@@ -131,8 +133,9 @@ class ViatraReasoner extends LogicReasoner {
131 } 133 }
132 solutionStore.registerSolutionFoundHandler(new LoggerSolutionFoundHandler(viatraConfig)) 134 solutionStore.registerSolutionFoundHandler(new LoggerSolutionFoundHandler(viatraConfig))
133 val diversityChecker = DiversityChecker.of(viatraConfig.diversityRequirement) 135 val diversityChecker = DiversityChecker.of(viatraConfig.diversityRequirement)
136 val numericSolver = new NumericSolver(method, viatraConfig.runIntermediateNumericalConsistencyChecks, false)
134 val solutionSaver = new ViatraReasonerSolutionSaver(newArrayList(extremalObjectives), numberOfRequiredSolutions, 137 val solutionSaver = new ViatraReasonerSolutionSaver(newArrayList(extremalObjectives), numberOfRequiredSolutions,
135 diversityChecker) 138 diversityChecker, numericSolver)
136 val solutionCopier = solutionSaver.solutionCopier 139 val solutionCopier = solutionSaver.solutionCopier
137 solutionStore.withSolutionSaver(solutionSaver) 140 solutionStore.withSolutionSaver(solutionSaver)
138 dse.solutionStore = solutionStore 141 dse.solutionStore = solutionStore
@@ -168,10 +171,10 @@ class ViatraReasoner extends LogicReasoner {
168 dse.addTransformationRule(rule) 171 dse.addTransformationRule(rule)
169 } 172 }
170 173
171 val strategy = new BestFirstStrategyForModelGeneration(workspace, viatraConfig, method) 174 val strategy = new BestFirstStrategyForModelGeneration(workspace, viatraConfig, method, solutionSaver, numericSolver)
172 viatraConfig.progressMonitor.workedForwardTransformation 175 viatraConfig.progressMonitor.workedForwardTransformation
173 176 val transformationFinished = System.nanoTime
174 val transformationTime = System.nanoTime - transformationStartTime 177 val transformationTime = transformationFinished - transformationStartTime
175 val solverStartTime = System.nanoTime 178 val solverStartTime = System.nanoTime
176 179
177 var boolean stoppedByTimeout 180 var boolean stoppedByTimeout
@@ -194,6 +197,15 @@ class ViatraReasoner extends LogicReasoner {
194 it.value = (pair.value / 1000000) as int 197 it.value = (pair.value / 1000000) as int
195 ] 198 ]
196 } 199 }
200 for(x: 0..<strategy.times.size) {
201 it.entries += createStringStatisticEntry => [
202 it.name = '''Solution«x+1»DetailedStatistics'''
203 it.value = strategy.times.get(x)
204 ]
205 }
206 it.entries += createIntStatisticEntry => [
207 it.name = "ExplorationInitializationTime" it.value = ((strategy.explorationStarted-transformationFinished)/1000000) as int
208 ]
197 it.entries += createIntStatisticEntry => [ 209 it.entries += createIntStatisticEntry => [
198 it.name = "TransformationExecutionTime" 210 it.name = "TransformationExecutionTime"
199 it.value = (method.statistics.transformationExecutionTime / 1000000) as int 211 it.value = (method.statistics.transformationExecutionTime / 1000000) as int
@@ -223,6 +235,24 @@ class ViatraReasoner extends LogicReasoner {
223 it.value = dse.numberOfStates as int 235 it.value = dse.numberOfStates as int
224 ] 236 ]
225 it.entries += createIntStatisticEntry => [ 237 it.entries += createIntStatisticEntry => [
238 it.name = "ForwardTime" it.value = (strategy.forwardTime/1000000) as int
239 ]
240 it.entries += createIntStatisticEntry => [
241 it.name = "BacktrackingTime" it.value = (strategy.backtrackingTime/1000000) as int
242 ]
243 it.entries += createIntStatisticEntry => [
244 it.name = "GlobalConstraintEvaluationTime" it.value = (strategy.globalConstraintEvaluationTime/1000000) as int
245 ]
246 it.entries += createIntStatisticEntry => [
247 it.name = "FitnessCalculationTime" it.value = (strategy.fitnessCalculationTime/1000000) as int
248 ]
249 it.entries += createIntStatisticEntry => [
250 it.name = "SolutionCopyTime" it.value = (solutionSaver.totalCopierRuntime/1000000) as int
251 ]
252 it.entries += createIntStatisticEntry => [
253 it.name = "ActivationSelectionTime" it.value = (strategy.activationSelector.runtime/1000000) as int
254 ]
255 it.entries += createIntStatisticEntry => [
226 it.name = "Decisions" 256 it.name = "Decisions"
227 it.value = method.statistics.decisionsTried 257 it.value = method.statistics.decisionsTried
228 ] 258 ]
@@ -238,7 +268,28 @@ class ViatraReasoner extends LogicReasoner {
238 it.name = "ScopePropagationsSolverCalls" 268 it.name = "ScopePropagationsSolverCalls"
239 it.value = method.statistics.scopePropagatorSolverInvocations 269 it.value = method.statistics.scopePropagatorSolverInvocations
240 ] 270 ]
241 if (diversityChecker.isActive) { 271 it.entries += createIntStatisticEntry => [
272 it.name = "NumericalSolverSumTime" it.value = (strategy.numericSolver.runtime/1000000) as int
273 ]
274 it.entries += createIntStatisticEntry => [
275 it.name = "NumericalSolverProblemFormingTime" it.value = (strategy.numericSolver.solverFormingProblem/1000000) as int
276 ]
277 it.entries += createIntStatisticEntry => [
278 it.name = "NumericalSolverSolvingTime" it.value = (strategy.numericSolver.solverSolvingProblem/1000000) as int
279 ]
280 it.entries += createIntStatisticEntry => [
281 it.name = "NumericalSolverInterpretingSolution" it.value = (strategy.numericSolver.solverSolution/1000000) as int
282 ]
283 it.entries += createIntStatisticEntry => [
284 it.name = "NumericalSolverCachingTime" it.value = (strategy.numericSolver.cachingTime/1000000) as int
285 ]
286 it.entries += createIntStatisticEntry => [
287 it.name = "NumericalSolverCallNumber" it.value = strategy.numericSolver.numberOfSolverCalls
288 ]
289 it.entries += createIntStatisticEntry => [
290 it.name = "NumericalSolverCachedAnswerNumber" it.value = strategy.numericSolver.numberOfCachedSolverCalls
291 ]
292 if(diversityChecker.active) {
242 it.entries += createIntStatisticEntry => [ 293 it.entries += createIntStatisticEntry => [
243 it.name = "SolutionDiversityCheckTime" 294 it.name = "SolutionDiversityCheckTime"
244 it.value = (diversityChecker.totalRuntime / 1000000) as int 295 it.value = (diversityChecker.totalRuntime / 1000000) as int