Skip to content

Model for Decision in PGM

an influence diagram

InfluenceDiagram represents an Influence Diagram.

InfluenceDiagram() -> InfluenceDiagram : default constructor

InfluenceDiagram(source) -> InfluenceDiagram : Parameters: : - source (pyagrum.InfluenceDiagram) – the InfluenceDiagram to copy

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.

Add an arc in the ID, and update diagram’s tensor 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:
  • Return type: None

add a list of arcs in te model.

  • Parameters: listArcs (List [**Tuple [**int ,**int ] ]) – the list of arcs

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

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)

Section titled “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

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 !!!

addVariables(listFastVariables, default_nbr_mod=2)

Section titled “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]

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

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]
  • Returns: the list of all the arcs in the Influence Diagram.
  • Return type: list
  • Return type: None
  • Returns: the number of chance nodes.
  • Return type: int
  • Parameters:
    • var (Union [**int ,**str ]) – a variable’s id (int) or name
    • new_name (str) – the name of the variable
  • Raises:
  • Return type: None
  • Parameters:
    • var (Union [**int ,**str ]) – a variable’s id (int) or name
    • norid (object)
  • Returns: the set of all the children
  • Return type: Set
  • Return type: None

Give an instantiation over all the variables of the model

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])

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: pyagrum.Tensor
  • Raises: pyagrum.NotFound – If no variable’s id matches varId.
  • Returns: a constant reference to the dag of this BayesNet.
  • Return type: pyagrum.DAG
  • Returns: the number of decision nodes
  • Return type: int
  • Return type: list[int]
  • Returns: True if a directed path exist with all decision node
  • Return type: bool

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]

Check if there are some variables in the model.

  • Returns: True if there is no variable in the model.
  • Return type: bool
  • Return type: None

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

Removes an arc in the ID, and update diagram’s tensor 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

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

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
  • Returns: true if a path exists between two nodes.
  • Return type: bool

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]

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 tensors (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: pyagrum.InfluenceDiagram
  • Returns: the temporal Graph.
  • Return type: pyagrum.DAG
  • 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

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.

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]
  • Parameters: varId (int) – the tested node id.
  • Returns: true if node is a chance node
  • Return type: bool
  • Parameters: varId (int) – the tested node id.
  • Returns: true if node is a decision node
  • Return type: bool

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
  • Parameters: varId (int) – the tested node id.
  • Returns: true if node is an utility node
  • Return type: bool

Load a BIFXML file.

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
  • Return type: list[int]

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.

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 names of the InfluenceDiagram variables
  • Return type: List[str]
  • 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
  • Returns: the set of ids
  • Return type: set

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]
  • Parameters:
    • var (Union [**int ,**str ]) – a variable’s id (int) or name
    • norid (object)
  • Returns: the set of the parents ids.
  • Return type: set
  • Return type: list[str]

Save the BayesNet in a BIFXML file.

  • Parameters: name (str) – the file’s name
  • Return type: None
  • Returns: the number of nodes in the graph
  • Return type: int
  • Returns: the number of arcs in the graph
  • Return type: int

The membership flag

  • Returns: a friendly display of the graph in DOT format
  • Return type: str

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
  • Returns: the list of the nodes Ids in a topological order
  • Return type: List
  • Raises: pyagrum.InvalidDirectedCycle – If this graph contains cycles
  • Parameters: var (Union [**int ,**str ]) – a variable’s id (int) or name
  • Returns: the utility table of the node
  • Return type: pyagrum.Tensor
  • Raises: pyagrum.IndexError – If the InfluenceDiagram does not contain the variable
  • Returns: the number of utility nodes
  • Return type: int
  • Parameters: id (int) – the node id
  • Returns: a constant reference over a variabe given it’s node id
  • Return type: pyagrum.DiscreteVariable
  • Raises: pyagrum.NotFound – If no variable’s id matches the parameter

Notes

A convenient shortcut for g.variableFromName(name) is g[name].

  • Raises: pyagrum.IndexError – If the InfluenceDiagram does not contain the variable