Model for Decision in PGM
- class pyAgrum.InfluenceDiagram(*args)
InfluenceDiagram represents an Influence Diagram.
- InfluenceDiagram() -> InfluenceDiagram
default constructor
- InfluenceDiagram(source) -> InfluenceDiagram
- Parameters:
source (pyAgrum.InfluenceDiagram) – the InfluenceDiagram to copy
- add(*args)
Add a variable, it’s associate node and it’s CPT.
The id of the new variable is automatically generated.
- Parameters:
variable (pyAgrum.DiscreteVariable) – The variable added by copy that will be a chance node.
descr (str) – the descr of the variable following fast syntax extended for
pyAgrum.fastID()
.nbr_mod_or_id (int) – if the first argument is variable, this set an optional fixed id for the node. If the first argument is descr, this gives the default number of modalities for the variable. Note that if a utility node is described in descr, this value is overriden by 1.
- Returns:
the id of the added variable.
- Return type:
int
- Raises:
pyAgrum.DuplicateElement – If already used id or name.
- addArc(*args)
Add an arc in the ID, and update diagram’s potential nodes cpt if necessary.
- Parameters:
tail (Union[int,str]) – a variable’s id (int) or name
head (Union[int,str]) – a variable’s id (int) or name
- Raises:
pyAgrum.InvalidEdge – If arc.tail and/or arc.head are not in the ID.
pyAgrum.InvalidEdge – If tail is a utility node
- Return type:
None
- addArcs(listArcs)
add a list of arcs in te model.
- Parameters:
listArcs (List[Tuple[int,int]]) – the list of arcs
- addChanceNode(*args)
Add a chance variable, it’s associate node and it’s CPT.
The id of the new variable is automatically generated.
- Parameters:
variable (pyAgrum.DiscreteVariable) – the variable added by copy.
id (int) – the chosen id. If 0, the NodeGraphPart will choose.
Warning
give an id (not 0) should be reserved for rare and specific situations !!!
- Returns:
the id of the added variable.
- Return type:
int
- Raises:
pyAgrum.DuplicateElement – If id(<>0) is already used
- addDecisionNode(*args)
Add a decision variable.
The id of the new variable is automatically generated.
- Parameters:
variable (pyAgrum.DiscreteVariable) – the variable added by copy.
id (int) – the chosen id. If 0, the NodeGraphPart will choose.
Warning
give an id (not 0) should be reserved for rare and specific situations !!!
- Returns:
the id of the added variable.
- Return type:
int
- Raises:
pyAgrum.DuplicateElement – If id(<>0) is already used
- addStructureListener(whenNodeAdded=None, whenNodeDeleted=None, whenArcAdded=None, whenArcDeleted=None)
Add the listeners in parameters to the list of existing ones.
- Parameters:
whenNodeAdded (lambda expression) – a function for when a node is added
whenNodeDeleted (lambda expression) – a function for when a node is removed
whenArcAdded (lambda expression) – a function for when an arc is added
whenArcDeleted (lambda expression) – a function for when an arc is removed
- addUtilityNode(*args)
Add a utility variable, it’s associate node and it’s UT.
The id of the new variable is automatically generated.
- Parameters:
variable (pyAgrum.DiscreteVariable) – the variable added by copy
id (int) – the chosen id. If 0, the NodeGraphPart will choose
Warning
give an id (not 0) should be reserved for rare and specific situations !!!
- Returns:
the id of the added variable.
- Return type:
int
- Raises:
pyAgrum.InvalidArgument – If variable has more than one label
pyAgrum.DuplicateElement – If id(<>0) is already used
- addVariables(listFastVariables, default_nbr_mod=2)
Add a list of variable in the form of ‘fast’ syntax.
- Parameters:
listFastVariables (List[str]) – the list of variables following fast syntax extended for
pyAgrum.fastID()
.default_nbr_mod (int) – the number of modalities for the variable if not specified in the fast description. Note that default_nbr_mod=1 is mandatory to create variables with only one modality (for utility for instance).
- Returns:
the list of created ids.
- Return type:
List[int]
- adjacencyMatrix()
adjacency matrix from a graph/graphical models
Compute the adjacency matrix of a pyAgrum’s graph or graphical models (more generally an object that has nodes, children/parents or neighbours methods)
- Returns:
adjacency matrix (as numpy.ndarray) with nodeId as key.
- Return type:
numpy.ndarray
- ancestors(norid)
give the set of nodeid of ancestors of a node
- Parameters:
norid (str|int) – the name or the id of the node
- Returns:
the set of ids of the ancestors of node norid.
- Return type:
Set[int]
- arcs()
- Returns:
the list of all the arcs in the Influence Diagram.
- Return type:
list
- beginTopologyTransformation()
- Return type:
None
- chanceNodeSize()
- Returns:
the number of chance nodes.
- Return type:
int
- changeVariableName(*args)
- Parameters:
var (Union[int,str]) – a variable’s id (int) or name
new_name (str) – the name of the variable
- Raises:
pyAgrum.DuplicateLabel – If this name already exists
pyAgrum.NotFound – If no nodes matches id.
- Return type:
None
- children(norid)
- Parameters:
var (Union[int,str]) – a variable’s id (int) or name
norid (
object
)
- Returns:
the set of all the children
- Return type:
Set
- clear()
- Return type:
None
- completeInstantiation()
Give an instantiation over all the variables of the model
- Returns:
a complete Instantiation for the model
- Return type:
- connectedComponents()
connected components from a graph/graphical models
Compute the connected components of a pyAgrum’s graph or graphical models (more generally an object that has nodes, children/parents or neighbours methods)
The firstly visited node for each component is called a ‘root’ and is used as a key for the component. This root has been arbitrarily chosen during the algorithm.
- Returns:
dict of connected components (as set of nodeIds (int)) with a nodeId (root) of each component as key.
- Return type:
dict(int,Set[int])
- cpt(*args)
Returns the CPT of a variable.
- Parameters:
var (Union[int,str]) – a variable’s id (int) or name
- Returns:
The variable’s CPT.
- Return type:
- Raises:
pyAgrum.NotFound – If no variable’s id matches varId.
- dag()
- Returns:
a constant reference to the dag of this BayesNet.
- Return type:
- decisionNodeSize()
- Returns:
the number of decision nodes
- Return type:
int
- decisionOrder()
- Return type:
List
[int
]
- decisionOrderExists()
- Returns:
True if a directed path exist with all decision node
- Return type:
bool
- descendants(norid)
give the set of nodeid of descendants of a node
- Parameters:
norid (str|int) – the name or the id of the node
- Returns:
the set of ids of the descendants of node norid.
- Return type:
Set[int]
- empty()
Check if there are some variables in the model.
- Returns:
True if there is no variable in the model.
- Return type:
bool
- endTopologyTransformation()
- Return type:
None
- erase(*args)
Erase a Variable from the network and remove the variable from all his childs.
If no variable matches the id, then nothing is done.
- Parameters:
id (int) – The id of the variable to erase.
var (Union[int,str,pyAgrum.DiscreteVariable]) – a variable’s id (int) or name or th reference on the variable to remove.
- Return type:
None
- eraseArc(*args)
Removes an arc in the ID, and update diagram’s potential nodes cpt if necessary.
If (tail, head) doesn’t exist, the nothing happens.
- Parameters:
arc (pyAgrum.Arc) – The arc to be removed whn calling eraseArc(arc)
tail (Union[int,str]) – a variable’s id (int) or name when calling eraseArc(tail,head)
head (Union[int,str]) – a variable’s id (int) or name when calling eraseArc(tail,head)
- Return type:
None
- exists(*args)
Check if a node with this name or id exists
- Parameters:
norid (str|int) – name or id of the searched node
- Returns:
True if there is a node with such a name or id
- Return type:
bool
- existsArc(*args)
Check if an arc exists
- Parameters:
tail (str|int) – the name or id of the tail of the arc
head (str|int) – the name or the id of the head of the arc
- Returns:
True if tail->head is an arc.
- Return type:
bool
- existsPathBetween(*args)
- Returns:
true if a path exists between two nodes.
- Return type:
bool
- family(norid)
give the set of parents of a node and the node
- Parameters:
norid (str|int) – the node
- Returns:
the set of nodeId of the family of the node norid
- Return type:
Set[int]
- static fastPrototype(*args)
- Create an Influence Diagram with a dot-like syntax which specifies:
the structure ‘a->b<-c;b->d;c<-e;’.
a prefix for the type of node (chance/decision/utiliy nodes):
a : a chance node named ‘a’ (by default)
$a : a utility node named ‘a’
*a : a decision node named ‘a’
the type of the variables with different syntax as postfix:
by default, a variable is a pyAgrum.RangeVariable using the default domain size (second argument)
with ‘a[10]’, the variable is a pyAgrum.RangeVariable using 10 as domain size (from 0 to 9)
with ‘a[3,7]’, the variable is a pyAgrum.RangeVariable using a domainSize from 3 to 7
with ‘a[1,3.14,5,6.2]’, the variable is a pyAgrum.DiscretizedVariable using the given ticks (at least 3 values)
with ‘a{top|middle|bottom}’, the variable is a pyAgrum.LabelizedVariable using the given labels.
with ‘a{-1|5|0|3}’, the variable is a pyAgrum.IntegerVariable using the sorted given values.
with ‘a{-0.5|5.01|0|3.1415}’, the variable is a pyAgrum.NumericalDiscreteVariable using the sorted given values.
Note
If the dot-like string contains such a specification more than once for a variable, the first specification will be used.
the potentials (probabilities, utilities) are randomly generated.
see also pyAgrum.fastID.
Examples
>>> import pyAgrum as gum >>> bn=pyAgrum.fastID('A->B[1,3]<-*C{yes|No}->$D<-E[1,2.5,3.9]',6)
- Parameters:
dotlike (str) – the string containing the specification
domainSize (int or str) – the default domain size or the default domain for variables
- Returns:
the resulting Influence Diagram
- Return type:
- getDecisionGraph()
- Returns:
the temporal Graph.
- Return type:
- hasSameStructure(other)
- Parameters:
pyAgrum.DAGmodel – a direct acyclic model
- Returns:
True if all the named node are the same and all the named arcs are the same
- Return type:
bool
- idFromName(name)
Returns a variable’s id given its name.
- Parameters:
name (str) – the variable’s name from which the id is returned.
- Returns:
the variable’s node id.
- Return type:
int
- Raises:
pyAgrum.NotFound – If no such name exists in the graph.
- ids(names)
List of ids for a list of names of variables in the model
- Parameters:
lov (List[str]) – List of variable names
names (
List
[str
])
- Returns:
The ids for the list of names of the graph variables
- Return type:
List[int]
- isChanceNode(*args)
- Parameters:
varId (int) – the tested node id.
- Returns:
true if node is a chance node
- Return type:
bool
- isDecisionNode(*args)
- Parameters:
varId (int) – the tested node id.
- Returns:
true if node is a decision node
- Return type:
bool
- isIndependent(*args)
check if nodes X and nodes Y are independent given nodes Z
- Parameters:
X (str|intList[str|int]) – a list of of nodeIds or names
Y (str|intList[str|int]) – a list of of nodeIds or names
Z (str|intList[str|int]) – a list of of nodeIds or names
- Raises:
InvalidArgument – if X and Y share variables
- Returns:
True if X and Y are independent given Z in the model
- Return type:
bool
- isUtilityNode(*args)
- Parameters:
varId (int) – the tested node id.
- Returns:
true if node is an utility node
- Return type:
bool
- loadBIFXML(*args)
Load a BIFXML file.
- Parameters:
name (str) – the name’s file
- Raises:
pyAgrum.IOError – If file not found
pyAgrum.FatalError – If file is not valid
- Return type:
bool
- log10DomainSize()
returns the log10 of the domain size of the model defined as the product of the domain sizes of the variables in the model.
- Returns:
the log10 domain size.
- Return type:
float
- moralGraph()
Returns the moral graph of the BayesNet, formed by adding edges between all pairs of nodes that have a common child, and then making all edges in the graph undirected.
- Returns:
The moral graph
- Return type:
- moralizedAncestralGraph(nodes)
build a UndiGraph by moralizing the Ancestral Graph of a list of nodes
- Parameters:
nodes (str|intList[str|int]) – the list of of nodeIds or names
Warning
pyAgrum.UndiGraph only knows NodeId. Hence the moralized ancestral graph does not include the names of the variables.graph
- Returns:
the moralized ancestral graph of the nodes
- Return type:
- names()
- Returns:
The names of the InfluenceDiagram variables
- Return type:
List[str]
- nodeId(var)
- Parameters:
var (pyAgrum.DiscreteVariable) – a variable
- Returns:
the id of the variable
- Return type:
int
- Raises:
pyAgrum.IndexError – If the InfluenceDiagram does not contain the variable
- nodes()
- Returns:
the set of ids
- Return type:
set
- nodeset(names)
Set of ids for a list of names of variables in the model
- Parameters:
lov (List[str]) – List of variable names
names (
List
[str
])
- Returns:
The set of ids for the list of names of the graph variables
- Return type:
Set[int]
- parents(norid)
- Parameters:
var (Union[int,str]) – a variable’s id (int) or name
norid (
object
)
- Returns:
the set of the parents ids.
- Return type:
set
- properties()
- Return type:
List
[str
]
- saveBIFXML(name)
Save the BayesNet in a BIFXML file.
- Parameters:
name (str) – the file’s name
- Return type:
None
- size()
- Returns:
the number of nodes in the graph
- Return type:
int
- sizeArcs()
- Returns:
the number of arcs in the graph
- Return type:
int
- property thisown
The membership flag
- toDot()
- Returns:
a friendly display of the graph in DOT format
- Return type:
str
- toFast(filename=None)
Export the influence Diagram as fast syntax (in a string or in a python file)
- Parameters:
filename (Optional[str]) – the name of the file (including the prefix), if None , use sys.stdout
- Return type:
str
- topologicalOrder()
- Returns:
the list of the nodes Ids in a topological order
- Return type:
List
- Raises:
pyAgrum.InvalidDirectedCycle – If this graph contains cycles
- utility(*args)
- Parameters:
var (Union[int,str]) – a variable’s id (int) or name
- Returns:
the utility table of the node
- Return type:
- Raises:
pyAgrum.IndexError – If the InfluenceDiagram does not contain the variable
- utilityNodeSize()
- Returns:
the number of utility nodes
- Return type:
int
- variable(*args)
- Parameters:
id (int) – the node id
- Returns:
a constant reference over a variabe given it’s node id
- Return type:
- Raises:
pyAgrum.NotFound – If no variable’s id matches the parameter
- variableFromName(name)
- Parameters:
name (str) – a variable’s name
- Returns:
the variable
- Return type:
Notes
A convenient shortcut for g.variableFromName(name) is g[name].
- Raises:
pyAgrum.IndexError – If the InfluenceDiagram does not contain the variable
- variableNodeMap()