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 | 37 |
1 files changed, 29 insertions, 8 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 5d8859bd..fd70688b 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 | |||
@@ -25,6 +25,18 @@ import org.eclipse.viatra.dse.api.DesignSpaceExplorer | |||
25 | import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel | 25 | import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel |
26 | import org.eclipse.viatra.dse.solutionstore.SolutionStore | 26 | import org.eclipse.viatra.dse.solutionstore.SolutionStore |
27 | import org.eclipse.viatra.dse.statecode.IStateCoderFactory | 27 | import org.eclipse.viatra.dse.statecode.IStateCoderFactory |
28 | import java.util.List | ||
29 | import java.util.Map | ||
30 | import org.eclipse.viatra.dse.base.ThreadContext | ||
31 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethod | ||
32 | import org.eclipse.viatra.query.runtime.api.IPatternMatch | ||
33 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification | ||
34 | import java.util.Collection | ||
35 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher | ||
36 | import java.util.SortedMap | ||
37 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation | ||
38 | import org.eclipse.emf.ecore.EObject | ||
39 | import org.eclipse.emf.common.util.EList | ||
28 | 40 | ||
29 | class ViatraReasoner extends LogicReasoner{ | 41 | class ViatraReasoner extends LogicReasoner{ |
30 | val PartialInterpretationInitialiser initialiser = new PartialInterpretationInitialiser() | 42 | val PartialInterpretationInitialiser initialiser = new PartialInterpretationInitialiser() |
@@ -42,6 +54,9 @@ class ViatraReasoner extends LogicReasoner{ | |||
42 | this.inconsistencyDetector = inconsistencyDetector | 54 | this.inconsistencyDetector = inconsistencyDetector |
43 | } | 55 | } |
44 | 56 | ||
57 | public static var Collection<? extends IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> allPatterns = null | ||
58 | //public static var List<SortedMap<String, Integer>> additionalMatches = null | ||
59 | |||
45 | override solve(LogicProblem problem, LogicSolverConfiguration configuration, ReasonerWorkspace workspace) throws LogicReasonerException { | 60 | override solve(LogicProblem problem, LogicSolverConfiguration configuration, ReasonerWorkspace workspace) throws LogicReasonerException { |
46 | val viatraConfig = configuration.asConfig | 61 | val viatraConfig = configuration.asConfig |
47 | val DesignSpaceExplorer dse = new DesignSpaceExplorer(); | 62 | val DesignSpaceExplorer dse = new DesignSpaceExplorer(); |
@@ -71,6 +86,7 @@ class ViatraReasoner extends LogicReasoner{ | |||
71 | viatraConfig.nameNewElements, | 86 | viatraConfig.nameNewElements, |
72 | viatraConfig.typeInferenceMethod | 87 | viatraConfig.typeInferenceMethod |
73 | ) | 88 | ) |
89 | allPatterns = method.allPatterns | ||
74 | 90 | ||
75 | dse.addObjective(new ModelGenerationCompositeObjective( | 91 | dse.addObjective(new ModelGenerationCompositeObjective( |
76 | new ScopeObjective, | 92 | new ScopeObjective, |
@@ -83,7 +99,7 @@ class ViatraReasoner extends LogicReasoner{ | |||
83 | dse.addGlobalConstraint(additionalConstraint.apply(method)) | 99 | dse.addGlobalConstraint(additionalConstraint.apply(method)) |
84 | } | 100 | } |
85 | 101 | ||
86 | dse.setInitialModel(emptySolution) | 102 | dse.setInitialModel(emptySolution,false) |
87 | 103 | ||
88 | var IStateCoderFactory statecoder = if(viatraConfig.stateCoderStrategy == StateCoderStrategy.Neighbourhood) { | 104 | var IStateCoderFactory statecoder = if(viatraConfig.stateCoderStrategy == StateCoderStrategy.Neighbourhood) { |
89 | new NeighbourhoodBasedStateCoderFactory | 105 | new NeighbourhoodBasedStateCoderFactory |
@@ -107,7 +123,8 @@ class ViatraReasoner extends LogicReasoner{ | |||
107 | val strategy = new BestFirstStrategyForModelGeneration( | 123 | val strategy = new BestFirstStrategyForModelGeneration( |
108 | workspace,inconsistencyDetector, | 124 | workspace,inconsistencyDetector, |
109 | viatraConfig.inconsistencDetectorConfiguration, | 125 | viatraConfig.inconsistencDetectorConfiguration, |
110 | viatraConfig.diversityRequirement) | 126 | viatraConfig.diversityRequirement/*, |
127 | method.allPatterns*/) | ||
111 | 128 | ||
112 | val transformationTime = System.nanoTime - transformationStartTime | 129 | val transformationTime = System.nanoTime - transformationStartTime |
113 | val solverStartTime = System.nanoTime | 130 | val solverStartTime = System.nanoTime |
@@ -124,14 +141,15 @@ class ViatraReasoner extends LogicReasoner{ | |||
124 | val solverTime = System.nanoTime - solverStartTime | 141 | val solverTime = System.nanoTime - solverStartTime |
125 | 142 | ||
126 | val statecoderFinal = statecoder | 143 | val statecoderFinal = statecoder |
144 | //additionalMatches = strategy.solutionStoreWithCopy.additionalMatches | ||
127 | val statistics = createStatistics => [ | 145 | val statistics = createStatistics => [ |
128 | //it.solverTime = viatraConfig.runtimeLimit | 146 | //it.solverTime = viatraConfig.runtimeLimit |
129 | it.solverTime = (solverTime/1000000) as int | 147 | it.solverTime = (solverTime/1000000) as int |
130 | it.transformationTime = (transformationTime/1000000) as int | 148 | it.transformationTime = (transformationTime/1000000) as int |
131 | for(x : 0..<strategy.solutionStoreWithCopy.allRuntimes.size) { | 149 | for(x : 0..<strategy.solutionStoreWithCopy.allRuntimes.size) { |
132 | it.entries += createIntStatisticEntry => [ | 150 | it.entries += createIntStatisticEntry => [ |
133 | it.name = '''_Sulution«x»FoundAt''' | 151 | it.name = '''_Solution«x»FoundAt''' |
134 | it.value = strategy.solutionStoreWithCopy.allRuntimes.get(x).intValue | 152 | it.value = (strategy.solutionStoreWithCopy.allRuntimes.get(x)/1000000) as int |
135 | ] | 153 | ] |
136 | } | 154 | } |
137 | it.entries += createIntStatisticEntry => [ | 155 | it.entries += createIntStatisticEntry => [ |
@@ -179,7 +197,7 @@ class ViatraReasoner extends LogicReasoner{ | |||
179 | */ | 197 | */ |
180 | return factory.createModelResult => [ | 198 | return factory.createModelResult => [ |
181 | it.problem = problem | 199 | it.problem = problem |
182 | it.trace = null | 200 | it.trace = strategy.solutionStoreWithCopy.copyTraces |
183 | it.representation += strategy.solutionStoreWithCopy.solutions | 201 | it.representation += strategy.solutionStoreWithCopy.solutions |
184 | it.statistics = statistics | 202 | it.statistics = statistics |
185 | ] | 203 | ] |
@@ -199,11 +217,14 @@ class ViatraReasoner extends LogicReasoner{ | |||
199 | sc.sumStatecoderRuntime | 217 | sc.sumStatecoderRuntime |
200 | } | 218 | } |
201 | 219 | ||
202 | override getInterpretation(ModelResult modelResult) { | 220 | override getInterpretations(ModelResult modelResult) { |
203 | return new PartialModelAsLogicInterpretation | 221 | val indexes = 0..<modelResult.representation.size |
222 | val traces = modelResult.trace as List<Map<EObject, EObject>>; | ||
223 | val res = indexes.map[i | new PartialModelAsLogicInterpretation(modelResult.representation.get(i) as PartialInterpretation,traces.get(i))].toList | ||
224 | return res | ||
204 | } | 225 | } |
205 | 226 | ||
206 | def ViatraReasonerConfiguration asConfig(LogicSolverConfiguration configuration) { | 227 | private def ViatraReasonerConfiguration asConfig(LogicSolverConfiguration configuration) { |
207 | if(configuration instanceof ViatraReasonerConfiguration) { | 228 | if(configuration instanceof ViatraReasonerConfiguration) { |
208 | return configuration | 229 | return configuration |
209 | } else throw new IllegalArgumentException('''Wrong configuration. Expected: «ViatraReasonerConfiguration.name», but got: «configuration.class.name»"''') | 230 | } else throw new IllegalArgumentException('''Wrong configuration. Expected: «ViatraReasonerConfiguration.name», but got: «configuration.class.name»"''') |