Class SvarFciOrient
This class is based off a copy of FCI.java taken from the repository on 2008/12/16, revision 7306. The extension is done by extending doFinalOrientation() with methods for Zhang's rules R5-R10 which implements the augmented search. (By a remark of Zhang's, the rule applications can be staged in this way.)
- Author:
- Erin Korber, June 2004, Alex Smith, December 2008, Joseph Ramsey, Choh-Man Teng, Daniel Malinsky
This is a copy of FciOrient.java for the SvarFCI algorithm. The main difference is that if an edge is orient, it will also orient all homologous edges to preserve the time-repeating structure assumed by SvarFCI. Based on (but not identicial to) code by Entner and Hoyer for their 2010 paper. Modified by DMalinsky 4/20/2016.
-
Constructor Summary
ConstructorsConstructorDescriptionSvarFciOrient(SepsetProducer sepsets, IndependenceTest independenceTest) Constructs a new FCI search for the given independence test and background knowledge. -
Method Summary
Modifier and TypeMethodDescriptionvoida method to search "back from a" to find a DDP.voiddoFinalOrientation(Graph graph) Orients the graph according to rules in the graph (FCI step D).The background knowledge.intgetNameNoLag(Object obj) The true PAG if available.booleanchange flag for repeat rulesbooleanbooleanbooleanTrue iff verbose output should be printed.voidOrients colliders in the graph.voidImplements the double-triangle orientation rule, which states that if D*-oB, A*->B<-*C and A*-oDo-*C, then D*->B.voidThe triangles that must be oriented this way (won't be done by another rule) all look like the ones below, where the dots are a collider path from L to A with each node on the path (except L) a parent of C.voidImplements Zhang's rule R5, orient circle undirectedPaths: for any Ao-oB, if there is an uncovered circle path u = [A,C,...,D,B] such that A,D nonadjacent and B,C nonadjacent, then A---B and orient every edge on u undirected.voidImplements Zhang's rules R6 and R7, applies them over the graph once.voidrulesR1R2cycle(Graph graph) voidrulesR8R9R10(Graph graph) Implements Zhang's rules R8, R9, R10, applies them over the graph once.voidsetChangeFlag(boolean changeFlag) voidsetCompleteRuleSetUsed(boolean completeRuleSetUsed) voidsetKnowledge(Knowledge knowledge) voidsetMaxPathLength(int maxPathLength) voidsetPossibleDsepSearchDone(boolean possibleDsepSearchDone) voidsetTruePag(Graph truePag) voidsetVerbose(boolean verbose)
-
Constructor Details
-
SvarFciOrient
Constructs a new FCI search for the given independence test and background knowledge.
-
-
Method Details
-
orient
-
getSepsets
-
getKnowledge
The background knowledge. -
setKnowledge
-
isCompleteRuleSetUsed
public boolean isCompleteRuleSetUsed()- Returns:
- true if Zhang's complete rule set should be used, false if only R1-R4 (the rule set of the original FCI) should be used. False by default.
-
setCompleteRuleSetUsed
public void setCompleteRuleSetUsed(boolean completeRuleSetUsed) - Parameters:
completeRuleSetUsed- set to true if Zhang's complete rule set should be used, false if only R1-R4 (the rule set of the original FCI) should be used. False by default.
-
ruleR0
Orients colliders in the graph. (FCI Step C)Zhang's step F3, rule R0.
-
doFinalOrientation
Orients the graph according to rules in the graph (FCI step D).Zhang's step F4, rules R1-R10.
-
rulesR1R2cycle
-
ruleR3
Implements the double-triangle orientation rule, which states that if D*-oB, A*->B<-*C and A*-oDo-*C, then D*->B.This is Zhang's rule R3.
-
ruleR4B
The triangles that must be oriented this way (won't be done by another rule) all look like the ones below, where the dots are a collider path from L to A with each node on the path (except L) a parent of C.B xo x is either an arrowhead or a circle / \ v v L....A --> CThis is Zhang's rule R4, discriminating undirectedPaths.
-
ddpOrient
a method to search "back from a" to find a DDP. It is called with a reachability list (first consisting only of a). This is breadth-first, utilizing "reachability" concept from Geiger, Verma, and Pearl 1990. The body of a DDP consists of colliders that are parents of c. -
ruleR5
Implements Zhang's rule R5, orient circle undirectedPaths: for any Ao-oB, if there is an uncovered circle path u = [A,C,...,D,B] such that A,D nonadjacent and B,C nonadjacent, then A---B and orient every edge on u undirected. -
ruleR6R7
Implements Zhang's rules R6 and R7, applies them over the graph once. Orient single tails. R6: If A---Bo-*C then A---B--*C. R7: If A--oBo-*C and A,C nonadjacent, then A--oB--*C -
rulesR8R9R10
Implements Zhang's rules R8, R9, R10, applies them over the graph once. Orient arrow tails. I.e., tries R8, R9, and R10 in that sequence on each Ao->C in the graph. -
isPossibleDsepSearchDone
public boolean isPossibleDsepSearchDone() -
setPossibleDsepSearchDone
public void setPossibleDsepSearchDone(boolean possibleDsepSearchDone) -
getMaxPathLength
public int getMaxPathLength()- Returns:
- the maximum length of any discriminating path, or -1 of unlimited.
-
setMaxPathLength
public void setMaxPathLength(int maxPathLength) - Parameters:
maxPathLength- the maximum length of any discriminating path, or -1 if unlimited.
-
isVerbose
public boolean isVerbose()True iff verbose output should be printed. -
setVerbose
public void setVerbose(boolean verbose) -
setTruePag
-
getTruePag
The true PAG if available. Can be null. -
setChangeFlag
public void setChangeFlag(boolean changeFlag) -
isChangeFlag
public boolean isChangeFlag()change flag for repeat rules -
getNameNoLag
-