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.xtend105
1 files changed, 44 insertions, 61 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 c333feca..8e992741 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,7 +1,5 @@
1package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner 1package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner
2 2
3import com.google.common.collect.ImmutableList
4import com.google.common.collect.Lists
5import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel 3import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel
6import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasoner 4import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasoner
7import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasonerException 5import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasonerException
@@ -11,7 +9,6 @@ import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem
11import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicproblemPackage 9import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicproblemPackage
12import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicresultFactory 10import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicresultFactory
13import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult 11import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult
14import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider
15import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagatorStrategy 12import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagatorStrategy
16import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.PartialInterpretationInitialiser 13import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.PartialInterpretationInitialiser
17import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation 14import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
@@ -22,7 +19,6 @@ import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.sta
22import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.statecoder.PairwiseNeighbourhoodBasedStateCoderFactory 19import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.statecoder.PairwiseNeighbourhoodBasedStateCoderFactory
23import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.BasicScopeGlobalConstraint 20import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.BasicScopeGlobalConstraint
24import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.BestFirstStrategyForModelGeneration 21import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.BestFirstStrategyForModelGeneration
25import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.DiversityChecker
26import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.InconsistentScopeGlobalConstraint 22import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.InconsistentScopeGlobalConstraint
27import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.LoggerSolutionFoundHandler 23import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.LoggerSolutionFoundHandler
28import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.ModelGenerationCompositeObjective 24import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.ModelGenerationCompositeObjective
@@ -32,11 +28,8 @@ import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.PunishSizeObjective
32import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.ScopeObjective 28import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.ScopeObjective
33import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.SurelyViolatedObjectiveGlobalConstraint 29import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.SurelyViolatedObjectiveGlobalConstraint
34import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.UnfinishedMultiplicityObjective 30import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.UnfinishedMultiplicityObjective
35import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.ViatraReasonerSolutionSaver
36import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.WF2ObjectiveConverter 31import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.WF2ObjectiveConverter
37import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.ObjectiveKind 32import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.ObjectiveKind
38import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.ThreeValuedCostElement
39import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.ThreeValuedCostObjective
40import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace 33import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace
41import java.util.List 34import java.util.List
42import java.util.Map 35import java.util.Map
@@ -86,12 +79,7 @@ class ViatraReasoner extends LogicReasoner {
86 problem, 79 problem,
87 emptySolution, 80 emptySolution,
88 workspace, 81 workspace,
89 viatraConfig.nameNewElements, 82 viatraConfig
90 viatraConfig.typeInferenceMethod,
91 viatraConfig.calculateObjectCreationCosts,
92 viatraConfig.scopePropagatorStrategy,
93 viatraConfig.hints,
94 viatraConfig.documentationLevel
95 ) 83 )
96 84
97 val compositeObjective = new ModelGenerationCompositeObjective( 85 val compositeObjective = new ModelGenerationCompositeObjective(
@@ -111,45 +99,21 @@ class ViatraReasoner extends LogicReasoner {
111 dse.addObjective(punishObjective) 99 dse.addObjective(punishObjective)
112 } 100 }
113 101
114 val extremalObjectives = Lists.newArrayListWithExpectedSize(viatraConfig.costObjectives.size) 102 for (costObjective : method.costObjectives) {
115 for (entry : viatraConfig.costObjectives.indexed) {
116 val objectiveName = '''costObjective«entry.key»'''
117 val objectiveConfig = entry.value
118 val elementsBuilder = ImmutableList.builder
119 for (elementConfig : objectiveConfig.elements) {
120 val relationName = elementConfig.patternQualifiedName
121 val modalQueries = method.modalRelationQueries.get(relationName)
122 if (modalQueries === null) {
123 throw new IllegalArgumentException("Unknown relation: " + relationName)
124 }
125 elementsBuilder.add(new ThreeValuedCostElement(
126 modalQueries.currentQuery,
127 modalQueries.mayQuery,
128 modalQueries.mustQuery,
129 elementConfig.weight
130 ))
131 }
132 val costElements = elementsBuilder.build
133 val costObjective = new ThreeValuedCostObjective(objectiveName, costElements, objectiveConfig.kind,
134 objectiveConfig.threshold, 3)
135 dse.addObjective(costObjective) 103 dse.addObjective(costObjective)
136 if (objectiveConfig.findExtremum) {
137 extremalObjectives += costObjective
138 }
139 } 104 }
140
141 val numberOfRequiredSolutions = configuration.solutionScope.numberOfRequiredSolutions 105 val numberOfRequiredSolutions = configuration.solutionScope.numberOfRequiredSolutions
142 val solutionStore = if (extremalObjectives.empty) { 106 val solutionStore = if (method.optimizationProblem) {
143 new SolutionStore(numberOfRequiredSolutions)
144 } else {
145 new SolutionStore() 107 new SolutionStore()
108 } else {
109 new SolutionStore(numberOfRequiredSolutions)
146 } 110 }
147 solutionStore.registerSolutionFoundHandler(new LoggerSolutionFoundHandler(viatraConfig)) 111 solutionStore.registerSolutionFoundHandler(new LoggerSolutionFoundHandler(viatraConfig))
148 val diversityChecker = DiversityChecker.of(viatraConfig.diversityRequirement)
149 val numericSolver = new NumericSolver(method, viatraConfig.runIntermediateNumericalConsistencyChecks, false) 112 val numericSolver = new NumericSolver(method, viatraConfig.runIntermediateNumericalConsistencyChecks, false)
150 val solutionSaver = new ViatraReasonerSolutionSaver(newArrayList(extremalObjectives), numberOfRequiredSolutions, 113 val solutionSaver = method.solutionSaver
151 diversityChecker, numericSolver) 114 solutionSaver.numericSolver = numericSolver
152 val solutionCopier = solutionSaver.solutionCopier 115 val solutionCopier = solutionSaver.solutionCopier
116 val diversityChecker = solutionSaver.diversityChecker
153 solutionStore.withSolutionSaver(solutionSaver) 117 solutionStore.withSolutionSaver(solutionSaver)
154 dse.solutionStore = solutionStore 118 dse.solutionStore = solutionStore
155 119
@@ -184,7 +148,8 @@ class ViatraReasoner extends LogicReasoner {
184 dse.addTransformationRule(rule) 148 dse.addTransformationRule(rule)
185 } 149 }
186 150
187 val strategy = new BestFirstStrategyForModelGeneration(workspace, viatraConfig, method, solutionSaver, numericSolver) 151 val strategy = new BestFirstStrategyForModelGeneration(workspace, viatraConfig, method, solutionSaver,
152 numericSolver)
188 viatraConfig.progressMonitor.workedForwardTransformation 153 viatraConfig.progressMonitor.workedForwardTransformation
189 val transformationFinished = System.nanoTime 154 val transformationFinished = System.nanoTime
190 val transformationTime = transformationFinished - transformationStartTime 155 val transformationTime = transformationFinished - transformationStartTime
@@ -210,14 +175,15 @@ class ViatraReasoner extends LogicReasoner {
210 it.value = (pair.value / 1000000) as int 175 it.value = (pair.value / 1000000) as int
211 ] 176 ]
212 } 177 }
213 for(x: 0..<strategy.times.size) { 178 for (x : 0 ..< strategy.times.size) {
214 it.entries += createStringStatisticEntry => [ 179 it.entries += createStringStatisticEntry => [
215 it.name = '''Solution«x+1»DetailedStatistics''' 180 it.name = '''Solution«x+1»DetailedStatistics'''
216 it.value = strategy.times.get(x) 181 it.value = strategy.times.get(x)
217 ] 182 ]
218 } 183 }
219 it.entries += createIntStatisticEntry => [ 184 it.entries += createIntStatisticEntry => [
220 it.name = "ExplorationInitializationTime" it.value = ((strategy.explorationStarted-transformationFinished)/1000000) as int 185 it.name = "ExplorationInitializationTime"
186 it.value = ((strategy.explorationStarted - transformationFinished) / 1000000) as int
221 ] 187 ]
222 it.entries += createIntStatisticEntry => [ 188 it.entries += createIntStatisticEntry => [
223 it.name = "TransformationExecutionTime" 189 it.name = "TransformationExecutionTime"
@@ -228,6 +194,10 @@ class ViatraReasoner extends LogicReasoner {
228 it.value = (method.statistics.scopePropagationTime / 1000000) as int 194 it.value = (method.statistics.scopePropagationTime / 1000000) as int
229 ] 195 ]
230 it.entries += createIntStatisticEntry => [ 196 it.entries += createIntStatisticEntry => [
197 it.name = "MustRelationPropagationTime"
198 it.value = (method.statistics.mustRelationPropagationTime / 1000000) as int
199 ]
200 it.entries += createIntStatisticEntry => [
231 it.name = "TypeAnalysisTime" 201 it.name = "TypeAnalysisTime"
232 it.value = (method.statistics.preliminaryTypeAnalisisTime / 1000000) as int 202 it.value = (method.statistics.preliminaryTypeAnalisisTime / 1000000) as int
233 ] 203 ]
@@ -248,22 +218,28 @@ class ViatraReasoner extends LogicReasoner {
248 it.value = dse.numberOfStates as int 218 it.value = dse.numberOfStates as int
249 ] 219 ]
250 it.entries += createIntStatisticEntry => [ 220 it.entries += createIntStatisticEntry => [
251 it.name = "ForwardTime" it.value = (strategy.forwardTime/1000000) as int 221 it.name = "ForwardTime"
222 it.value = (strategy.forwardTime / 1000000) as int
252 ] 223 ]
253 it.entries += createIntStatisticEntry => [ 224 it.entries += createIntStatisticEntry => [
254 it.name = "BacktrackingTime" it.value = (strategy.backtrackingTime/1000000) as int 225 it.name = "BacktrackingTime"
226 it.value = (strategy.backtrackingTime / 1000000) as int
255 ] 227 ]
256 it.entries += createIntStatisticEntry => [ 228 it.entries += createIntStatisticEntry => [
257 it.name = "GlobalConstraintEvaluationTime" it.value = (strategy.globalConstraintEvaluationTime/1000000) as int 229 it.name = "GlobalConstraintEvaluationTime"
230 it.value = (strategy.globalConstraintEvaluationTime / 1000000) as int
258 ] 231 ]
259 it.entries += createIntStatisticEntry => [ 232 it.entries += createIntStatisticEntry => [
260 it.name = "FitnessCalculationTime" it.value = (strategy.fitnessCalculationTime/1000000) as int 233 it.name = "FitnessCalculationTime"
234 it.value = (strategy.fitnessCalculationTime / 1000000) as int
261 ] 235 ]
262 it.entries += createIntStatisticEntry => [ 236 it.entries += createIntStatisticEntry => [
263 it.name = "SolutionCopyTime" it.value = (solutionSaver.totalCopierRuntime/1000000) as int 237 it.name = "SolutionCopyTime"
238 it.value = (solutionSaver.totalCopierRuntime / 1000000) as int
264 ] 239 ]
265 it.entries += createIntStatisticEntry => [ 240 it.entries += createIntStatisticEntry => [
266 it.name = "ActivationSelectionTime" it.value = (strategy.activationSelector.runtime/1000000) as int 241 it.name = "ActivationSelectionTime"
242 it.value = (strategy.activationSelector.runtime / 1000000) as int
267 ] 243 ]
268 it.entries += createIntStatisticEntry => [ 244 it.entries += createIntStatisticEntry => [
269 it.name = "Decisions" 245 it.name = "Decisions"
@@ -282,27 +258,34 @@ class ViatraReasoner extends LogicReasoner {
282 it.value = method.statistics.scopePropagatorSolverInvocations 258 it.value = method.statistics.scopePropagatorSolverInvocations
283 ] 259 ]
284 it.entries += createIntStatisticEntry => [ 260 it.entries += createIntStatisticEntry => [
285 it.name = "NumericalSolverSumTime" it.value = (strategy.numericSolver.runtime/1000000) as int 261 it.name = "NumericalSolverSumTime"
262 it.value = (strategy.numericSolver.runtime / 1000000) as int
286 ] 263 ]
287 it.entries += createIntStatisticEntry => [ 264 it.entries += createIntStatisticEntry => [
288 it.name = "NumericalSolverProblemFormingTime" it.value = (strategy.numericSolver.solverFormingProblem/1000000) as int 265 it.name = "NumericalSolverProblemFormingTime"
266 it.value = (strategy.numericSolver.solverFormingProblem / 1000000) as int
289 ] 267 ]
290 it.entries += createIntStatisticEntry => [ 268 it.entries += createIntStatisticEntry => [
291 it.name = "NumericalSolverSolvingTime" it.value = (strategy.numericSolver.solverSolvingProblem/1000000) as int 269 it.name = "NumericalSolverSolvingTime"
270 it.value = (strategy.numericSolver.solverSolvingProblem / 1000000) as int
292 ] 271 ]
293 it.entries += createIntStatisticEntry => [ 272 it.entries += createIntStatisticEntry => [
294 it.name = "NumericalSolverInterpretingSolution" it.value = (strategy.numericSolver.solverSolution/1000000) as int 273 it.name = "NumericalSolverInterpretingSolution"
274 it.value = (strategy.numericSolver.solverSolution / 1000000) as int
295 ] 275 ]
296 it.entries += createIntStatisticEntry => [ 276 it.entries += createIntStatisticEntry => [
297 it.name = "NumericalSolverCachingTime" it.value = (strategy.numericSolver.cachingTime/1000000) as int 277 it.name = "NumericalSolverCachingTime"
278 it.value = (strategy.numericSolver.cachingTime / 1000000) as int
298 ] 279 ]
299 it.entries += createIntStatisticEntry => [ 280 it.entries += createIntStatisticEntry => [
300 it.name = "NumericalSolverCallNumber" it.value = strategy.numericSolver.numberOfSolverCalls 281 it.name = "NumericalSolverCallNumber"
282 it.value = strategy.numericSolver.numberOfSolverCalls
301 ] 283 ]
302 it.entries += createIntStatisticEntry => [ 284 it.entries += createIntStatisticEntry => [
303 it.name = "NumericalSolverCachedAnswerNumber" it.value = strategy.numericSolver.numberOfCachedSolverCalls 285 it.name = "NumericalSolverCachedAnswerNumber"
286 it.value = strategy.numericSolver.numberOfCachedSolverCalls
304 ] 287 ]
305 if(diversityChecker.active) { 288 if (diversityChecker.active) {
306 it.entries += createIntStatisticEntry => [ 289 it.entries += createIntStatisticEntry => [
307 it.name = "SolutionDiversityCheckTime" 290 it.name = "SolutionDiversityCheckTime"
308 it.value = (diversityChecker.totalRuntime / 1000000) as int 291 it.value = (diversityChecker.totalRuntime / 1000000) as int