public TreePostProcess( GraphBuilder graphBuilder, UndirectedGraph<Node, DefaultLink> tree, Set<LabeledLink> newLinks, boolean findRoot) { this.graphBuilder = graphBuilder; this.tree = (DirectedWeightedMultigraph<Node, DefaultLink>)GraphUtil.asDirectedGraph(tree); buildOutputTree(true); addLinks(newLinks); if (findRoot) { this.root = selectRoot(this.tree); } }
public static Node selectRoot(DirectedWeightedMultigraph<Node, DefaultLink> tree) { List<Node> possibleRoots = findPossibleRoots(tree); if (possibleRoots == null || possibleRoots.isEmpty()) return null; Collections.sort(possibleRoots); return possibleRoots.get(0); }
private DirectedWeightedMultigraph<Node, LabeledLink> computeSteinerTree(Set<Node> steinerNodes) { if (steinerNodes == null || steinerNodes.isEmpty()) { logger.error("There is no steiner node."); return null; } // System.out.println(steinerNodes.size()); List<Node> steinerNodeList = new ArrayList<>(steinerNodes); long start = System.currentTimeMillis(); UndirectedGraph<Node, DefaultLink> undirectedGraph = new AsUndirectedGraph<>(this.graphBuilder.getGraph()); logger.debug("computing steiner tree ..."); SteinerTree steinerTree = new SteinerTree(undirectedGraph, steinerNodeList); DirectedWeightedMultigraph<Node, LabeledLink> tree = new TreePostProcess(this.graphBuilder, steinerTree.getDefaultSteinerTree(), null, false).getTree(); //(DirectedWeightedMultigraph<Node, LabeledLink>)GraphUtil.asDirectedGraph(steinerTree.getDefaultSteinerTree()); logger.debug(GraphUtil.labeledGraphToString(tree)); long steinerTreeElapsedTimeMillis = System.currentTimeMillis() - start; logger.debug("total number of nodes in steiner tree: " + tree.vertexSet().size()); logger.debug("total number of edges in steiner tree: " + tree.edgeSet().size()); logger.debug("time to compute steiner tree: " + (steinerTreeElapsedTimeMillis/1000F)); return tree; // long finalTreeElapsedTimeMillis = System.currentTimeMillis() - steinerTreeElapsedTimeMillis; // DirectedWeightedMultigraph<Node, Link> finalTree = buildOutputTree(tree); // logger.info("time to build final tree: " + (finalTreeElapsedTimeMillis/1000F)); // GraphUtil.printGraph(finalTree); // return finalTree; }
TreePostProcess treePostProcess = new TreePostProcess(this.graphBuilder, tree, getLinksByStatus(LinkStatus.ForcedByUser), true); this.steinerTree = treePostProcess.getTree(); this.root = treePostProcess.getRoot();
private void learnFromKnownSemanticModels() { List<Node> steinerNodes = this.computeSteinerNodes(); if (steinerNodes == null || steinerNodes.isEmpty()) { return; } ModelLearner modelLearner = new ModelLearner(this.graphBuilder, steinerNodes); SemanticModel model = modelLearner.getModel(); if (model == null) { logger.error("could not learn any model for this source!"); if (this.steinerTree == null) { this.steinerTree = new DirectedWeightedMultigraph<>(LabeledLink.class); } this.addForcedNodes(); this.addForcedLinks(); //add new semantic type to the tree // this.removeDeletedLinks(); this.root = TreePostProcess.selectRoot(GraphUtil.asDefaultGraph(this.steinerTree)); return ; } this.updateAlignment(model, null); }
public TreePostProcess( GraphBuilder graphBuilder, UndirectedGraph<Node, DefaultLink> tree) { this.graphBuilder = graphBuilder; this.tree = (DirectedWeightedMultigraph<Node, DefaultLink>)GraphUtil.asDirectedGraph(tree); buildOutputTree(false); }
TreePostProcess treePostProcess = new TreePostProcess(this, tree); return treePostProcess.getTree();
this.addForcedNodes(); this.addForcedLinks(); this.root = TreePostProcess.selectRoot(GraphUtil.asDefaultGraph(tree));
new AsUndirectedGraph<>(this.graphBuilder.getGraph()), Lists.newLinkedList(sn.getNodes())); WeightedMultigraph<Node, DefaultLink> t = steinerTree.getDefaultSteinerTree(); TreePostProcess treePostProcess = new TreePostProcess(this.graphBuilder, t); if (treePostProcess.getTree() != null) topKSteinerTrees.add(treePostProcess.getTree());