diff options
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.xtend | 65 |
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 | |||
42 | import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel | 42 | import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel |
43 | import org.eclipse.viatra.dse.solutionstore.SolutionStore | 43 | import org.eclipse.viatra.dse.solutionstore.SolutionStore |
44 | import org.eclipse.viatra.dse.statecode.IStateCoderFactory | 44 | import org.eclipse.viatra.dse.statecode.IStateCoderFactory |
45 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.NumericSolver | ||
45 | 46 | ||
46 | class ViatraReasoner extends LogicReasoner { | 47 | class 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 |