diff options
author | Kristóf Marussy <kris7topher@gmail.com> | 2019-07-24 10:59:02 +0200 |
---|---|---|
committer | Kristóf Marussy <kris7topher@gmail.com> | 2019-07-24 10:59:02 +0200 |
commit | 64138e8d91bc8d7bb54d9b042f872b43550dec16 (patch) | |
tree | 73c9574a26b83eac91cd0bdb18f2c61b6b212871 /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend | |
parent | Implement Coin-OR CBC polyhedron saturation operator (diff) | |
download | VIATRA-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.xtend | 12 |
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 | |||
5 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem | 5 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem |
6 | 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.cardinality.CbcPolyhedronSolver | 7 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.CbcPolyhedronSolver |
8 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.MultiplicityGoalConstraintCalculator | ||
8 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.PolyhedronScopePropagator | 9 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.PolyhedronScopePropagator |
10 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.RelationConstraintCalculator | ||
9 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagator | 11 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagator |
10 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagatorStrategy | 12 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagatorStrategy |
11 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.GeneratedPatterns | 13 | import 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) |