diff --git a/gtsam/inference/doc/Ordering.ipynb b/gtsam/inference/doc/Ordering.ipynb index 1648e8b45..9f4a595ed 100644 --- a/gtsam/inference/doc/Ordering.ipynb +++ b/gtsam/inference/doc/Ordering.ipynb @@ -45,16 +45,16 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 21, "metadata": { "id": "ordering_import_code" }, "outputs": [], "source": [ "import gtsam\n", - "from gtsam import Ordering, VariableIndex\n", + "from gtsam import Ordering\n", "# Need graph types\n", - "from gtsam import SymbolicFactorGraph, SymbolicBayesNet\n", + "from gtsam import SymbolicFactorGraph\n", "from gtsam import symbol_shorthand\n", "import graphviz\n", "\n", @@ -75,7 +75,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 22, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -100,7 +100,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -146,29 +146,29 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 24, "metadata": { "id": "ordering_grid_setup_code" }, "outputs": [], "source": [ - "# Create a 5x5 grid graph\n", - "ROWS, COLS = 5, 5\n", + "# Create a 3x4 grid graph\n", + "ROWS, COLS = 3, 4\n", "\n", "# Use 'x' symbols for grid nodes\n", - "X_grid = lambda r, c: gtsam.symbol('x', r * COLS + c)\n", + "X_grid = lambda r, c: X(10 * (r + 1) + c + 1)\n", + "\n", "\n", "def create_grid_graph():\n", " \"\"\"Creates a SymbolicFactorGraph representing a 2D grid.\"\"\"\n", " graph = SymbolicFactorGraph()\n", " keys = []\n", - "\n", + " positions = {}\n", " for r in range(ROWS):\n", " for c in range(COLS):\n", " key = X_grid(r, c)\n", + " positions[key] = gtsam.Point2(c, COLS-r)\n", " keys.append(key)\n", - " # Add a unary factor (like a prior or measurement)\n", - " graph.push_factor(key)\n", " # Add binary factors connecting to right and down neighbors\n", " if c + 1 < COLS:\n", " key_right = X_grid(r, c + 1)\n", @@ -176,9 +176,10 @@ " if r + 1 < ROWS:\n", " key_down = X_grid(r + 1, c)\n", " graph.push_factor(key, key_down)\n", - " return graph, keys\n", + " return graph, keys, positions\n", "\n", - "grid_graph, grid_keys = create_grid_graph()" + "\n", + "grid_graph, grid_keys, positions = create_grid_graph()" ] }, { @@ -187,15 +188,13 @@ "id": "ordering_grid_viz_md" }, "source": [ - "Here's the structure of our 5x5 grid graph. Edges represent factors connecting variables (nodes)." + "Here's the structure of our grid graph. Edges represent factors connecting variables (nodes)." ] }, { "cell_type": "code", - "execution_count": 22, - "metadata": { - "id": "ordering_grid_viz_code" - }, + "execution_count": 25, + "metadata": {}, "outputs": [ { "data": { @@ -206,1015 +205,172 @@ "\n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352320\n", - "\n", - "x0\n", - "\n", - "\n", - "\n", - "factor0\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352320--factor0\n", - "\n", - "\n", - "\n", - "\n", - "factor1\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352320--factor1\n", - "\n", - "\n", - "\n", - "\n", - "factor2\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352320--factor2\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352321\n", - "\n", - "x1\n", - "\n", - "\n", - "\n", - "var8646911284551352321--factor1\n", - "\n", - "\n", - "\n", - "\n", - "factor3\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352321--factor3\n", - "\n", - "\n", - "\n", - "\n", - "factor4\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352321--factor4\n", - "\n", - "\n", - "\n", - "\n", - "factor5\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352321--factor5\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352322\n", - "\n", - "x2\n", - "\n", - "\n", - "\n", - "var8646911284551352322--factor4\n", - "\n", - "\n", - "\n", - "\n", - "factor6\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352322--factor6\n", - "\n", - "\n", - "\n", - "\n", - "factor7\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352322--factor7\n", - "\n", - "\n", - "\n", - "\n", - "factor8\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352322--factor8\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352323\n", - "\n", - "x3\n", - "\n", - "\n", - "\n", - "var8646911284551352323--factor7\n", - "\n", - "\n", - "\n", - "\n", - "factor9\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352323--factor9\n", - "\n", - "\n", - "\n", - "\n", - "factor10\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352323--factor10\n", - "\n", - "\n", - "\n", - "\n", - "factor11\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352323--factor11\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352324\n", - "\n", - "x4\n", - "\n", - "\n", - "\n", - "var8646911284551352324--factor10\n", - "\n", - "\n", - "\n", - "\n", - "factor12\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352324--factor12\n", - "\n", - "\n", - "\n", - "\n", - "factor13\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352324--factor13\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352325\n", - "\n", - "x5\n", - "\n", - "\n", - "\n", - "var8646911284551352325--factor2\n", - "\n", - "\n", - "\n", - "\n", - "factor14\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352325--factor14\n", - "\n", - "\n", - "\n", - "\n", - "factor15\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352325--factor15\n", - "\n", - "\n", - "\n", - "\n", - "factor16\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352325--factor16\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352326\n", - "\n", - "x6\n", - "\n", - "\n", - "\n", - "var8646911284551352326--factor5\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352326--factor15\n", - "\n", - "\n", - "\n", - "\n", - "factor17\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352326--factor17\n", - "\n", - "\n", - "\n", - "\n", - "factor18\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352326--factor18\n", - "\n", - "\n", - "\n", - "\n", - "factor19\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352326--factor19\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352327\n", - "\n", - "x7\n", - "\n", - "\n", - "\n", - "var8646911284551352327--factor8\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352327--factor18\n", - "\n", - "\n", - "\n", - "\n", - "factor20\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352327--factor20\n", - "\n", - "\n", - "\n", - "\n", - "factor21\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352327--factor21\n", - "\n", - "\n", - "\n", - "\n", - "factor22\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352327--factor22\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352328\n", - "\n", - "x8\n", - "\n", - "\n", - "\n", - "var8646911284551352328--factor11\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352328--factor21\n", - "\n", - "\n", - "\n", - "\n", - "factor23\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352328--factor23\n", - "\n", - "\n", - "\n", - "\n", - "factor24\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352328--factor24\n", - "\n", - "\n", - "\n", - "\n", - "factor25\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352328--factor25\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352329\n", - "\n", - "x9\n", - "\n", - "\n", - "\n", - "var8646911284551352329--factor13\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352329--factor24\n", - "\n", - "\n", - "\n", - "\n", - "factor26\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352329--factor26\n", - "\n", - "\n", - "\n", - "\n", - "factor27\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352329--factor27\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352330\n", - "\n", - "x10\n", - "\n", - "\n", - "\n", - "var8646911284551352330--factor16\n", - "\n", - "\n", - "\n", - "\n", - "factor28\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352330--factor28\n", - "\n", - "\n", - "\n", - "\n", - "factor29\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352330--factor29\n", - "\n", - "\n", - "\n", - "\n", - "factor30\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352330--factor30\n", - "\n", - "\n", + "\n", + "\n", + "\n", "\n", - "\n", + "\n", "var8646911284551352331\n", - "\n", - "x11\n", - "\n", - "\n", - "\n", - "var8646911284551352331--factor19\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352331--factor29\n", - "\n", - "\n", - "\n", - "\n", - "factor31\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352331--factor31\n", - "\n", - "\n", - "\n", - "\n", - "factor32\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352331--factor32\n", - "\n", - "\n", - "\n", - "\n", - "factor33\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352331--factor33\n", - "\n", + "\n", + "x11\n", "\n", "\n", - "\n", + "\n", "var8646911284551352332\n", - "\n", - "x12\n", + "\n", + "x12\n", "\n", - "\n", - "\n", - "var8646911284551352332--factor22\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352332--factor32\n", - "\n", - "\n", - "\n", - "\n", - "factor34\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352332--factor34\n", - "\n", - "\n", - "\n", - "\n", - "factor35\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352332--factor35\n", - "\n", - "\n", - "\n", - "\n", - "factor36\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352332--factor36\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352333\n", - "\n", - "x13\n", - "\n", - "\n", - "\n", - "var8646911284551352333--factor25\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352333--factor35\n", - "\n", - "\n", - "\n", - "\n", - "factor37\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352333--factor37\n", - "\n", - "\n", - "\n", - "\n", - "factor38\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352333--factor38\n", - "\n", - "\n", - "\n", - "\n", - "factor39\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352333--factor39\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352334\n", - "\n", - "x14\n", - "\n", - "\n", - "\n", - "var8646911284551352334--factor27\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352334--factor38\n", - "\n", - "\n", - "\n", - "\n", - "factor40\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352334--factor40\n", - "\n", - "\n", - "\n", - "\n", - "factor41\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352334--factor41\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352335\n", - "\n", - "x15\n", - "\n", - "\n", - "\n", - "var8646911284551352335--factor30\n", - "\n", - "\n", - "\n", - "\n", - "factor42\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352335--factor42\n", - "\n", - "\n", - "\n", - "\n", - "factor43\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352335--factor43\n", - "\n", - "\n", - "\n", - "\n", - "factor44\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352335--factor44\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352336\n", - "\n", - "x16\n", - "\n", - "\n", - "\n", - "var8646911284551352336--factor33\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352336--factor43\n", - "\n", - "\n", - "\n", - "\n", - "factor45\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352336--factor45\n", - "\n", - "\n", - "\n", - "\n", - "factor46\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352336--factor46\n", - "\n", - "\n", - "\n", - "\n", - "factor47\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352336--factor47\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337\n", - "\n", - "x17\n", - "\n", - "\n", - "\n", - "var8646911284551352337--factor36\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337--factor46\n", - "\n", - "\n", - "\n", - "\n", - "factor48\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337--factor48\n", - "\n", - "\n", - "\n", - "\n", - "factor49\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337--factor49\n", - "\n", - "\n", - "\n", - "\n", - "factor50\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337--factor50\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352338\n", - "\n", - "x18\n", - "\n", - "\n", - "\n", - "var8646911284551352338--factor39\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352338--factor49\n", - "\n", - "\n", - "\n", - "\n", - "factor51\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352338--factor51\n", - "\n", - "\n", - "\n", - "\n", - "factor52\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352338--factor52\n", - "\n", - "\n", - "\n", - "\n", - "factor53\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352338--factor53\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352339\n", - "\n", - "x19\n", - "\n", - "\n", - "\n", - "var8646911284551352339--factor41\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352339--factor52\n", - "\n", - "\n", - "\n", - "\n", - "factor54\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352339--factor54\n", - "\n", - "\n", - "\n", - "\n", - "factor55\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352339--factor55\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352340\n", - "\n", - "x20\n", - "\n", - "\n", - "\n", - "var8646911284551352340--factor44\n", - "\n", - "\n", - "\n", - "\n", - "factor56\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352340--factor56\n", - "\n", - "\n", - "\n", - "\n", - "factor57\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352340--factor57\n", - "\n", + "\n", + "\n", + "var8646911284551352331--var8646911284551352332\n", + "\n", "\n", "\n", - "\n", + "\n", "var8646911284551352341\n", - "\n", - "x21\n", + "\n", + "x21\n", "\n", - "\n", - "\n", - "var8646911284551352341--factor47\n", - "\n", + "\n", + "\n", + "var8646911284551352331--var8646911284551352341\n", + "\n", "\n", - "\n", - "\n", - "var8646911284551352341--factor57\n", - "\n", + "\n", + "\n", + "var8646911284551352333\n", + "\n", + "x13\n", "\n", - "\n", - "\n", - "factor58\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352341--factor58\n", - "\n", - "\n", - "\n", - "\n", - "factor59\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352341--factor59\n", - "\n", + "\n", + "\n", + "var8646911284551352332--var8646911284551352333\n", + "\n", "\n", "\n", - "\n", + "\n", "var8646911284551352342\n", - "\n", - "x22\n", + "\n", + "x22\n", "\n", - "\n", - "\n", - "var8646911284551352342--factor50\n", - "\n", + "\n", + "\n", + "var8646911284551352332--var8646911284551352342\n", + "\n", "\n", - "\n", - "\n", - "var8646911284551352342--factor59\n", - "\n", + "\n", + "\n", + "var8646911284551352334\n", + "\n", + "x14\n", "\n", - "\n", - "\n", - "factor60\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352342--factor60\n", - "\n", - "\n", - "\n", - "\n", - "factor61\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352342--factor61\n", - "\n", + "\n", + "\n", + "var8646911284551352333--var8646911284551352334\n", + "\n", "\n", "\n", - "\n", + "\n", "var8646911284551352343\n", - "\n", - "x23\n", + "\n", + "x23\n", "\n", - "\n", - "\n", - "var8646911284551352343--factor53\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352343--factor61\n", - "\n", - "\n", - "\n", - "\n", - "factor62\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352343--factor62\n", - "\n", - "\n", - "\n", - "\n", - "factor63\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352343--factor63\n", - "\n", + "\n", + "\n", + "var8646911284551352333--var8646911284551352343\n", + "\n", "\n", "\n", - "\n", + "\n", "var8646911284551352344\n", - "\n", - "x24\n", + "\n", + "x24\n", "\n", - "\n", - "\n", - "var8646911284551352344--factor55\n", - "\n", + "\n", + "\n", + "var8646911284551352334--var8646911284551352344\n", + "\n", "\n", - "\n", - "\n", - "var8646911284551352344--factor63\n", - "\n", + "\n", + "\n", + "var8646911284551352341--var8646911284551352342\n", + "\n", "\n", - "\n", - "\n", - "factor64\n", - "\n", + "\n", + "\n", + "var8646911284551352351\n", + "\n", + "x31\n", "\n", - "\n", - "\n", - "var8646911284551352344--factor64\n", - "\n", + "\n", + "\n", + "var8646911284551352341--var8646911284551352351\n", + "\n", + "\n", + "\n", + "\n", + "var8646911284551352342--var8646911284551352343\n", + "\n", + "\n", + "\n", + "\n", + "var8646911284551352352\n", + "\n", + "x32\n", + "\n", + "\n", + "\n", + "var8646911284551352342--var8646911284551352352\n", + "\n", + "\n", + "\n", + "\n", + "var8646911284551352343--var8646911284551352344\n", + "\n", + "\n", + "\n", + "\n", + "var8646911284551352353\n", + "\n", + "x33\n", + "\n", + "\n", + "\n", + "var8646911284551352343--var8646911284551352353\n", + "\n", + "\n", + "\n", + "\n", + "var8646911284551352354\n", + "\n", + "x34\n", + "\n", + "\n", + "\n", + "var8646911284551352344--var8646911284551352354\n", + "\n", + "\n", + "\n", + "\n", + "var8646911284551352351--var8646911284551352352\n", + "\n", + "\n", + "\n", + "\n", + "var8646911284551352352--var8646911284551352353\n", + "\n", + "\n", + "\n", + "\n", + "var8646911284551352353--var8646911284551352354\n", + "\n", "\n", "\n", "\n" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1222,7 +378,9 @@ } ], "source": [ - "display(graphviz.Source(grid_graph.dot()))" + "writer = gtsam.DotWriter(binaryEdges = True)\n", + "writer.variablePositions = positions\n", + "display(graphviz.Source(grid_graph.dot(writer=writer), engine='neato'))" ] }, { @@ -1238,7 +396,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 26, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1252,9 +410,14 @@ "output_type": "stream", "text": [ "COLAMD Ordering: \n", - "Position 0: x0, x5, x1, x6, x4, x9, x3, x8, x12, x24\n", - "Position 10: x23, x19, x18, x20, x21, x15, x16, x22, x17, x14\n", - "Position 20: x13, x10, x11, x2, x7\n", + "Position 0: x11, x31, x14, x34, x33, x24, x23, x32, x13, x22\n", + "Position 10: x21, x12\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", "COLAMD Bayes Net Structure:\n" ] @@ -1267,628 +430,119 @@ " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "G\n", + "\n", + "\n", "\n", - "var8646911284551352320\n", - "\n", - "x0\n", + "0\n", + "\n", + "x11, x21, x12\n", "\n", - "\n", + "\n", "\n", - "var8646911284551352321\n", - "\n", - "x1\n", + "1\n", + "\n", + "x13, x22 : x12, x21\n", "\n", - "\n", - "\n", - "var8646911284551352321->var8646911284551352320\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352325\n", - "\n", - "x5\n", - "\n", - "\n", - "\n", - "var8646911284551352321->var8646911284551352325\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352322\n", - "\n", - "x2\n", - "\n", - "\n", - "\n", - "var8646911284551352322->var8646911284551352321\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352323\n", - "\n", - "x3\n", - "\n", - "\n", - "\n", - "var8646911284551352322->var8646911284551352323\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352326\n", - "\n", - "x6\n", - "\n", - "\n", - "\n", - "var8646911284551352322->var8646911284551352326\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352328\n", - "\n", - "x8\n", - "\n", - "\n", - "\n", - "var8646911284551352322->var8646911284551352328\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352330\n", - "\n", - "x10\n", - "\n", - "\n", - "\n", - "var8646911284551352322->var8646911284551352330\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352331\n", - "\n", - "x11\n", - "\n", - "\n", - "\n", - "var8646911284551352322->var8646911284551352331\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352333\n", - "\n", - "x13\n", - "\n", - "\n", - "\n", - "var8646911284551352322->var8646911284551352333\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352334\n", - "\n", - "x14\n", - "\n", - "\n", - "\n", - "var8646911284551352322->var8646911284551352334\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352324\n", - "\n", - "x4\n", - "\n", - "\n", - "\n", - "var8646911284551352323->var8646911284551352324\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352329\n", - "\n", - "x9\n", - "\n", - "\n", - "\n", - "var8646911284551352323->var8646911284551352329\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352325->var8646911284551352320\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352326->var8646911284551352321\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352326->var8646911284551352325\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352327\n", - "\n", - "x7\n", - "\n", - "\n", + "\n", "\n", - "var8646911284551352327->var8646911284551352322\n", - "\n", - "\n", + "0->1\n", + "\n", + "\n", "\n", - "\n", - "\n", - "var8646911284551352327->var8646911284551352326\n", - "\n", - "\n", + "\n", + "\n", + "2\n", + "\n", + "x32 : x13, x21, x22\n", "\n", - "\n", - "\n", - "var8646911284551352327->var8646911284551352328\n", - "\n", - "\n", + "\n", + "\n", + "1->2\n", + "\n", + "\n", "\n", - "\n", - "\n", - "var8646911284551352327->var8646911284551352330\n", - "\n", - "\n", + "\n", + "\n", + "3\n", + "\n", + "x31 : x21, x32\n", "\n", - "\n", + "\n", "\n", - "var8646911284551352327->var8646911284551352331\n", - "\n", - "\n", + "2->3\n", + "\n", + "\n", "\n", - "\n", - "\n", - "var8646911284551352332\n", - "\n", - "x12\n", + "\n", + "\n", + "4\n", + "\n", + "x23 : x13, x22, x32\n", "\n", - "\n", - "\n", - "var8646911284551352327->var8646911284551352332\n", - "\n", - "\n", + "\n", + "\n", + "2->4\n", + "\n", + "\n", "\n", - "\n", - "\n", - "var8646911284551352327->var8646911284551352333\n", - "\n", - "\n", + "\n", + "\n", + "5\n", + "\n", + "x24 : x13, x23, x32\n", "\n", - "\n", - "\n", - "var8646911284551352327->var8646911284551352334\n", - "\n", - "\n", + "\n", + "\n", + "4->5\n", + "\n", + "\n", "\n", - "\n", - "\n", - "var8646911284551352337\n", - "\n", - "x17\n", + "\n", + "\n", + "6\n", + "\n", + "x14 : x13, x24\n", "\n", - "\n", - "\n", - "var8646911284551352327->var8646911284551352337\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352328->var8646911284551352323\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352328->var8646911284551352329\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352329->var8646911284551352324\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352330->var8646911284551352321\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352330->var8646911284551352325\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352330->var8646911284551352326\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352330->var8646911284551352333\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352330->var8646911284551352334\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352335\n", - "\n", - "x15\n", - "\n", - "\n", - "\n", - "var8646911284551352330->var8646911284551352335\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352336\n", - "\n", - "x16\n", - "\n", - "\n", - "\n", - "var8646911284551352330->var8646911284551352336\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352330->var8646911284551352337\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352342\n", - "\n", - "x22\n", - "\n", - "\n", - "\n", - "var8646911284551352330->var8646911284551352342\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352331->var8646911284551352326\n", - "\n", - "\n", - "\n", - "\n", + "\n", "\n", - "var8646911284551352331->var8646911284551352330\n", - "\n", - "\n", + "5->6\n", + "\n", + "\n", "\n", - "\n", - "\n", - "var8646911284551352331->var8646911284551352332\n", - "\n", - "\n", + "\n", + "\n", + "7\n", + "\n", + "x33 : x23, x24, x32\n", "\n", - "\n", - "\n", - "var8646911284551352331->var8646911284551352333\n", - "\n", - "\n", + "\n", + "\n", + "5->7\n", + "\n", + "\n", "\n", - "\n", - "\n", - "var8646911284551352331->var8646911284551352334\n", - "\n", - "\n", + "\n", + "\n", + "8\n", + "\n", + "x34 : x24, x33\n", "\n", - "\n", - "\n", - "var8646911284551352331->var8646911284551352336\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352331->var8646911284551352337\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352331->var8646911284551352342\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352333->var8646911284551352328\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352333->var8646911284551352332\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352333->var8646911284551352334\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352333->var8646911284551352337\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352338\n", - "\n", - "x18\n", - "\n", - "\n", - "\n", - "var8646911284551352333->var8646911284551352338\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352333->var8646911284551352342\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352334->var8646911284551352323\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352334->var8646911284551352328\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352334->var8646911284551352329\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352334->var8646911284551352337\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352334->var8646911284551352338\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352339\n", - "\n", - "x19\n", - "\n", - "\n", - "\n", - "var8646911284551352334->var8646911284551352339\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352334->var8646911284551352342\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352340\n", - "\n", - "x20\n", - "\n", - "\n", - "\n", - "var8646911284551352335->var8646911284551352340\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352341\n", - "\n", - "x21\n", - "\n", - "\n", - "\n", - "var8646911284551352335->var8646911284551352341\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352336->var8646911284551352335\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352336->var8646911284551352341\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337->var8646911284551352332\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337->var8646911284551352336\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337->var8646911284551352338\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337->var8646911284551352342\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352338->var8646911284551352339\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352343\n", - "\n", - "x23\n", - "\n", - "\n", - "\n", - "var8646911284551352338->var8646911284551352343\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352339->var8646911284551352343\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352344\n", - "\n", - "x24\n", - "\n", - "\n", - "\n", - "var8646911284551352339->var8646911284551352344\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352341->var8646911284551352340\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352342->var8646911284551352335\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352342->var8646911284551352336\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352342->var8646911284551352338\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352342->var8646911284551352339\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352342->var8646911284551352341\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352342->var8646911284551352343\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352343->var8646911284551352344\n", - "\n", - "\n", + "\n", + "\n", + "7->8\n", + "\n", + "\n", "\n", "\n", "\n" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1902,11 +556,11 @@ "colamd_ordering.print()\n", "\n", "# Eliminate using COLAMD ordering\n", - "bayes_net_colamd = grid_graph.eliminateSequential(colamd_ordering)\n", + "bayes_tree_colamd = grid_graph.eliminateMultifrontal(colamd_ordering)\n", "\n", "# Visualize the resulting Bayes Net\n", "print(\"\\nCOLAMD Bayes Net Structure:\")\n", - "display(graphviz.Source(bayes_net_colamd.dot()))" + "display(graphviz.Source(bayes_tree_colamd.dot()))" ] }, { @@ -1922,7 +576,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 27, "metadata": { "id": "ordering_metis_code" }, @@ -1932,9 +586,8 @@ "output_type": "stream", "text": [ "METIS Ordering: \n", - "Position 0: x21, x1, x15, x11, x5, x20, x0, x16, x6, x10\n", - "Position 10: x24, x4, x18, x14, x8, x23, x3, x19, x9, x13\n", - "Position 20: x7, x17, x2, x22, x12\n", + "Position 0: x34, x23, x14, x24, x13, x32, x11, x31, x21, x12\n", + "Position 10: x33, x22\n", "\n", "METIS Bayes Net Structure:\n" ] @@ -1947,676 +600,107 @@ " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "G\n", + "\n", + "\n", "\n", - "var8646911284551352320\n", - "\n", - "x0\n", + "8\n", + "\n", + "x21, x12, x33, x22\n", "\n", - "\n", + "\n", "\n", - "var8646911284551352321\n", - "\n", - "x1\n", + "9\n", + "\n", + "x11 : x12, x21\n", "\n", - "\n", - "\n", - "var8646911284551352320->var8646911284551352321\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352325\n", - "\n", - "x5\n", - "\n", - "\n", - "\n", - "var8646911284551352320->var8646911284551352325\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352322\n", - "\n", - "x2\n", - "\n", - "\n", - "\n", - "var8646911284551352322->var8646911284551352320\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352322->var8646911284551352321\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352323\n", - "\n", - "x3\n", - "\n", - "\n", - "\n", - "var8646911284551352322->var8646911284551352323\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352326\n", - "\n", - "x6\n", - "\n", - "\n", - "\n", - "var8646911284551352322->var8646911284551352326\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352327\n", - "\n", - "x7\n", - "\n", - "\n", - "\n", - "var8646911284551352322->var8646911284551352327\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352329\n", - "\n", - "x9\n", - "\n", - "\n", - "\n", - "var8646911284551352322->var8646911284551352329\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352330\n", - "\n", - "x10\n", - "\n", - "\n", - "\n", - "var8646911284551352322->var8646911284551352330\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352333\n", - "\n", - "x13\n", - "\n", - "\n", - "\n", - "var8646911284551352322->var8646911284551352333\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337\n", - "\n", - "x17\n", - "\n", - "\n", - "\n", - "var8646911284551352322->var8646911284551352337\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352324\n", - "\n", - "x4\n", - "\n", - "\n", - "\n", - "var8646911284551352323->var8646911284551352324\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352328\n", - "\n", - "x8\n", - "\n", - "\n", - "\n", - "var8646911284551352323->var8646911284551352328\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352326->var8646911284551352320\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352326->var8646911284551352321\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352326->var8646911284551352325\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352331\n", - "\n", - "x11\n", - "\n", - "\n", - "\n", - "var8646911284551352326->var8646911284551352331\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352336\n", - "\n", - "x16\n", - "\n", - "\n", - "\n", - "var8646911284551352326->var8646911284551352336\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352327->var8646911284551352323\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352327->var8646911284551352326\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352327->var8646911284551352328\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352327->var8646911284551352329\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352327->var8646911284551352330\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352327->var8646911284551352333\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352329->var8646911284551352323\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352329->var8646911284551352324\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352329->var8646911284551352328\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352334\n", - "\n", - "x14\n", - "\n", - "\n", - "\n", - "var8646911284551352329->var8646911284551352334\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352339\n", - "\n", - "x19\n", - "\n", - "\n", - "\n", - "var8646911284551352329->var8646911284551352339\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352330->var8646911284551352320\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352330->var8646911284551352325\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352330->var8646911284551352326\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352330->var8646911284551352331\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352335\n", - "\n", - "x15\n", - "\n", - "\n", - "\n", - "var8646911284551352330->var8646911284551352335\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352330->var8646911284551352336\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352340\n", - "\n", - "x20\n", - "\n", - "\n", - "\n", - "var8646911284551352330->var8646911284551352340\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352332\n", - "\n", - "x12\n", - "\n", - "\n", - "\n", - "var8646911284551352332->var8646911284551352322\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352332->var8646911284551352326\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352332->var8646911284551352327\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352332->var8646911284551352330\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352332->var8646911284551352331\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352332->var8646911284551352333\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352332->var8646911284551352336\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352332->var8646911284551352337\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352342\n", - "\n", - "x22\n", - "\n", - "\n", + "\n", "\n", - "var8646911284551352332->var8646911284551352342\n", - "\n", - "\n", + "8->9\n", + "\n", + "\n", "\n", - "\n", - "\n", - "var8646911284551352333->var8646911284551352323\n", - "\n", - "\n", + "\n", + "\n", + "10\n", + "\n", + "x31 : x21, x22, x33\n", "\n", - "\n", - "\n", - "var8646911284551352333->var8646911284551352328\n", - "\n", - "\n", + "\n", + "\n", + "8->10\n", + "\n", + "\n", "\n", - "\n", - "\n", - "var8646911284551352333->var8646911284551352329\n", - "\n", - "\n", + "\n", + "\n", + "12\n", + "\n", + "x13 : x12, x22, x33\n", "\n", - "\n", - "\n", - "var8646911284551352333->var8646911284551352334\n", - "\n", - "\n", + "\n", + "\n", + "8->12\n", + "\n", + "\n", "\n", - "\n", - "\n", - "var8646911284551352338\n", - "\n", - "x18\n", + "\n", + "\n", + "11\n", + "\n", + "x32 : x22, x31, x33\n", "\n", - "\n", - "\n", - "var8646911284551352333->var8646911284551352338\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352333->var8646911284551352339\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352343\n", - "\n", - "x23\n", - "\n", - "\n", - "\n", - "var8646911284551352333->var8646911284551352343\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352336->var8646911284551352331\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352336->var8646911284551352335\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352336->var8646911284551352340\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352341\n", - "\n", - "x21\n", - "\n", - "\n", - "\n", - "var8646911284551352336->var8646911284551352341\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337->var8646911284551352326\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337->var8646911284551352327\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337->var8646911284551352329\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337->var8646911284551352330\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337->var8646911284551352333\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337->var8646911284551352336\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337->var8646911284551352338\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337->var8646911284551352339\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352337->var8646911284551352343\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352339->var8646911284551352334\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352339->var8646911284551352338\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352339->var8646911284551352343\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352344\n", - "\n", - "x24\n", - "\n", - "\n", - "\n", - "var8646911284551352339->var8646911284551352344\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352340->var8646911284551352335\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352340->var8646911284551352341\n", - "\n", - "\n", - "\n", - "\n", + "\n", "\n", - "var8646911284551352342->var8646911284551352322\n", - "\n", - "\n", + "10->11\n", + "\n", + "\n", "\n", - "\n", - "\n", - "var8646911284551352342->var8646911284551352326\n", - "\n", - "\n", + "\n", + "\n", + "13\n", + "\n", + "x23, x24 : x13, x22, x33\n", "\n", - "\n", - "\n", - "var8646911284551352342->var8646911284551352327\n", - "\n", - "\n", + "\n", + "\n", + "12->13\n", + "\n", + "\n", "\n", - "\n", - "\n", - "var8646911284551352342->var8646911284551352329\n", - "\n", - "\n", + "\n", + "\n", + "14\n", + "\n", + "x14 : x13, x24\n", "\n", - "\n", - "\n", - "var8646911284551352342->var8646911284551352330\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352342->var8646911284551352333\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352342->var8646911284551352336\n", - "\n", - "\n", - "\n", - "\n", + "\n", "\n", - "var8646911284551352342->var8646911284551352337\n", - "\n", - "\n", + "13->14\n", + "\n", + "\n", "\n", - "\n", - "\n", - "var8646911284551352342->var8646911284551352339\n", - "\n", - "\n", + "\n", + "\n", + "15\n", + "\n", + "x34 : x24, x33\n", "\n", - "\n", - "\n", - "var8646911284551352342->var8646911284551352340\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352342->var8646911284551352341\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352342->var8646911284551352343\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352343->var8646911284551352338\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "var8646911284551352343->var8646911284551352344\n", - "\n", - "\n", + "\n", + "\n", + "13->15\n", + "\n", + "\n", "\n", "\n", "\n" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2629,11 +713,11 @@ "metis_ordering.print()\n", "\n", "# Eliminate using METIS ordering\n", - "bayes_net_metis = grid_graph.eliminateSequential(metis_ordering)\n", + "bayes_tree_metis = grid_graph.eliminateMultifrontal(metis_ordering)\n", "\n", "# Visualize the resulting Bayes Net\n", "print(\"\\nMETIS Bayes Net Structure:\")\n", - "display(graphviz.Source(bayes_net_metis.dot()))" + "display(graphviz.Source(bayes_tree_metis.dot()))" ] }, { @@ -2644,9 +728,9 @@ "source": [ "### Comparison\n", "\n", - "Observe the differences in the Bayes Net structures produced by COLAMD and METIS:\n", + "Observe the differences in the Bayes tree structures produced by COLAMD and METIS:\n", "\n", - "* **COLAMD:** Often produces a more 'stringy' or deeper elimination tree/Bayes Net. The cliques (conditionals in the Bayes Net) might be smaller initially but can grow larger towards the root (variables eliminated last).\n", + "* **COLAMD:** Often produces a more 'stringy' or deeper Bayes tree. The cliques (conditionals in the Bayes tree) might be smaller initially but can grow larger towards the root (variables eliminated last).\n", "* **METIS:** Tends to produce a more 'bushy' or balanced tree. It tries to partition the graph, eliminating variables within partitions first, leading to potentially larger initial cliques but often a shallower overall structure and smaller separators (variables connecting cliques high up in the tree). \n", "\n", "When should you choose one over the other? The best choice often depends on the specific problem structure and computational goals:\n", @@ -2657,7 +741,7 @@ " * The factor graph is relatively small or doesn't have a highly regular structure where complex partitioning would yield significant benefits.\n", "\n", "* **Use METIS when:**\n", - " * You are aiming for maximum performance with a *parallel* solver (e.g., using GTSAM's multifrontal solvers with TBB). METIS's graph partitioning approach tends to create more balanced elimination trees, which allows for better workload distribution across multiple CPU cores.\n", + " * You are aiming for maximum performance with a *parallel* solver (e.g., using GTSAM's multifrontal solvers with TBB). METIS's graph partitioning approach tends to create more balanced Bayes trees, which allows for better workload distribution across multiple CPU cores.\n", " * You are dealing with very large-scale problems, especially those with a regular structure (like large grids, meshes from finite element analysis, or extensive SLAM maps). On such problems, METIS can sometimes find an ordering with significantly less *total fill-in* than COLAMD, leading to faster factorization, even if computing the ordering itself takes longer.\n", " * The cost of computing the ordering is negligible compared to the cost of the subsequent factorization and solve steps (e.g., you compute the ordering once for a structure that is solved repeatedly).\n", "\n", @@ -2679,7 +763,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 28, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2692,10 +776,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "Constrained COLAMD (x0, x24 last):\n", - "Position 0: x5, x1, x6, x23, x20, x21, x15, x16, x22, x12\n", - "Position 10: x19, x4, x9, x3, x8, x14, x13, x18, x17, x2\n", - "Position 20: x7, x10, x11, x24, x0\n" + "Constrained COLAMD (x11, x34 last):\n", + "Position 0: x31, x32, x21, x14, x24, x13, x23, x33, x22, x12\n", + "Position 10: x34, x11\n" ] } ], @@ -2721,7 +804,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 29, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2734,8 +817,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "COLAMD Ordering size: 25\n", - "Key at position 0 (COLAMD): x0\n" + "COLAMD Ordering size: 12\n", + "Key at position 0 (COLAMD): x11\n" ] } ], @@ -2760,7 +843,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 30, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2773,9 +856,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "Appended Ordering: Position 0: x0, x5, x1, x6, x4, x9, x3, x8, x12, x24\n", - "Position 10: x23, x19, x18, x20, x21, x15, x16, x22, x17, x14\n", - "Position 20: x13, x10, x11, x2, x7, l0, x25\n" + "Appended Ordering: Position 0: x11, x31, x14, x34, x33, x24, x23, x32, x13, x22\n", + "Position 10: x21, x12, l0, x12\n" ] } ], @@ -2791,7 +873,7 @@ ], "metadata": { "kernelspec": { - "display_name": "gtsam", + "display_name": "py312", "language": "python", "name": "python3" }, @@ -2805,7 +887,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.1" + "version": "3.12.6" } }, "nbformat": 4,