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));
}
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));
}
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());
}
}
}
}
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;
}
Aggregations