Temporal arcs

<< Click to Display Table of Contents >>

Navigation:  Using SMILE Wrappers > Dynamic Bayesian networks >

Temporal arcs

In dynamic Bayesian networks, temporal arcs represent dependencies between variables across different time slices. They define how the state of a variable at time t-order_of_arc influences the state of another variable at time t. The parent and child of a temporal arc may even be the same PLATE node, expressing temporal self-dependence (for example, how a variable’s past value affects its future value).

Temporal arcs connect only PLATE nodes, since these are the nodes that represent variables evolving over time. Each temporal arc has an associated temporal order, indicating how many time steps separate the connected nodes. Temporal arcs of order 1 connect consecutive time slices, while higher-order arcs connect nodes separated by two or more time steps.

In the screenshot included in the Temporal node types section, there are three temporal arcs:

from P1 to P2 with order 1,

from P1 to P2 with order 2,

from P2 to P1 with order 1.

Temporal arcs are added with Network.add_temporal_arc, which takes the parent and child node identifiers and the desired temporal order as arguments. The arcs are automatically expanded when the DBN is unrolled during inference. Arcs that do not span across time slices are referred to are added using Network.add_arc.

The following methods allow you to create, delete, and inspect temporal arcs, as well as retrieve temporal parents, children, and orders for nodes in a dynamic Bayesian network:

Python

add_temporal_arc(parent: int | str, child: int | str, order: int) -> None

delete_temporal_arc(parent: int | str, child: int | str, order: int) -> None

temporal_arc_exists(parent: int | str, child: int | str, order: int) -> bool

get_max_temporal_order() -> int

get_max_node_temporal_order(node: int | str) -> int

get_temporal_orders(node: int | str) -> List[int]

get_temporal_children(node: int | str) -> List[TemporalInfo]

get_temporal_parents(node: int | str, order: int) -> List[TemporalInfo]

Java

void addTemporalArc(int parentHandle, int childHandle, int order);

void addTemporalArc(String parentId, String childId, int order);

void deleteTemporalArc(int parentHandle, int childHandle, int order);

void deleteTemporalArc(String parentId, String childId, int order);

boolean temporalArcExists(int parentHandle, int childHandle, int order);

boolean temporalArcExists(String parentId, String childId, int order);

int getMaxTemporalOrder();

int getMaxNodeTemporalOrder(int nodeHandle);

int getMaxNodeTemporalOrder(String nodeId);

int[] getTemporalOrders(int nodeHandle);

int[] getTemporalOrders(String nodeId);

TemporalInfo[] getTemporalChildren(int nodeHandle);

TemporalInfo[] getTemporalChildren(String nodeId);

TemporalInfo[] getTemporalParents(int nodeHandle, int order);

TemporalInfo[] getTemporalParents(String nodeId, int order);

C#

void AddTemporalArc(int parentHandle, int childHandle, int order);

void AddTemporalArc(string parentId, string childId, int order);

void DeleteTemporalArc(int parentHandle, int childHandle, int order);

void DeleteTemporalArc(string parentId, string childId, int order);

bool TemporalArcExists(int parentHandle, int childHandle, int order);

bool TemporalArcExists(string parentId, string childId, int order);

int GetMaxTemporalOrder();

int GetMaxNodeTemporalOrder(int nodeHandle);

int GetMaxNodeTemporalOrder(string nodeId);

int[] GetTemporalOrders(int nodeHandle);

int[] GetTemporalOrders(string nodeId);

TemporalInfo[] GetTemporalChildren(int nodeHandle);

TemporalInfo[] GetTemporalChildren(string nodeId);

TemporalInfo[] GetTemporalParents(int nodeHandle, int order);

TemporalInfo[] GetTemporalParents(string nodeId, int order);

R

addTemporalArc(parentIdOrHandle, childIdOrHandle, order)

deleteTemporalArc(parentIdOrHandle, childIdOrHandle, order)

temporalExists <- temporalArcExists(parentIdOrHandle, childIdOrHandle, order)

maxOrder <- getMaxTemporalOrder()

maxNodeOrder <- getMaxNodeTemporalOrder(nodeIdOrHandle)

temporalOrders <- getTemporalOrders(nodeIdOrHandle)

temporalChildren <- getTemporalChildren(nodeIdOrHandle)

temporalParents <- getTemporalParents(nodeIdOrHandle, order)