aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kris7topher@gmail.com>2019-07-24 10:59:02 +0200
committerLibravatar Kristóf Marussy <kris7topher@gmail.com>2019-07-24 10:59:02 +0200
commit64138e8d91bc8d7bb54d9b042f872b43550dec16 (patch)
tree73c9574a26b83eac91cd0bdb18f2c61b6b212871 /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend
parentImplement Coin-OR CBC polyhedron saturation operator (diff)
downloadVIATRA-Generator-64138e8d91bc8d7bb54d9b042f872b43550dec16.tar.gz
VIATRA-Generator-64138e8d91bc8d7bb54d9b042f872b43550dec16.tar.zst
VIATRA-Generator-64138e8d91bc8d7bb54d9b042f872b43550dec16.zip
Cardinality propagator WIP
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend12
1 files changed, 9 insertions, 3 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 0ceb5b2e..3a99d3bf 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
@@ -5,7 +5,9 @@ import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel
5import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem 5import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem
6import hu.bme.mit.inf.dslreasoner.viatra2logic.viatra2logicannotations.TransfomedViatraQuery 6import hu.bme.mit.inf.dslreasoner.viatra2logic.viatra2logicannotations.TransfomedViatraQuery
7import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.CbcPolyhedronSolver 7import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.CbcPolyhedronSolver
8import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.MultiplicityGoalConstraintCalculator
8import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.PolyhedronScopePropagator 9import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.PolyhedronScopePropagator
10import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.RelationConstraintCalculator
9import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagator 11import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagator
10import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagatorStrategy 12import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagatorStrategy
11import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.GeneratedPatterns 13import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.GeneratedPatterns
@@ -61,6 +63,7 @@ class ModelGenerationMethodProvider {
61 val PatternProvider patternProvider = new PatternProvider 63 val PatternProvider patternProvider = new PatternProvider
62 val RefinementRuleProvider refinementRuleProvider = new RefinementRuleProvider 64 val RefinementRuleProvider refinementRuleProvider = new RefinementRuleProvider
63 val GoalConstraintProvider goalConstraintProvider = new GoalConstraintProvider 65 val GoalConstraintProvider goalConstraintProvider = new GoalConstraintProvider
66 val relationConstraintCalculator = new RelationConstraintCalculator
64 67
65 def ModelGenerationMethod createModelGenerationMethod( 68 def ModelGenerationMethod createModelGenerationMethod(
66 LogicProblem logicProblem, 69 LogicProblem logicProblem,
@@ -77,8 +80,9 @@ class ModelGenerationMethodProvider {
77 val Set<PQuery> existingQueries = logicProblem.relations.map[annotations].flatten.filter(TransfomedViatraQuery). 80 val Set<PQuery> existingQueries = logicProblem.relations.map[annotations].flatten.filter(TransfomedViatraQuery).
78 map[it.patternPQuery as PQuery].toSet 81 map[it.patternPQuery as PQuery].toSet
79 82
83 val relationConstraints = relationConstraintCalculator.calculateRelationConstraints(logicProblem)
80 val queries = patternProvider.generateQueries(logicProblem, emptySolution, statistics, existingQueries, 84 val queries = patternProvider.generateQueries(logicProblem, emptySolution, statistics, existingQueries,
81 workspace, typeInferenceMethod, writeFiles) 85 workspace, typeInferenceMethod, scopePropagatorStrategy, relationConstraints, writeFiles)
82 val scopePropagator = createScopePropagator(scopePropagatorStrategy, emptySolution, queries) 86 val scopePropagator = createScopePropagator(scopePropagatorStrategy, emptySolution, queries)
83 scopePropagator.propagateAllScopeConstraints 87 scopePropagator.propagateAllScopeConstraints
84 val // LinkedHashMap<Pair<Relation, ? extends Type>, BatchTransformationRule<GenericPatternMatch, ViatraQueryMatcher<GenericPatternMatch>>> 88 val // LinkedHashMap<Pair<Relation, ? extends Type>, BatchTransformationRule<GenericPatternMatch, ViatraQueryMatcher<GenericPatternMatch>>>
@@ -117,10 +121,12 @@ class ModelGenerationMethodProvider {
117 switch (scopePropagatorStrategy) { 121 switch (scopePropagatorStrategy) {
118 case BasicTypeHierarchy: 122 case BasicTypeHierarchy:
119 new ScopePropagator(emptySolution) 123 new ScopePropagator(emptySolution)
120 case PolyhedralTypeHierarchy: { 124 case PolyhedralTypeHierarchy,
125 case PolyhedralRelations: {
121 val types = queries.refineObjectQueries.keySet.map[newType].toSet 126 val types = queries.refineObjectQueries.keySet.map[newType].toSet
122 val solver = new CbcPolyhedronSolver 127 val solver = new CbcPolyhedronSolver
123 new PolyhedronScopePropagator(emptySolution, types, solver) 128 new PolyhedronScopePropagator(emptySolution, types, queries.multiplicityConstraintQueries, solver,
129 scopePropagatorStrategy.requiresUpperBoundIndexing)
124 } 130 }
125 default: 131 default:
126 throw new IllegalArgumentException("Unknown scope propagator strategy: " + scopePropagatorStrategy) 132 throw new IllegalArgumentException("Unknown scope propagator strategy: " + scopePropagatorStrategy)