From 7021a4d1f2805ebf3145cbc3893761d12f23361f Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Thu, 1 Aug 2019 01:00:12 +0200 Subject: Configurability and better statistics for measurements --- .../cardinality/PolyhedronScopePropagator.xtend | 33 ++++++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/PolyhedronScopePropagator.xtend') diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/PolyhedronScopePropagator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/PolyhedronScopePropagator.xtend index f6b101b6..e7e40ab0 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/PolyhedronScopePropagator.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/PolyhedronScopePropagator.xtend @@ -2,9 +2,12 @@ package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality import com.google.common.collect.ImmutableList import com.google.common.collect.ImmutableMap +import com.google.common.collect.ImmutableSet import com.google.common.collect.Maps import com.google.common.collect.Sets +import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Relation import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type +import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationStatistics import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.UnifinishedMultiplicityQueries import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialComplexTypeInterpretation import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation @@ -30,13 +33,14 @@ class PolyhedronScopePropagator extends ScopePropagator { val LinearBoundedExpression topLevelBounds val Polyhedron polyhedron val PolyhedronSaturationOperator operator + val Set relevantRelations List updaters = emptyList - new(PartialInterpretation p, Set possibleNewDynamicTypes, + new(PartialInterpretation p, ModelGenerationStatistics statistics, Set possibleNewDynamicTypes, Map unfinishedMultiplicityQueries, IQuerySpecification> hasElementInContainmentQuery, PolyhedronSolver solver, boolean propagateRelations) { - super(p) + super(p, statistics) val builder = new PolyhedronBuilder(p) builder.buildPolyhedron(possibleNewDynamicTypes) scopeBounds = builder.scopeBounds @@ -54,11 +58,14 @@ class PolyhedronScopePropagator extends ScopePropagator { } builder.buildMultiplicityConstraints(unfinishedMultiplicityQueries, hasElementInContainmentQuery, maximumNumberOfNewNodes) + relevantRelations = builder.relevantRelations updaters = builder.updaters + } else { + relevantRelations = emptySet } } - override void propagateAllScopeConstraints() { + override void doPropagateAllScopeConstraints() { resetBounds() populatePolyhedronFromScope() // println(polyhedron) @@ -73,6 +80,13 @@ class PolyhedronScopePropagator extends ScopePropagator { } } } + + override propagateAdditionToRelation(Relation r) { + super.propagateAdditionToRelation(r) + if (relevantRelations.contains(r)) { + propagateAllScopeConstraints() + } + } def resetBounds() { for (dimension : polyhedron.dimensions) { @@ -188,6 +202,7 @@ class PolyhedronScopePropagator extends ScopePropagator { Map scopeBounds LinearBoundedExpression topLevelBounds Polyhedron polyhedron + Set relevantRelations List updaters def buildPolyhedron(Set possibleNewDynamicTypes) { @@ -222,9 +237,21 @@ class PolyhedronScopePropagator extends ScopePropagator { buildNonContainmentConstraints(constraint, pair.value) } } + buildRelevantRelations(constraints.keySet) updaters = updatersBuilder.build addCachedConstraintsToPolyhedron() } + + private def buildRelevantRelations(Set constraints) { + val builder = ImmutableSet.builder + for (constraint : constraints) { + builder.add(constraint.relation) + if (constraint.inverseRelation !== null) { + builder.add(constraint.inverseRelation) + } + } + relevantRelations = builder.build + } private def addCachedConstraintsToPolyhedron() { val constraints = new HashSet -- cgit v1.2.3-70-g09d2