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:
authorLibravatar OszkarSemerath <oszka@152.66.252.189>2017-07-05 16:31:32 +0200
committerLibravatar OszkarSemerath <oszka@152.66.252.189>2017-07-05 16:31:32 +0200
commitadce403870ea34f79cf2c59b88cdb5b2dcb438a8 (patch)
tree64a4aeedb53d642c1a60c498be26213b41547497 /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend
parentAdding multiple model generation support for the alloy solver. (diff)
downloadVIATRA-Generator-adce403870ea34f79cf2c59b88cdb5b2dcb438a8.tar.gz
VIATRA-Generator-adce403870ea34f79cf2c59b88cdb5b2dcb438a8.tar.zst
VIATRA-Generator-adce403870ea34f79cf2c59b88cdb5b2dcb438a8.zip
Support for generationg multiple difference models by VIATRA-Solver
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.xtend37
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
25import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel 25import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel
26import org.eclipse.viatra.dse.solutionstore.SolutionStore 26import org.eclipse.viatra.dse.solutionstore.SolutionStore
27import org.eclipse.viatra.dse.statecode.IStateCoderFactory 27import org.eclipse.viatra.dse.statecode.IStateCoderFactory
28import java.util.List
29import java.util.Map
30import org.eclipse.viatra.dse.base.ThreadContext
31import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethod
32import org.eclipse.viatra.query.runtime.api.IPatternMatch
33import org.eclipse.viatra.query.runtime.api.IQuerySpecification
34import java.util.Collection
35import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher
36import java.util.SortedMap
37import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
38import org.eclipse.emf.ecore.EObject
39import org.eclipse.emf.common.util.EList
28 40
29class ViatraReasoner extends LogicReasoner{ 41class 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»"''')