From 7b5bc7ef4c842b1f365b53b526e78083bb85a9c3 Mon Sep 17 00:00:00 2001 From: Rebus Farkas Date: Tue, 28 Aug 2018 14:21:57 +0200 Subject: Add patterns to shape --- .../neighbourhood/Descriptor.xtend | 19 +++++--- ...rtherNodeDescriptorWithEquivalenceCounter.xtend | 6 ++- ...nterpretation2NeighbourhoodRepresentation.xtend | 53 +++++++++++++--------- 3 files changed, 48 insertions(+), 30 deletions(-) diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/Descriptor.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/Descriptor.xtend index 2e8f61a9..f9cf2986 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/Descriptor.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/Descriptor.xtend @@ -5,6 +5,7 @@ import java.util.Map import java.util.Set import org.eclipse.xtend.lib.annotations.Data import java.util.List +import java.util.HashSet @Data abstract class AbstractNodeDescriptor { long dataHash @@ -25,10 +26,11 @@ import java.util.List // } } -//TODO: Modify for patterns + @Data class LocalNodeDescriptor extends AbstractNodeDescriptor{ Set types String id; + new(String id, Set types) { super(calcualteDataHash(id,types)) this.types = types @@ -89,8 +91,6 @@ import java.util.List // } } -//TODO: PatternRelation - @Data class PatternRelation { String patternName int param @@ -107,28 +107,31 @@ import java.util.List String type } -//TODO: Modify for hypergraphs @Data class FurtherNodeDescriptor extends AbstractNodeDescriptor{ NodeRep previousRepresentation Map,Integer> incomingEdges Map,Integer> outgoingEdges + Set> patterns new( NodeRep previousRepresentation, Map,Integer> incomingEdges, - Map,Integer> outgoingEdges) + Map,Integer> outgoingEdges, + Set> patterns) { - super(calculateDataHash(previousRepresentation,incomingEdges,outgoingEdges)) + super(calculateDataHash(previousRepresentation,incomingEdges,outgoingEdges,patterns)) this.previousRepresentation = previousRepresentation this.incomingEdges = new HashMap(incomingEdges) this.outgoingEdges = new HashMap(outgoingEdges) + this.patterns=new HashSet(patterns) } static def private int calculateDataHash( NodeRep previousRepresentation, Map,Integer> incomingEdges, - Map,Integer> outgoingEdges) + Map,Integer> outgoingEdges, + Set> patterns) { val int prime = 31; var int result = previousRepresentation.hashCode; @@ -136,6 +139,8 @@ import java.util.List result = prime * result + incomingEdges.hashCode(); if(outgoingEdges !== null) result = prime * result + outgoingEdges.hashCode(); + if (patterns !== null) + result = prime * result + patterns.hashCode(); return result; } diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/FurtherNodeDescriptorWithEquivalenceCounter.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/FurtherNodeDescriptorWithEquivalenceCounter.xtend index 22e890a2..28b936df 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/FurtherNodeDescriptorWithEquivalenceCounter.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/FurtherNodeDescriptorWithEquivalenceCounter.xtend @@ -2,15 +2,17 @@ package hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.ne import java.util.Map import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement +import java.util.Set class FurtherNodeDescriptorWithEquivalenceCounter extends FurtherNodeDescriptor { new(AbstractNodeDescriptor previousRepresentation, Map, Integer> incomingEdges, Map, Integer> outgoingEdges, - Map> node2Representation) + Map> node2Representation, + Set> patterns) { - super(previousRepresentation, incomingEdges, outgoingEdges) + super(previousRepresentation, incomingEdges, outgoingEdges, patterns) } } \ No newline at end of file diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend index 1d26a413..e6bc5706 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend @@ -99,7 +99,7 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation>> createPatternRelations( PartialInterpretation model, Set> relevantPatterns) { val Map>> result=new HashMap; - if (relevantPatterns==null) return result; + if (relevantPatterns===null) return result; for (element : model.elements) { result.put(element,new LinkedList>) } @@ -122,7 +122,7 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation(name,id,sanitizedMatch)) } id++ @@ -132,13 +132,6 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation 0) { val previous = doRecursiveNeighbourCalculation(model, types, IncomingRelations, OutgoingRelations, PatternRelations, range - 1, parallels, maxNumber) - val r = calculateFurtherNodeDescriptors(model, previous, IncomingRelations, OutgoingRelations, + val r = calculateFurtherNodeDescriptors(model, previous, IncomingRelations, OutgoingRelations,PatternRelations, parallels, maxNumber) // println('''Level «range» finished.''') val res = createFurtherRepresentation(r.key, r.value, previous, deepRepresentation) @@ -235,7 +228,7 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation> types, Map>> IncomingRelations, - Map>> OutgoingRelations, int parallels, + Map>> OutgoingRelations, + Map>> PatternRelations, + int parallels, int maxNumbers) { var lastRange = 0 val last = calculateLocalNodeDescriptors(model, types, maxNumbers) @@ -256,7 +251,7 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation createLocalRepresentation( Map node2Representation, @@ -336,7 +331,7 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation createFurtherRepresentation( Map, Integer> nodeDescriptors, @@ -383,6 +378,19 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation>> PatternRelations, + DefinedElement object, + Map previousNodeRepresentations) { + val res = new HashSet>() + + for (patternRelation : PatternRelations.get(object)) { + val matchshape=patternRelation.parameters.map[previousNodeRepresentations.getOrDefault(it,null)] + res.add(new PatternRelation(patternRelation.patternName,patternRelation.param,matchshape)) + } + + return res + } /*def private void addOrCreate_Set(Map> map, KEY key, VALUE value) { * var Set s; @@ -397,7 +405,9 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation previous, Map>> IncomingRelations, - Map>> OutgoingRelations, int parallels, + Map>> OutgoingRelations, + Map>> PatternRelations, + int parallels, int maxNumber) { val previousNodeRepresentations = previous.nodeRepresentations val node2Representation = new HashMap> @@ -419,14 +429,15 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation