480 lines
22 KiB
Plaintext
480 lines
22 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# SymbolicFactorGraph"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"A `SymbolicFactorGraph` is a factor graph consisting purely of `SymbolicFactor` objects. It represents the structure or topology of a probabilistic graphical model (like a Markov Random Field) without the numerical details.\n",
|
|
"\n",
|
|
"It's primarily used to *illustrate* symbolic elimination, which determines the structure of the resulting Bayes net or Bayes tree and finds an efficient variable elimination ordering (e.g., using COLAMD or METIS)."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"<a href=\"https://colab.research.google.com/github/borglab/gtsam/blob/develop/gtsam/symbolic/doc/SymbolicFactorGraph.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {
|
|
"tags": [
|
|
"remove-cell"
|
|
]
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Note: you may need to restart the kernel to use updated packages.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"%pip install --quiet gtsam-develop"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from gtsam import SymbolicFactorGraph, Ordering\n",
|
|
"from gtsam.symbol_shorthand import X, L\n",
|
|
"import graphviz"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Creating and Manipulating Symbolic Factor Graphs"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Symbolic Factor Graph:\n",
|
|
" \n",
|
|
"size: 5\n",
|
|
"factor 0: x0\n",
|
|
"factor 1: x0 x1\n",
|
|
"factor 2: x1 x2\n",
|
|
"factor 3: x0 l1\n",
|
|
"factor 4: x1 l2\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/svg+xml": [
|
|
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
|
|
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
|
|
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
|
|
"<!-- Generated by graphviz version 12.0.0 (0)\n",
|
|
" -->\n",
|
|
"<!-- Pages: 1 -->\n",
|
|
"<svg width=\"350pt\" height=\"84pt\"\n",
|
|
" viewBox=\"0.00 0.00 350.00 83.60\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
|
|
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 79.6)\">\n",
|
|
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-79.6 346,-79.6 346,4 -4,4\"/>\n",
|
|
"<!-- var7782220156096217089 -->\n",
|
|
"<g id=\"node1\" class=\"node\">\n",
|
|
"<title>var7782220156096217089</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"27\" cy=\"-57.6\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"27\" y=\"-52.55\" font-family=\"Times,serif\" font-size=\"14.00\">l1</text>\n",
|
|
"</g>\n",
|
|
"<!-- factor3 -->\n",
|
|
"<g id=\"node9\" class=\"node\">\n",
|
|
"<title>factor3</title>\n",
|
|
"<ellipse fill=\"black\" stroke=\"black\" cx=\"52\" cy=\"-1.8\" rx=\"1.8\" ry=\"1.8\"/>\n",
|
|
"</g>\n",
|
|
"<!-- var7782220156096217089--factor3 -->\n",
|
|
"<g id=\"edge7\" class=\"edge\">\n",
|
|
"<title>var7782220156096217089--factor3</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M34.77,-39.87C41.08,-26.3 49.27,-8.68 51.45,-3.99\"/>\n",
|
|
"</g>\n",
|
|
"<!-- var7782220156096217090 -->\n",
|
|
"<g id=\"node2\" class=\"node\">\n",
|
|
"<title>var7782220156096217090</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"315\" cy=\"-57.6\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"315\" y=\"-52.55\" font-family=\"Times,serif\" font-size=\"14.00\">l2</text>\n",
|
|
"</g>\n",
|
|
"<!-- factor4 -->\n",
|
|
"<g id=\"node10\" class=\"node\">\n",
|
|
"<title>factor4</title>\n",
|
|
"<ellipse fill=\"black\" stroke=\"black\" cx=\"279\" cy=\"-1.8\" rx=\"1.8\" ry=\"1.8\"/>\n",
|
|
"</g>\n",
|
|
"<!-- var7782220156096217090--factor4 -->\n",
|
|
"<g id=\"edge9\" class=\"edge\">\n",
|
|
"<title>var7782220156096217090--factor4</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M304.39,-40.75C295.1,-26.86 282.63,-8.22 279.66,-3.78\"/>\n",
|
|
"</g>\n",
|
|
"<!-- var8646911284551352320 -->\n",
|
|
"<g id=\"node3\" class=\"node\">\n",
|
|
"<title>var8646911284551352320</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"99\" cy=\"-57.6\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"99\" y=\"-52.55\" font-family=\"Times,serif\" font-size=\"14.00\">x0</text>\n",
|
|
"</g>\n",
|
|
"<!-- factor0 -->\n",
|
|
"<g id=\"node6\" class=\"node\">\n",
|
|
"<title>factor0</title>\n",
|
|
"<ellipse fill=\"black\" stroke=\"black\" cx=\"99\" cy=\"-1.8\" rx=\"1.8\" ry=\"1.8\"/>\n",
|
|
"</g>\n",
|
|
"<!-- var8646911284551352320--factor0 -->\n",
|
|
"<g id=\"edge1\" class=\"edge\">\n",
|
|
"<title>var8646911284551352320--factor0</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M99,-39.28C99,-25.77 99,-8.54 99,-3.96\"/>\n",
|
|
"</g>\n",
|
|
"<!-- factor1 -->\n",
|
|
"<g id=\"node7\" class=\"node\">\n",
|
|
"<title>factor1</title>\n",
|
|
"<ellipse fill=\"black\" stroke=\"black\" cx=\"160\" cy=\"-1.8\" rx=\"1.8\" ry=\"1.8\"/>\n",
|
|
"</g>\n",
|
|
"<!-- var8646911284551352320--factor1 -->\n",
|
|
"<g id=\"edge2\" class=\"edge\">\n",
|
|
"<title>var8646911284551352320--factor1</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M114.71,-42.75C131.09,-28.3 154.98,-7.23 159.31,-3.41\"/>\n",
|
|
"</g>\n",
|
|
"<!-- var8646911284551352320--factor3 -->\n",
|
|
"<g id=\"edge6\" class=\"edge\">\n",
|
|
"<title>var8646911284551352320--factor3</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M85.91,-41.61C73.74,-27.68 56.91,-8.41 52.89,-3.81\"/>\n",
|
|
"</g>\n",
|
|
"<!-- var8646911284551352321 -->\n",
|
|
"<g id=\"node4\" class=\"node\">\n",
|
|
"<title>var8646911284551352321</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"243\" cy=\"-57.6\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"243\" y=\"-52.55\" font-family=\"Times,serif\" font-size=\"14.00\">x1</text>\n",
|
|
"</g>\n",
|
|
"<!-- var8646911284551352321--factor1 -->\n",
|
|
"<g id=\"edge3\" class=\"edge\">\n",
|
|
"<title>var8646911284551352321--factor1</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M224.17,-44.39C201.97,-30.01 167.31,-7.54 161,-3.45\"/>\n",
|
|
"</g>\n",
|
|
"<!-- factor2 -->\n",
|
|
"<g id=\"node8\" class=\"node\">\n",
|
|
"<title>factor2</title>\n",
|
|
"<ellipse fill=\"black\" stroke=\"black\" cx=\"196\" cy=\"-1.8\" rx=\"1.8\" ry=\"1.8\"/>\n",
|
|
"</g>\n",
|
|
"<!-- var8646911284551352321--factor2 -->\n",
|
|
"<g id=\"edge4\" class=\"edge\">\n",
|
|
"<title>var8646911284551352321--factor2</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M229.91,-41.61C217.74,-27.68 200.91,-8.41 196.89,-3.81\"/>\n",
|
|
"</g>\n",
|
|
"<!-- var8646911284551352321--factor4 -->\n",
|
|
"<g id=\"edge8\" class=\"edge\">\n",
|
|
"<title>var8646911284551352321--factor4</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M253.61,-40.75C262.9,-26.86 275.37,-8.22 278.34,-3.78\"/>\n",
|
|
"</g>\n",
|
|
"<!-- var8646911284551352322 -->\n",
|
|
"<g id=\"node5\" class=\"node\">\n",
|
|
"<title>var8646911284551352322</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"171\" cy=\"-57.6\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"171\" y=\"-52.55\" font-family=\"Times,serif\" font-size=\"14.00\">x2</text>\n",
|
|
"</g>\n",
|
|
"<!-- var8646911284551352322--factor2 -->\n",
|
|
"<g id=\"edge5\" class=\"edge\">\n",
|
|
"<title>var8646911284551352322--factor2</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M178.77,-39.87C185.08,-26.3 193.27,-8.68 195.45,-3.99\"/>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg>\n"
|
|
],
|
|
"text/plain": [
|
|
"<graphviz.sources.Source at 0x107b7c890>"
|
|
]
|
|
},
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Create an empty graph\n",
|
|
"graph = SymbolicFactorGraph()\n",
|
|
"\n",
|
|
"# Add factors (using convenience methods)\n",
|
|
"graph.push_factor(X(0)) # Unary\n",
|
|
"graph.push_factor(X(0), X(1))\n",
|
|
"graph.push_factor(X(1), X(2))\n",
|
|
"graph.push_factor(X(0), L(1))\n",
|
|
"graph.push_factor(X(1), L(2))\n",
|
|
"\n",
|
|
"# Print the graph structure\n",
|
|
"graph.print(\"Symbolic Factor Graph:\\n\")\n",
|
|
"\n",
|
|
"# Visualize the graph using Graphviz\n",
|
|
"graphviz.Source(graph.dot())"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Symbolic Elimination\n",
|
|
"\n",
|
|
"We can perform symbolic elimination to get the structure of the resulting Bayes net or Bayes tree."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Define an elimination ordering (can also be computed automatically)\n",
|
|
"ordering = Ordering([L(1), L(2), X(0), X(1), X(2)])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"Resulting Symbolic Bayes Net:\n",
|
|
" \n",
|
|
"size: 5\n",
|
|
"conditional 0: P( l1 | x0)\n",
|
|
"conditional 1: P( x0 | x1)\n",
|
|
"conditional 2: P( l2 | x1)\n",
|
|
"conditional 3: P( x1 | x2)\n",
|
|
"conditional 4: P( x2)\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/svg+xml": [
|
|
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
|
|
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
|
|
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
|
|
"<!-- Generated by graphviz version 12.0.0 (0)\n",
|
|
" -->\n",
|
|
"<!-- Pages: 1 -->\n",
|
|
"<svg width=\"134pt\" height=\"260pt\"\n",
|
|
" viewBox=\"0.00 0.00 134.00 260.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
|
|
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 256)\">\n",
|
|
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-256 130,-256 130,4 -4,4\"/>\n",
|
|
"<!-- var7782220156096217089 -->\n",
|
|
"<g id=\"node1\" class=\"node\">\n",
|
|
"<title>var7782220156096217089</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"99\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"99\" y=\"-12.95\" font-family=\"Times,serif\" font-size=\"14.00\">l1</text>\n",
|
|
"</g>\n",
|
|
"<!-- var7782220156096217090 -->\n",
|
|
"<g id=\"node2\" class=\"node\">\n",
|
|
"<title>var7782220156096217090</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"27\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"27\" y=\"-84.95\" font-family=\"Times,serif\" font-size=\"14.00\">l2</text>\n",
|
|
"</g>\n",
|
|
"<!-- var8646911284551352320 -->\n",
|
|
"<g id=\"node3\" class=\"node\">\n",
|
|
"<title>var8646911284551352320</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"99\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"99\" y=\"-84.95\" font-family=\"Times,serif\" font-size=\"14.00\">x0</text>\n",
|
|
"</g>\n",
|
|
"<!-- var8646911284551352320->var7782220156096217089 -->\n",
|
|
"<g id=\"edge4\" class=\"edge\">\n",
|
|
"<title>var8646911284551352320->var7782220156096217089</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M99,-71.7C99,-64.41 99,-55.73 99,-47.54\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"102.5,-47.62 99,-37.62 95.5,-47.62 102.5,-47.62\"/>\n",
|
|
"</g>\n",
|
|
"<!-- var8646911284551352321 -->\n",
|
|
"<g id=\"node4\" class=\"node\">\n",
|
|
"<title>var8646911284551352321</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"63\" cy=\"-162\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"63\" y=\"-156.95\" font-family=\"Times,serif\" font-size=\"14.00\">x1</text>\n",
|
|
"</g>\n",
|
|
"<!-- var8646911284551352321->var7782220156096217090 -->\n",
|
|
"<g id=\"edge2\" class=\"edge\">\n",
|
|
"<title>var8646911284551352321->var7782220156096217090</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M54.65,-144.76C50.42,-136.55 45.19,-126.37 40.42,-117.09\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"43.68,-115.79 36,-108.49 37.46,-118.99 43.68,-115.79\"/>\n",
|
|
"</g>\n",
|
|
"<!-- var8646911284551352321->var8646911284551352320 -->\n",
|
|
"<g id=\"edge3\" class=\"edge\">\n",
|
|
"<title>var8646911284551352321->var8646911284551352320</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M71.35,-144.76C75.58,-136.55 80.81,-126.37 85.58,-117.09\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"88.54,-118.99 90,-108.49 82.32,-115.79 88.54,-118.99\"/>\n",
|
|
"</g>\n",
|
|
"<!-- var8646911284551352322 -->\n",
|
|
"<g id=\"node5\" class=\"node\">\n",
|
|
"<title>var8646911284551352322</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"63\" cy=\"-234\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"63\" y=\"-228.95\" font-family=\"Times,serif\" font-size=\"14.00\">x2</text>\n",
|
|
"</g>\n",
|
|
"<!-- var8646911284551352322->var8646911284551352321 -->\n",
|
|
"<g id=\"edge1\" class=\"edge\">\n",
|
|
"<title>var8646911284551352322->var8646911284551352321</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M63,-215.7C63,-208.41 63,-199.73 63,-191.54\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"66.5,-191.62 63,-181.62 59.5,-191.62 66.5,-191.62\"/>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg>\n"
|
|
],
|
|
"text/plain": [
|
|
"<graphviz.sources.Source at 0x107815d30>"
|
|
]
|
|
},
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Eliminate sequentially to get a Bayes Net structure\n",
|
|
"bayes_net = graph.eliminateSequential(ordering)\n",
|
|
"bayes_net.print(\"\\nResulting Symbolic Bayes Net:\\n\")\n",
|
|
"\n",
|
|
"# Visualize the Bayes Net using Graphviz\n",
|
|
"graphviz.Source(bayes_net.dot())"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 19,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"Resulting Symbolic Bayes Tree:\n",
|
|
": cliques: 4, variables: 5\n",
|
|
"\n",
|
|
"Resulting Symbolic Bayes Tree:\n",
|
|
"- P( x1 x2)\n",
|
|
"\n",
|
|
"Resulting Symbolic Bayes Tree:\n",
|
|
"| - P( x0 | x1)\n",
|
|
"\n",
|
|
"Resulting Symbolic Bayes Tree:\n",
|
|
"| | - P( l1 | x0)\n",
|
|
"\n",
|
|
"Resulting Symbolic Bayes Tree:\n",
|
|
"| - P( l2 | x1)\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/svg+xml": [
|
|
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
|
|
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
|
|
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
|
|
"<!-- Generated by graphviz version 12.0.0 (0)\n",
|
|
" -->\n",
|
|
"<!-- Title: G Pages: 1 -->\n",
|
|
"<svg width=\"170pt\" height=\"188pt\"\n",
|
|
" viewBox=\"0.00 0.00 169.99 188.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
|
|
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 184)\">\n",
|
|
"<title>G</title>\n",
|
|
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-184 165.99,-184 165.99,4 -4,4\"/>\n",
|
|
"<!-- 0 -->\n",
|
|
"<g id=\"node1\" class=\"node\">\n",
|
|
"<title>0</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"82.02\" cy=\"-162\" rx=\"34.46\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"82.02\" y=\"-156.95\" font-family=\"Times,serif\" font-size=\"14.00\">x1, x2</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1 -->\n",
|
|
"<g id=\"node2\" class=\"node\">\n",
|
|
"<title>1</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"37.02\" cy=\"-90\" rx=\"37.02\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"37.02\" y=\"-84.95\" font-family=\"Times,serif\" font-size=\"14.00\">x0 : x1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->1 -->\n",
|
|
"<g id=\"edge1\" class=\"edge\">\n",
|
|
"<title>0->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M71.36,-144.41C66.09,-136.22 59.61,-126.14 53.71,-116.95\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"56.78,-115.26 48.43,-108.74 50.89,-119.05 56.78,-115.26\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 3 -->\n",
|
|
"<g id=\"node4\" class=\"node\">\n",
|
|
"<title>3</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"127.02\" cy=\"-90\" rx=\"34.97\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"127.02\" y=\"-84.95\" font-family=\"Times,serif\" font-size=\"14.00\">l2 : x1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->3 -->\n",
|
|
"<g id=\"edge3\" class=\"edge\">\n",
|
|
"<title>0->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M92.69,-144.41C97.95,-136.22 104.43,-126.14 110.34,-116.95\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"113.15,-119.05 115.61,-108.74 107.26,-115.26 113.15,-119.05\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 2 -->\n",
|
|
"<g id=\"node3\" class=\"node\">\n",
|
|
"<title>2</title>\n",
|
|
"<ellipse fill=\"none\" stroke=\"black\" cx=\"37.02\" cy=\"-18\" rx=\"34.97\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"37.02\" y=\"-12.95\" font-family=\"Times,serif\" font-size=\"14.00\">l1 : x0</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->2 -->\n",
|
|
"<g id=\"edge2\" class=\"edge\">\n",
|
|
"<title>1->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"black\" d=\"M37.02,-71.7C37.02,-64.41 37.02,-55.73 37.02,-47.54\"/>\n",
|
|
"<polygon fill=\"black\" stroke=\"black\" points=\"40.52,-47.62 37.02,-37.62 33.52,-47.62 40.52,-47.62\"/>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg>\n"
|
|
],
|
|
"text/plain": [
|
|
"<graphviz.sources.Source at 0x111534470>"
|
|
]
|
|
},
|
|
"execution_count": 19,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Eliminate using Multifrontal method to get a Bayes Tree structure\n",
|
|
"bayes_tree = graph.eliminateMultifrontal(ordering)\n",
|
|
"bayes_tree.print(\"\\nResulting Symbolic Bayes Tree:\\n\")\n",
|
|
"\n",
|
|
"# Visualize the Bayes Tree using Graphviz\n",
|
|
"graphviz.Source(bayes_tree.dot())"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "py312",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.12.6"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 4
|
|
}
|