diff options
author | Kristóf Marussy <kris7topher@gmail.com> | 2019-04-08 00:58:00 +0200 |
---|---|---|
committer | Kristóf Marussy <kris7topher@gmail.com> | 2019-04-08 00:58:00 +0200 |
commit | c1f185fd8fc2c3dfc123d9271726c588963c7c01 (patch) | |
tree | 88a5bb94017e7d3f0fbce0a51a78c2549b0977bd /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra | |
parent | Infrastructure for objective functions (diff) | |
download | VIATRA-Generator-c1f185fd8fc2c3dfc123d9271726c588963c7c01.tar.gz VIATRA-Generator-c1f185fd8fc2c3dfc123d9271726c588963c7c01.tar.zst VIATRA-Generator-c1f185fd8fc2c3dfc123d9271726c588963c7c01.zip |
Objective POC implementation
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra')
2 files changed, 53 insertions, 36 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend index f43ab96d..b6918294 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend | |||
@@ -1,8 +1,10 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra | 1 | package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra |
2 | 2 | ||
3 | import com.google.common.collect.ImmutableMap | ||
3 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel | 4 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel |
4 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem | 5 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem |
5 | import hu.bme.mit.inf.dslreasoner.viatra2logic.viatra2logicannotations.TransfomedViatraQuery | 6 | import hu.bme.mit.inf.dslreasoner.viatra2logic.viatra2logicannotations.TransfomedViatraQuery |
7 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.ModalPatternQueries | ||
6 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider | 8 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider |
7 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.rules.GoalConstraintProvider | 9 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.rules.GoalConstraintProvider |
8 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.rules.RefinementRuleProvider | 10 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.rules.RefinementRuleProvider |
@@ -10,6 +12,7 @@ import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.par | |||
10 | import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace | 12 | import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace |
11 | import java.util.Collection | 13 | import java.util.Collection |
12 | import java.util.List | 14 | import java.util.List |
15 | import java.util.Map | ||
13 | import java.util.Set | 16 | import java.util.Set |
14 | import org.eclipse.viatra.query.runtime.api.IPatternMatch | 17 | import org.eclipse.viatra.query.runtime.api.IPatternMatch |
15 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification | 18 | import org.eclipse.viatra.query.runtime.api.IQuerySpecification |
@@ -20,34 +23,41 @@ import org.eclipse.xtend.lib.annotations.Data | |||
20 | 23 | ||
21 | class ModelGenerationStatistics { | 24 | class ModelGenerationStatistics { |
22 | public var long transformationExecutionTime = 0 | 25 | public var long transformationExecutionTime = 0 |
26 | |||
23 | synchronized def addExecutionTime(long amount) { | 27 | synchronized def addExecutionTime(long amount) { |
24 | transformationExecutionTime+=amount | 28 | transformationExecutionTime += amount |
25 | } | 29 | } |
30 | |||
26 | public var long PreliminaryTypeAnalisisTime = 0 | 31 | public var long PreliminaryTypeAnalisisTime = 0 |
27 | } | 32 | } |
33 | |||
28 | @Data class ModelGenerationMethod { | 34 | @Data class ModelGenerationMethod { |
29 | ModelGenerationStatistics statistics | 35 | ModelGenerationStatistics statistics |
30 | 36 | ||
31 | Collection<? extends BatchTransformationRule<?,?>> objectRefinementRules | 37 | Collection<? extends BatchTransformationRule<?, ?>> objectRefinementRules |
32 | Collection<? extends BatchTransformationRule<?,?>> relationRefinementRules | 38 | Collection<? extends BatchTransformationRule<?, ?>> relationRefinementRules |
33 | 39 | ||
34 | List<MultiplicityGoalConstraintCalculator> unfinishedMultiplicities | 40 | List<MultiplicityGoalConstraintCalculator> unfinishedMultiplicities |
35 | Collection<? extends IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> unfinishedWF | 41 | Collection<? extends IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> unfinishedWF |
36 | 42 | ||
37 | Collection<? extends IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> invalidWF | 43 | Collection<? extends IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> invalidWF |
38 | 44 | ||
39 | Collection<? extends IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> allPatterns | 45 | Map<String, ModalPatternQueries> modalRelationQueries |
46 | |||
47 | Collection<? extends IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> allPatterns | ||
40 | } | 48 | } |
49 | |||
41 | enum TypeInferenceMethod { | 50 | enum TypeInferenceMethod { |
42 | Generic, PreliminaryAnalysis | 51 | Generic, |
52 | PreliminaryAnalysis | ||
43 | } | 53 | } |
44 | 54 | ||
45 | class ModelGenerationMethodProvider { | 55 | class ModelGenerationMethodProvider { |
46 | private val PatternProvider patternProvider = new PatternProvider | 56 | val PatternProvider patternProvider = new PatternProvider |
47 | private val RefinementRuleProvider refinementRuleProvider = new RefinementRuleProvider | 57 | val RefinementRuleProvider refinementRuleProvider = new RefinementRuleProvider |
48 | private val GoalConstraintProvider goalConstraintProvider = new GoalConstraintProvider | 58 | val GoalConstraintProvider goalConstraintProvider = new GoalConstraintProvider |
49 | 59 | ||
50 | public def ModelGenerationMethod createModelGenerationMethod( | 60 | def ModelGenerationMethod createModelGenerationMethod( |
51 | LogicProblem logicProblem, | 61 | LogicProblem logicProblem, |
52 | PartialInterpretation emptySolution, | 62 | PartialInterpretation emptySolution, |
53 | ReasonerWorkspace workspace, | 63 | ReasonerWorkspace workspace, |
@@ -58,25 +68,31 @@ class ModelGenerationMethodProvider { | |||
58 | ) { | 68 | ) { |
59 | val statistics = new ModelGenerationStatistics | 69 | val statistics = new ModelGenerationStatistics |
60 | val writeFiles = (debugLevel === DocumentationLevel.NORMAL || debugLevel === DocumentationLevel.FULL) | 70 | val writeFiles = (debugLevel === DocumentationLevel.NORMAL || debugLevel === DocumentationLevel.FULL) |
61 | 71 | ||
62 | val Set<PQuery> existingQueries = logicProblem | 72 | val Set<PQuery> existingQueries = logicProblem.relations.map[annotations].flatten.filter(TransfomedViatraQuery). |
63 | .relations | 73 | map[it.patternPQuery as PQuery].toSet |
64 | .map[annotations] | 74 | |
65 | .flatten | 75 | val queries = patternProvider.generateQueries(logicProblem, emptySolution, statistics, existingQueries, |
66 | .filter(TransfomedViatraQuery) | 76 | workspace, typeInferenceMethod, writeFiles) |
67 | .map[it.patternPQuery as PQuery] | 77 | val // LinkedHashMap<Pair<Relation, ? extends Type>, BatchTransformationRule<GenericPatternMatch, ViatraQueryMatcher<GenericPatternMatch>>> |
68 | .toSet | 78 | objectRefinementRules = refinementRuleProvider.createObjectRefinementRules(queries, scopePropagator, |
69 | 79 | nameNewElements, statistics) | |
70 | val queries = patternProvider.generateQueries(logicProblem,emptySolution,statistics,existingQueries,workspace,typeInferenceMethod,writeFiles) | 80 | val relationRefinementRules = refinementRuleProvider.createRelationRefinementRules(queries, statistics) |
71 | val //LinkedHashMap<Pair<Relation, ? extends Type>, BatchTransformationRule<GenericPatternMatch, ViatraQueryMatcher<GenericPatternMatch>>> | 81 | |
72 | objectRefinementRules = refinementRuleProvider.createObjectRefinementRules(queries,scopePropagator,nameNewElements,statistics) | ||
73 | val relationRefinementRules = refinementRuleProvider.createRelationRefinementRules(queries,statistics) | ||
74 | |||
75 | val unfinishedMultiplicities = goalConstraintProvider.getUnfinishedMultiplicityQueries(queries) | 82 | val unfinishedMultiplicities = goalConstraintProvider.getUnfinishedMultiplicityQueries(queries) |
76 | val unfinishedWF = queries.getUnfinishedWFQueries.values | 83 | val unfinishedWF = queries.getUnfinishedWFQueries.values |
77 | 84 | ||
85 | val modalRelationQueriesBuilder = ImmutableMap.builder | ||
86 | for (entry : queries.modalRelationQueries.entrySet) { | ||
87 | val annotation = entry.key.annotations.filter(TransfomedViatraQuery).head | ||
88 | if (annotation !== null) { | ||
89 | modalRelationQueriesBuilder.put(annotation.patternFullyQualifiedName, entry.value) | ||
90 | } | ||
91 | } | ||
92 | val modalRelationQueries = modalRelationQueriesBuilder.build | ||
93 | |||
78 | val invalidWF = queries.getInvalidWFQueries.values | 94 | val invalidWF = queries.getInvalidWFQueries.values |
79 | 95 | ||
80 | return new ModelGenerationMethod( | 96 | return new ModelGenerationMethod( |
81 | statistics, | 97 | statistics, |
82 | objectRefinementRules.values, | 98 | objectRefinementRules.values, |
@@ -84,6 +100,7 @@ class ModelGenerationMethodProvider { | |||
84 | unfinishedMultiplicities, | 100 | unfinishedMultiplicities, |
85 | unfinishedWF, | 101 | unfinishedWF, |
86 | invalidWF, | 102 | invalidWF, |
103 | modalRelationQueries, | ||
87 | queries.allQueries | 104 | queries.allQueries |
88 | ) | 105 | ) |
89 | } | 106 | } |
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend index a2b11632..c9e64a9d 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend | |||
@@ -55,7 +55,7 @@ class PatternGenerator { | |||
55 | typeIndexer.requiresTypeAnalysis || typeRefinementGenerator.requiresTypeAnalysis | 55 | typeIndexer.requiresTypeAnalysis || typeRefinementGenerator.requiresTypeAnalysis |
56 | } | 56 | } |
57 | 57 | ||
58 | public dispatch def referRelation( | 58 | public dispatch def CharSequence referRelation( |
59 | RelationDeclaration referred, | 59 | RelationDeclaration referred, |
60 | String sourceVariable, | 60 | String sourceVariable, |
61 | String targetVariable, | 61 | String targetVariable, |
@@ -64,7 +64,7 @@ class PatternGenerator { | |||
64 | { | 64 | { |
65 | return this.relationDeclarationIndexer.referRelation(referred,sourceVariable,targetVariable,modality) | 65 | return this.relationDeclarationIndexer.referRelation(referred,sourceVariable,targetVariable,modality) |
66 | } | 66 | } |
67 | public dispatch def referRelation( | 67 | public dispatch def CharSequence referRelation( |
68 | RelationDefinition referred, | 68 | RelationDefinition referred, |
69 | String sourceVariable, | 69 | String sourceVariable, |
70 | String targetVariable, | 70 | String targetVariable, |