Search in sources :

Example 1 with Mbfs

use of edu.cmu.tetrad.search.Mbfs in project tetrad by cmu-phil.

the class MbSearchEditor method addSpecialMenus.

protected void addSpecialMenus(JMenuBar menuBar) {
    JMenu test = new JMenu("Independence");
    menuBar.add(test);
    IndTestMenuItems.addIndependenceTestChoices(test, this);
    if (getAlgorithmRunner() instanceof MbfsRunner) {
        JMenu graph = new JMenu("Graph");
        JMenuItem showDags = new JMenuItem("Show DAG's Consistent with forbid_latent_common_causes");
        // JMenuItem meekOrient = new JMenuItem("Meek Orientation");
        JMenuItem gesOrient = new JMenuItem("Global Score-based Reorientation");
        JMenuItem nextGraph = new JMenuItem("Next Graph");
        JMenuItem previousGraph = new JMenuItem("Previous Graph");
        graph.add(new GraphPropertiesAction(getWorkbench()));
        graph.add(new PathsAction(getWorkbench()));
        // graph.add(new DirectedPathsAction(getWorkbench()));
        // graph.add(new TreksAction(getWorkbench()));
        // graph.add(new AllPathsAction(getWorkbench()));
        // graph.add(new NeighborhoodsAction(getWorkbench()));
        graph.addSeparator();
        // graph.add(meekOrient);
        graph.add(gesOrient);
        graph.addSeparator();
        graph.add(previousGraph);
        graph.add(nextGraph);
        graph.addSeparator();
        graph.add(showDags);
        menuBar.add(graph);
        showDags.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                AlgorithmRunner runner = getAlgorithmRunner();
                if (!(runner instanceof MbfsRunner)) {
                    return;
                }
                MbfsRunner mbRunner = (MbfsRunner) runner;
                final Mbfs search = mbRunner.getMbFanSearch();
                if (search == null) {
                    JOptionPane.showMessageDialog(JOptionUtils.centeringComp(), "The search was not stored.");
                    return;
                }
                MbPatternDisplay display = new MbPatternDisplay(search);
                JOptionPane.showMessageDialog(JOptionUtils.centeringComp(), display, "MB DAG's Consistent with forbid_latent_common_causes", JOptionPane.PLAIN_MESSAGE);
            }
        });
        // meekOrient.addActionListener(new ActionListener() {
        // public void actionPerformed(ActionEvent e) {
        // ImpliedOrientation rules = getAlgorithmRunner().getMeekRules();
        // rules.setKnowledge((IKnowledge) getAlgorithmRunner().getParams().get("knowledge", new Knowledge2()));
        // rules.orientImplied(getGraph());
        // getWorkbench().setGraph(getGraph());
        // }
        // });
        gesOrient.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                DataModel dataModel = getAlgorithmRunner().getDataModel();
                final Graph graph = SearchGraphUtils.reorient(getGraph(), dataModel, getKnowledge());
                getGraphHistory().add(graph);
                getWorkbench().setGraph(graph);
                firePropertyChange("modelChanged", null, null);
            }
        });
    }
    // if (getAlgorithmRunner().supportsKnowledge()) {
    // menuBar.add(new Knowledge2Menu(this));
    // }
    menuBar.add(new LayoutMenu(this));
}
Also used : LayoutMenu(edu.cmu.tetradapp.workbench.LayoutMenu) ActionEvent(java.awt.event.ActionEvent) Mbfs(edu.cmu.tetrad.search.Mbfs) Graph(edu.cmu.tetrad.graph.Graph) ActionListener(java.awt.event.ActionListener) DataModel(edu.cmu.tetrad.data.DataModel)

Example 2 with Mbfs

use of edu.cmu.tetrad.search.Mbfs in project tetrad by cmu-phil.

the class TestMbfs method testGenerateDaglist.

/**
 * Tests to make sure the algorithm for generating MB DAGs from an MB Pattern works, at least for one kind of tricky
 * case.
 */
@Test
public void testGenerateDaglist() {
    Graph graph = GraphConverter.convert("T-->X1,T-->X2,X1-->X2,T-->X3,X4-->T");
    IndTestDSep test = new IndTestDSep(graph);
    Mbfs search = new Mbfs(test, -1);
    Graph resultGraph = search.search("T");
    List mbDags = MbUtils.generateMbDags(resultGraph, true, search.getTest(), search.getDepth(), search.getTarget());
    assertTrue(mbDags.size() == 9);
    assertTrue(mbDags.contains(graph));
}
Also used : IndTestDSep(edu.cmu.tetrad.search.IndTestDSep) Mbfs(edu.cmu.tetrad.search.Mbfs) ArrayList(java.util.ArrayList) List(java.util.List) Test(org.junit.Test) IndependenceTest(edu.cmu.tetrad.search.IndependenceTest)

Example 3 with Mbfs

use of edu.cmu.tetrad.search.Mbfs in project tetrad by cmu-phil.

the class TestMbfs method testRandom.

@Test
public void testRandom() {
    RandomUtil.getInstance().setSeed(8388428832L);
    List<Node> nodes1 = new ArrayList<>();
    for (int i = 0; i < 10; i++) {
        nodes1.add(new ContinuousVariable("X" + (i + 1)));
    }
    Dag dag = new Dag(GraphUtils.randomGraph(nodes1, 0, 10, 5, 5, 5, false));
    IndependenceTest test = new IndTestDSep(dag);
    Mbfs search = new Mbfs(test, -1);
    List<Node> nodes = dag.getNodes();
    for (Node node : nodes) {
        Graph resultMb = search.search(node.getName());
        Graph trueMb = GraphUtils.markovBlanketDag(node, dag);
        List<Node> resultNodes = resultMb.getNodes();
        List<Node> trueNodes = trueMb.getNodes();
        Set<String> resultNames = new HashSet<>();
        for (Node resultNode : resultNodes) {
            resultNames.add(resultNode.getName());
        }
        Set<String> trueNames = new HashSet<>();
        for (Node v : trueNodes) {
            trueNames.add(v.getName());
        }
        assertTrue(resultNames.equals(trueNames));
        Set<Edge> resultEdges = resultMb.getEdges();
        for (Edge resultEdge : resultEdges) {
            if (Edges.isDirectedEdge(resultEdge)) {
                String name1 = resultEdge.getNode1().getName();
                String name2 = resultEdge.getNode2().getName();
                Node node1 = trueMb.getNode(name1);
                Node node2 = trueMb.getNode(name2);
                // possibility that the node is actually a child.
                if (node1 == null) {
                    fail("Node " + name1 + " is not in the true graph.");
                }
                if (node2 == null) {
                    fail("Node " + name2 + " is not in the true graph.");
                }
                Edge trueEdge = trueMb.getEdge(node1, node2);
                if (trueEdge == null) {
                    Node resultNode1 = resultMb.getNode(node1.getName());
                    Node resultNode2 = resultMb.getNode(node2.getName());
                    Node resultTarget = resultMb.getNode(node.getName());
                    Edge a = resultMb.getEdge(resultNode1, resultTarget);
                    Edge b = resultMb.getEdge(resultNode2, resultTarget);
                    if (a == null || b == null) {
                        continue;
                    }
                    if ((Edges.isDirectedEdge(a) && Edges.isUndirectedEdge(b)) || (Edges.isUndirectedEdge(a) && Edges.isDirectedEdge(b))) {
                        continue;
                    }
                    fail("EXTRA EDGE: Edge in result MB but not true MB = " + resultEdge);
                }
                assertEquals(resultEdge.getEndpoint1(), trueEdge.getEndpoint1());
                assertEquals(resultEdge.getEndpoint2(), trueEdge.getEndpoint2());
            }
        }
    }
}
Also used : Mbfs(edu.cmu.tetrad.search.Mbfs) ArrayList(java.util.ArrayList) ContinuousVariable(edu.cmu.tetrad.data.ContinuousVariable) IndependenceTest(edu.cmu.tetrad.search.IndependenceTest) IndTestDSep(edu.cmu.tetrad.search.IndTestDSep) HashSet(java.util.HashSet) Test(org.junit.Test) IndependenceTest(edu.cmu.tetrad.search.IndependenceTest)

Example 4 with Mbfs

use of edu.cmu.tetrad.search.Mbfs in project tetrad by cmu-phil.

the class MbFanSearchRunner method execute.

// =================PUBLIC METHODS OVERRIDING ABSTRACT=================//
/**
 * Executes the algorithm, producing (at least) a result workbench. Must be
 * implemented in the extending class.
 */
public void execute() {
    int pcDepth = getParams().getInt("depth", -1);
    Mbfs mbfs = new Mbfs(getIndependenceTest(), pcDepth);
    Parameters params = getParams();
    if (params instanceof Parameters) {
        mbfs.setAggressivelyPreventCycles(params.getBoolean("aggressivelyPreventCycles", false));
    }
    IKnowledge knowledge = (IKnowledge) getParams().get("knowledge", new Knowledge2());
    mbfs.setKnowledge(knowledge);
    String targetName = getParams().getString("targetName", null);
    Graph graph = mbfs.search(targetName);
    setResultGraph(graph);
    if (getSourceGraph() != null) {
        GraphUtils.arrangeBySourceGraph(graph, getSourceGraph());
    } else if (knowledge.isDefaultToKnowledgeLayout()) {
        SearchGraphUtils.arrangeByKnowledgeTiers(graph, knowledge);
    } else {
        GraphUtils.circleLayout(graph, 200, 200, 150);
    }
    this.mbfs = mbfs;
}
Also used : IKnowledge(edu.cmu.tetrad.data.IKnowledge) Parameters(edu.cmu.tetrad.util.Parameters) Graph(edu.cmu.tetrad.graph.Graph) Mbfs(edu.cmu.tetrad.search.Mbfs) Knowledge2(edu.cmu.tetrad.data.Knowledge2)

Aggregations

Mbfs (edu.cmu.tetrad.search.Mbfs)4 Graph (edu.cmu.tetrad.graph.Graph)2 IndTestDSep (edu.cmu.tetrad.search.IndTestDSep)2 IndependenceTest (edu.cmu.tetrad.search.IndependenceTest)2 ArrayList (java.util.ArrayList)2 Test (org.junit.Test)2 ContinuousVariable (edu.cmu.tetrad.data.ContinuousVariable)1 DataModel (edu.cmu.tetrad.data.DataModel)1 IKnowledge (edu.cmu.tetrad.data.IKnowledge)1 Knowledge2 (edu.cmu.tetrad.data.Knowledge2)1 Parameters (edu.cmu.tetrad.util.Parameters)1 LayoutMenu (edu.cmu.tetradapp.workbench.LayoutMenu)1 ActionEvent (java.awt.event.ActionEvent)1 ActionListener (java.awt.event.ActionListener)1 HashSet (java.util.HashSet)1 List (java.util.List)1