{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "387afc46-d5a9-49f6-9344-6a3007fa00ec",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pyAgrum as gum\n",
"import pyAgrum.lib.notebook as gnb"
]
},
{
"cell_type": "markdown",
"id": "0934c5b9-5a3f-46a0-9a1e-8556facad55d",
"metadata": {},
"source": [
"
1. Create the structure of the Bayes net (Figure 2.a)
"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "5505988f-9078-4c85-b7fb-586e0308295d",
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"XXX = {'A': 2, 'B': 2, 'C': 4, 'D': 3, 'E': 3, 'F': 3}\n",
"bn = gum.BayesNet()\n",
"\n",
"for X in XXX:\n",
" bn.add(gum.LabelizedVariable('xi_' + X,'',4))\n",
" bn.add(gum.LabelizedVariable(X,'',XXX[X]))\n",
"\n",
"for X in XXX:\n",
" bn.addArc('xi_' + X, X)\n",
"arcs = [('B','C'), ('A','C'), ('B','D'), ('D','E'), ('C','E'), ('E','F')]\n",
"for tail, head in arcs:\n",
" bn.addArc(tail, head)\n",
" \n",
"gnb.showBN(bn, size=12)"
]
},
{
"cell_type": "markdown",
"id": "728b747b-4902-4f67-b7b2-cb78178c5f12",
"metadata": {},
"source": [
"2. Assign the probability distributions to the disturbance variables
"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "cf2faa13-e7ad-43c8-82f3-0a5d3fb8368f",
"metadata": {},
"outputs": [],
"source": [
"# \n",
"bn.cpt('xi_A')[:] = [0.2, 0.1, 0.3, 0.4]\n",
"bn.cpt('xi_B')[:] = [0.2, 0.4, 0.3, 0.1]\n",
"bn.cpt('xi_C')[:] = [0.3, 0.3, 0.2, 0.2]\n",
"bn.cpt('xi_D')[:] = [0.5, 0.3, 0.1, 0.1]\n",
"bn.cpt('xi_E')[:] = [0.1, 0.2, 0.3, 0.4]\n",
"bn.cpt('xi_F')[:] = [0.2, 0.3, 0.3, 0.2]"
]
},
{
"cell_type": "markdown",
"id": "dac90e06-9491-4545-b179-665ce6cf9078",
"metadata": {},
"source": [
"3. Assign to probability distributions to the nodes of X
"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "4a285e74-b169-4de3-98c7-f83dc04f7283",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" | \n",
" A\n",
" |
\n",
"xi_A | \n",
" 0 | \n",
" 1 |
\n",
"0 | 1.0000 | 0.0000 |
\n",
"1 | 1.0000 | 0.0000 |
\n",
"2 | 0.0000 | 1.0000 |
\n",
"3 | 0.0000 | 1.0000 |
\n",
"
"
],
"text/plain": [
"(pyAgrum.Potential@0x560ca248bec0) \n",
" || A |\n",
"xi_A ||0 |1 |\n",
"------||---------|---------|\n",
"0 || 1.0000 | 0.0000 |\n",
"1 || 1.0000 | 0.0000 |\n",
"2 || 0.0000 | 1.0000 |\n",
"3 || 0.0000 | 1.0000 |"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cpt_A = np.array([[1, 1, 0, 0], [0, 0, 1, 1]])\n",
"bn.cpt('A')[:] = cpt_A.T\n",
"bn.cpt('A')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "a4373915-b70e-416d-b076-3b3985a4818e",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" | \n",
" B\n",
" |
\n",
"xi_B | \n",
" 0 | \n",
" 1 |
\n",
"0 | 0.0000 | 1.0000 |
\n",
"1 | 1.0000 | 0.0000 |
\n",
"2 | 0.0000 | 1.0000 |
\n",
"3 | 1.0000 | 0.0000 |
\n",
"
"
],
"text/plain": [
"(pyAgrum.Potential@0x560ca2697780) \n",
" || B |\n",
"xi_B ||0 |1 |\n",
"------||---------|---------|\n",
"0 || 0.0000 | 1.0000 |\n",
"1 || 1.0000 | 0.0000 |\n",
"2 || 0.0000 | 1.0000 |\n",
"3 || 1.0000 | 0.0000 |"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cpt_B = np.array([[0, 1, 0, 1], [1, 0, 1, 0]])\n",
"bn.cpt('B')[:] = cpt_B.T\n",
"bn.cpt('B')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "595a5b4c-ed20-4838-aa55-66f8fdc90743",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" | \n",
" C\n",
" |
\n",
"A | B | xi_C | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 3 |
\n",
"\n",
" 0 | \n",
" 0 | 0 | 1.0000 | 0.0000 | 0.0000 | 0.0000 |
\n",
"1 | 1.0000 | 0.0000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 1.0000 | 0.0000 |
\n",
"3 | 0.0000 | 0.0000 | 1.0000 | 0.0000 |
\n",
"\n",
" 1 | 0 | 1.0000 | 0.0000 | 0.0000 | 0.0000 |
\n",
"1 | 1.0000 | 0.0000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 0.0000 | 1.0000 |
\n",
"3 | 0.0000 | 0.0000 | 0.0000 | 1.0000 |
\n",
"\n",
" 1 | \n",
" 0 | 0 | 0.0000 | 1.0000 | 0.0000 | 0.0000 |
\n",
"1 | 0.0000 | 1.0000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 1.0000 | 0.0000 |
\n",
"3 | 0.0000 | 0.0000 | 1.0000 | 0.0000 |
\n",
"\n",
" 1 | 0 | 0.0000 | 1.0000 | 0.0000 | 0.0000 |
\n",
"1 | 0.0000 | 1.0000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 0.0000 | 1.0000 |
\n",
"3 | 0.0000 | 0.0000 | 0.0000 | 1.0000 |
\n",
"
"
],
"text/plain": [
"(pyAgrum.Potential@0x560ca265a740) \n",
" || C |\n",
"xi_C |B |A ||0 |1 |2 |3 |\n",
"------|------|------||---------|---------|---------|---------|\n",
"0 |0 |0 || 1.0000 | 0.0000 | 0.0000 | 0.0000 |\n",
"1 |0 |0 || 1.0000 | 0.0000 | 0.0000 | 0.0000 |\n",
"2 |0 |0 || 0.0000 | 0.0000 | 1.0000 | 0.0000 |\n",
"3 |0 |0 || 0.0000 | 0.0000 | 1.0000 | 0.0000 |\n",
"0 |1 |0 || 1.0000 | 0.0000 | 0.0000 | 0.0000 |\n",
"1 |1 |0 || 1.0000 | 0.0000 | 0.0000 | 0.0000 |\n",
"[...4 more line(s) ...]\n",
"2 |0 |1 || 0.0000 | 0.0000 | 1.0000 | 0.0000 |\n",
"3 |0 |1 || 0.0000 | 0.0000 | 1.0000 | 0.0000 |\n",
"0 |1 |1 || 0.0000 | 1.0000 | 0.0000 | 0.0000 |\n",
"1 |1 |1 || 0.0000 | 1.0000 | 0.0000 | 0.0000 |\n",
"2 |1 |1 || 0.0000 | 0.0000 | 0.0000 | 1.0000 |\n",
"3 |1 |1 || 0.0000 | 0.0000 | 0.0000 | 1.0000 |"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cpt_C = np.array([[1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0],\n",
" [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1]])\n",
"bn.cpt('C').fillWith(cpt_C.T.flatten().astype(float))\n",
"bn.cpt('C')"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "ed70421b-c4b4-48af-9632-2755ccbc4c3c",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" | \n",
" D\n",
" |
\n",
"B | xi_D | \n",
" 0 | \n",
" 1 | \n",
" 2 |
\n",
"\n",
" 0 | 0 | 1.0000 | 0.0000 | 0.0000 |
\n",
"1 | 0.0000 | 0.0000 | 1.0000 |
\n",
"2 | 1.0000 | 0.0000 | 0.0000 |
\n",
"3 | 0.0000 | 0.0000 | 1.0000 |
\n",
"\n",
" 1 | 0 | 0.0000 | 0.0000 | 1.0000 |
\n",
"1 | 0.0000 | 1.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 1.0000 |
\n",
"3 | 0.0000 | 0.0000 | 1.0000 |
\n",
"
"
],
"text/plain": [
"(pyAgrum.Potential@0x560ca24c4eb0) \n",
" || D |\n",
"xi_D |B ||0 |1 |2 |\n",
"------|------||---------|---------|---------|\n",
"0 |0 || 1.0000 | 0.0000 | 0.0000 |\n",
"1 |0 || 0.0000 | 0.0000 | 1.0000 |\n",
"2 |0 || 1.0000 | 0.0000 | 0.0000 |\n",
"3 |0 || 0.0000 | 0.0000 | 1.0000 |\n",
"0 |1 || 0.0000 | 0.0000 | 1.0000 |\n",
"1 |1 || 0.0000 | 1.0000 | 0.0000 |\n",
"2 |1 || 0.0000 | 0.0000 | 1.0000 |\n",
"3 |1 || 0.0000 | 0.0000 | 1.0000 |"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cpt_D = np.array([[1, 0, 1, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 1, 0, 0],\n",
" [0, 1, 0, 1, 1, 0, 1, 1]])\n",
"bn.cpt('D').fillWith(cpt_D.T.flatten().astype(float))\n",
"bn.cpt('D')"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "47366a23-0265-439f-8500-e7767619a53c",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" | \n",
" E\n",
" |
\n",
"C | D | xi_E | \n",
" 0 | \n",
" 1 | \n",
" 2 |
\n",
"\n",
" 0 | \n",
" 0 | 0 | 1.0000 | 0.0000 | 0.0000 |
\n",
"1 | 1.0000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 1.0000 |
\n",
"3 | 0.0000 | 0.0000 | 1.0000 |
\n",
"\n",
" 1 | 0 | 1.0000 | 0.0000 | 0.0000 |
\n",
"1 | 1.0000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 1.0000 |
\n",
"3 | 0.0000 | 0.0000 | 1.0000 |
\n",
"\n",
" 2 | 0 | 1.0000 | 0.0000 | 0.0000 |
\n",
"1 | 1.0000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 1.0000 |
\n",
"3 | 0.0000 | 0.0000 | 1.0000 |
\n",
"\n",
" 1 | \n",
" 0 | 0 | 0.0000 | 0.0000 | 1.0000 |
\n",
"1 | 0.0000 | 0.0000 | 1.0000 |
\n",
"2 | 0.0000 | 0.0000 | 1.0000 |
\n",
"3 | 0.0000 | 0.0000 | 1.0000 |
\n",
"\n",
" 1 | 0 | 0.0000 | 1.0000 | 0.0000 |
\n",
"1 | 0.0000 | 1.0000 | 0.0000 |
\n",
"2 | 0.0000 | 1.0000 | 0.0000 |
\n",
"3 | 0.0000 | 1.0000 | 0.0000 |
\n",
"\n",
" 2 | 0 | 0.0000 | 0.0000 | 1.0000 |
\n",
"1 | 0.0000 | 0.0000 | 1.0000 |
\n",
"2 | 0.0000 | 0.0000 | 1.0000 |
\n",
"3 | 0.0000 | 0.0000 | 1.0000 |
\n",
"\n",
" 2 | \n",
" 0 | 0 | 1.0000 | 0.0000 | 0.0000 |
\n",
"1 | 1.0000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 1.0000 |
\n",
"3 | 0.0000 | 0.0000 | 1.0000 |
\n",
"\n",
" 1 | 0 | 1.0000 | 0.0000 | 0.0000 |
\n",
"1 | 1.0000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 1.0000 |
\n",
"3 | 0.0000 | 0.0000 | 1.0000 |
\n",
"\n",
" 2 | 0 | 1.0000 | 0.0000 | 0.0000 |
\n",
"1 | 1.0000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 1.0000 |
\n",
"3 | 0.0000 | 0.0000 | 1.0000 |
\n",
"\n",
" 3 | \n",
" 0 | 0 | 0.0000 | 0.0000 | 1.0000 |
\n",
"1 | 0.0000 | 0.0000 | 1.0000 |
\n",
"2 | 0.0000 | 0.0000 | 1.0000 |
\n",
"3 | 0.0000 | 0.0000 | 1.0000 |
\n",
"\n",
" 1 | 0 | 0.0000 | 1.0000 | 0.0000 |
\n",
"1 | 0.0000 | 1.0000 | 0.0000 |
\n",
"2 | 0.0000 | 1.0000 | 0.0000 |
\n",
"3 | 0.0000 | 1.0000 | 0.0000 |
\n",
"\n",
" 2 | 0 | 0.0000 | 0.0000 | 1.0000 |
\n",
"1 | 0.0000 | 0.0000 | 1.0000 |
\n",
"2 | 0.0000 | 0.0000 | 1.0000 |
\n",
"3 | 0.0000 | 0.0000 | 1.0000 |
\n",
"
"
],
"text/plain": [
"(pyAgrum.Potential@0x560ca2771fc0) \n",
" || E |\n",
"xi_E |D |C ||0 |1 |2 |\n",
"------|------|------||---------|---------|---------|\n",
"0 |0 |0 || 1.0000 | 0.0000 | 0.0000 |\n",
"1 |0 |0 || 1.0000 | 0.0000 | 0.0000 |\n",
"2 |0 |0 || 0.0000 | 0.0000 | 1.0000 |\n",
"3 |0 |0 || 0.0000 | 0.0000 | 1.0000 |\n",
"0 |1 |0 || 1.0000 | 0.0000 | 0.0000 |\n",
"1 |1 |0 || 1.0000 | 0.0000 | 0.0000 |\n",
"[...36 more line(s) ...]\n",
"2 |1 |3 || 0.0000 | 1.0000 | 0.0000 |\n",
"3 |1 |3 || 0.0000 | 1.0000 | 0.0000 |\n",
"0 |2 |3 || 0.0000 | 0.0000 | 1.0000 |\n",
"1 |2 |3 || 0.0000 | 0.0000 | 1.0000 |\n",
"2 |2 |3 || 0.0000 | 0.0000 | 1.0000 |\n",
"3 |2 |3 || 0.0000 | 0.0000 | 1.0000 |"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cpt_E = np.array([[1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
" 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0],\n",
" [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1,\n",
" 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1]])\n",
"bn.cpt('E').fillWith(cpt_E.T.flatten().astype(float))\n",
"bn.cpt('E')"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "291a1f29-535f-48e0-9d34-d01abe6e0325",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" | \n",
" F\n",
" |
\n",
"E | xi_F | \n",
" 0 | \n",
" 1 | \n",
" 2 |
\n",
"\n",
" 0 | 0 | 1.0000 | 0.0000 | 0.0000 |
\n",
"1 | 0.0000 | 1.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 1.0000 |
\n",
"3 | 0.0000 | 0.0000 | 1.0000 |
\n",
"\n",
" 1 | 0 | 1.0000 | 0.0000 | 0.0000 |
\n",
"1 | 0.0000 | 0.0000 | 1.0000 |
\n",
"2 | 0.0000 | 0.0000 | 1.0000 |
\n",
"3 | 0.0000 | 0.0000 | 1.0000 |
\n",
"\n",
" 2 | 0 | 1.0000 | 0.0000 | 0.0000 |
\n",
"1 | 0.0000 | 1.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 1.0000 |
\n",
"3 | 0.0000 | 0.0000 | 1.0000 |
\n",
"
"
],
"text/plain": [
"(pyAgrum.Potential@0x560ca2773910) \n",
" || F |\n",
"xi_F |E ||0 |1 |2 |\n",
"------|------||---------|---------|---------|\n",
"0 |0 || 1.0000 | 0.0000 | 0.0000 |\n",
"1 |0 || 0.0000 | 1.0000 | 0.0000 |\n",
"2 |0 || 0.0000 | 0.0000 | 1.0000 |\n",
"3 |0 || 0.0000 | 0.0000 | 1.0000 |\n",
"0 |1 || 1.0000 | 0.0000 | 0.0000 |\n",
"1 |1 || 0.0000 | 0.0000 | 1.0000 |\n",
"2 |1 || 0.0000 | 0.0000 | 1.0000 |\n",
"3 |1 || 0.0000 | 0.0000 | 1.0000 |\n",
"0 |2 || 1.0000 | 0.0000 | 0.0000 |\n",
"1 |2 || 0.0000 | 1.0000 | 0.0000 |\n",
"2 |2 || 0.0000 | 0.0000 | 1.0000 |\n",
"3 |2 || 0.0000 | 0.0000 | 1.0000 |"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cpt_F = np.array([[1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0],\n",
" [0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],\n",
" [0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1]])\n",
"bn.cpt('F').fillWith(cpt_F.T.flatten().astype(float))\n",
"bn.cpt('F')"
]
},
{
"cell_type": "markdown",
"id": "1328b071-21e1-4088-8cf0-ae31a54f5a35",
"metadata": {},
"source": [
"4. Marginalize out the disturbance variables
"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "1e7184a0-e345-462e-b87e-94eeb7958f8c",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" | \n",
" xi_A\n",
" |
\n",
"A | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 3 |
\n",
"0 | 0.2000 | 0.1000 | 0.0000 | 0.0000 |
\n",
"1 | 0.0000 | 0.0000 | 0.3000 | 0.4000 |
\n",
"
"
],
"text/plain": [
"(pyAgrum.Potential@0x560ca20fcd90) \n",
" || xi_A |\n",
"A ||0 |1 |2 |3 |\n",
"------||---------|---------|---------|---------|\n",
"0 || 0.2000 | 0.1000 | 0.0000 | 0.0000 |\n",
"1 || 0.0000 | 0.0000 | 0.3000 | 0.4000 |"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"XP_A = bn.cpt('A') * bn.cpt('xi_A') # compute P(A,xi_A) = f_A(xi_A) x P(xi_A)\n",
"XP_A"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "594829fd-768a-41a1-a995-4f7542d1f0a5",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" A |
\n",
"\n",
" 0 | \n",
" 1 |
\n",
"0.3000 | 0.7000 |
\n",
"
"
],
"text/plain": [
"(pyAgrum.Potential@0x560ca2773180) \n",
" A |\n",
"0 |1 |\n",
"---------|---------|\n",
" 0.3000 | 0.7000 |"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P_A = XP_A.sumOut('xi_A') # compute sum_{xi_A} P(A, xi_A)\n",
"P_A"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "7ffde0c5-91b6-404d-9d40-52506cfd295a",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" | \n",
" xi_B\n",
" |
\n",
"B | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 3 |
\n",
"0 | 0.0000 | 0.4000 | 0.0000 | 0.1000 |
\n",
"1 | 0.2000 | 0.0000 | 0.3000 | 0.0000 |
\n",
"
"
],
"text/plain": [
"(pyAgrum.Potential@0x560ca1af2900) \n",
" || xi_B |\n",
"B ||0 |1 |2 |3 |\n",
"------||---------|---------|---------|---------|\n",
"0 || 0.0000 | 0.4000 | 0.0000 | 0.1000 |\n",
"1 || 0.2000 | 0.0000 | 0.3000 | 0.0000 |"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"XP_B = bn.cpt('B') * bn.cpt('xi_B')\n",
"XP_B"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "7dab0fa3-cd10-4858-9de3-241e4cd9c165",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" B |
\n",
"\n",
" 0 | \n",
" 1 |
\n",
"0.5000 | 0.5000 |
\n",
"
"
],
"text/plain": [
"(pyAgrum.Potential@0x560ca2773f30) \n",
" B |\n",
"0 |1 |\n",
"---------|---------|\n",
" 0.5000 | 0.5000 |"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P_B = XP_B.sumOut('xi_B')\n",
"P_B"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "10324a9f-30c1-4bc2-8b92-f0e1e2cfd89f",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" | \n",
" C\n",
" |
\n",
"A | B | xi_C | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 3 |
\n",
"\n",
" 0 | \n",
" 0 | 0 | 0.3000 | 0.0000 | 0.0000 | 0.0000 |
\n",
"1 | 0.3000 | 0.0000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 0.2000 | 0.0000 |
\n",
"3 | 0.0000 | 0.0000 | 0.2000 | 0.0000 |
\n",
"\n",
" 1 | 0 | 0.3000 | 0.0000 | 0.0000 | 0.0000 |
\n",
"1 | 0.3000 | 0.0000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 0.0000 | 0.2000 |
\n",
"3 | 0.0000 | 0.0000 | 0.0000 | 0.2000 |
\n",
"\n",
" 1 | \n",
" 0 | 0 | 0.0000 | 0.3000 | 0.0000 | 0.0000 |
\n",
"1 | 0.0000 | 0.3000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 0.2000 | 0.0000 |
\n",
"3 | 0.0000 | 0.0000 | 0.2000 | 0.0000 |
\n",
"\n",
" 1 | 0 | 0.0000 | 0.3000 | 0.0000 | 0.0000 |
\n",
"1 | 0.0000 | 0.3000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 0.0000 | 0.2000 |
\n",
"3 | 0.0000 | 0.0000 | 0.0000 | 0.2000 |
\n",
"
"
],
"text/plain": [
"(pyAgrum.Potential@0x560ca22c0ed0) \n",
" || C |\n",
"xi_C |B |A ||0 |1 |2 |3 |\n",
"------|------|------||---------|---------|---------|---------|\n",
"0 |0 |0 || 0.3000 | 0.0000 | 0.0000 | 0.0000 |\n",
"1 |0 |0 || 0.3000 | 0.0000 | 0.0000 | 0.0000 |\n",
"2 |0 |0 || 0.0000 | 0.0000 | 0.2000 | 0.0000 |\n",
"3 |0 |0 || 0.0000 | 0.0000 | 0.2000 | 0.0000 |\n",
"0 |1 |0 || 0.3000 | 0.0000 | 0.0000 | 0.0000 |\n",
"1 |1 |0 || 0.3000 | 0.0000 | 0.0000 | 0.0000 |\n",
"[...4 more line(s) ...]\n",
"2 |0 |1 || 0.0000 | 0.0000 | 0.2000 | 0.0000 |\n",
"3 |0 |1 || 0.0000 | 0.0000 | 0.2000 | 0.0000 |\n",
"0 |1 |1 || 0.0000 | 0.3000 | 0.0000 | 0.0000 |\n",
"1 |1 |1 || 0.0000 | 0.3000 | 0.0000 | 0.0000 |\n",
"2 |1 |1 || 0.0000 | 0.0000 | 0.0000 | 0.2000 |\n",
"3 |1 |1 || 0.0000 | 0.0000 | 0.0000 | 0.2000 |"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"XP_C = (bn.cpt('C') * bn.cpt('xi_C')).reorganize(['C', 'xi_C', 'B', 'A'])\n",
"XP_C"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "7c488850-17d7-48d7-8ed5-6ee56642e99a",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" | \n",
" C\n",
" |
\n",
"A | B | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 3 |
\n",
"\n",
" 0 | 0 | 0.6000 | 0.0000 | 0.4000 | 0.0000 |
\n",
"1 | 0.6000 | 0.0000 | 0.0000 | 0.4000 |
\n",
"\n",
" 1 | 0 | 0.0000 | 0.6000 | 0.4000 | 0.0000 |
\n",
"1 | 0.0000 | 0.6000 | 0.0000 | 0.4000 |
\n",
"
"
],
"text/plain": [
"(pyAgrum.Potential@0x560ca2250be0) \n",
" || C |\n",
"B |A ||0 |1 |2 |3 |\n",
"------|------||---------|---------|---------|---------|\n",
"0 |0 || 0.6000 | 0.0000 | 0.4000 | 0.0000 |\n",
"1 |0 || 0.6000 | 0.0000 | 0.0000 | 0.4000 |\n",
"0 |1 || 0.0000 | 0.6000 | 0.4000 | 0.0000 |\n",
"1 |1 || 0.0000 | 0.6000 | 0.0000 | 0.4000 |"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P_C = XP_C.sumOut('xi_C')\n",
"P_C"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "72f4a5fa-fff2-44c3-b3a8-b6d5e2cb75d3",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" | \n",
" D\n",
" |
\n",
"B | xi_D | \n",
" 0 | \n",
" 1 | \n",
" 2 |
\n",
"\n",
" 0 | 0 | 0.5000 | 0.0000 | 0.0000 |
\n",
"1 | 0.0000 | 0.0000 | 0.3000 |
\n",
"2 | 0.1000 | 0.0000 | 0.0000 |
\n",
"3 | 0.0000 | 0.0000 | 0.1000 |
\n",
"\n",
" 1 | 0 | 0.0000 | 0.0000 | 0.5000 |
\n",
"1 | 0.0000 | 0.3000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 0.1000 |
\n",
"3 | 0.0000 | 0.0000 | 0.1000 |
\n",
"
"
],
"text/plain": [
"(pyAgrum.Potential@0x560ca23ece30) \n",
" || D |\n",
"xi_D |B ||0 |1 |2 |\n",
"------|------||---------|---------|---------|\n",
"0 |0 || 0.5000 | 0.0000 | 0.0000 |\n",
"1 |0 || 0.0000 | 0.0000 | 0.3000 |\n",
"2 |0 || 0.1000 | 0.0000 | 0.0000 |\n",
"3 |0 || 0.0000 | 0.0000 | 0.1000 |\n",
"0 |1 || 0.0000 | 0.0000 | 0.5000 |\n",
"1 |1 || 0.0000 | 0.3000 | 0.0000 |\n",
"2 |1 || 0.0000 | 0.0000 | 0.1000 |\n",
"3 |1 || 0.0000 | 0.0000 | 0.1000 |"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"XP_D = (bn.cpt('D') * bn.cpt('xi_D')).reorganize(['D', 'xi_D', 'B'])\n",
"XP_D"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "b9f9ead4-1b47-4ae8-bdfd-fcd3c90e1875",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" | \n",
" D\n",
" |
\n",
"B | \n",
" 0 | \n",
" 1 | \n",
" 2 |
\n",
"0 | 0.6000 | 0.0000 | 0.4000 |
\n",
"1 | 0.0000 | 0.3000 | 0.7000 |
\n",
"
"
],
"text/plain": [
"(pyAgrum.Potential@0x560ca266efe0) \n",
" || D |\n",
"B ||0 |1 |2 |\n",
"------||---------|---------|---------|\n",
"0 || 0.6000 | 0.0000 | 0.4000 |\n",
"1 || 0.0000 | 0.3000 | 0.7000 |"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P_D = XP_D.sumOut('xi_D')\n",
"P_D"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "9f0cd736-111e-4a56-945e-0a68ebff96f4",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" | \n",
" E\n",
" |
\n",
"C | D | xi_E | \n",
" 0 | \n",
" 1 | \n",
" 2 |
\n",
"\n",
" 0 | \n",
" 0 | 0 | 0.1000 | 0.0000 | 0.0000 |
\n",
"1 | 0.2000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 0.3000 |
\n",
"3 | 0.0000 | 0.0000 | 0.4000 |
\n",
"\n",
" 1 | 0 | 0.1000 | 0.0000 | 0.0000 |
\n",
"1 | 0.2000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 0.3000 |
\n",
"3 | 0.0000 | 0.0000 | 0.4000 |
\n",
"\n",
" 2 | 0 | 0.1000 | 0.0000 | 0.0000 |
\n",
"1 | 0.2000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 0.3000 |
\n",
"3 | 0.0000 | 0.0000 | 0.4000 |
\n",
"\n",
" 1 | \n",
" 0 | 0 | 0.0000 | 0.0000 | 0.1000 |
\n",
"1 | 0.0000 | 0.0000 | 0.2000 |
\n",
"2 | 0.0000 | 0.0000 | 0.3000 |
\n",
"3 | 0.0000 | 0.0000 | 0.4000 |
\n",
"\n",
" 1 | 0 | 0.0000 | 0.1000 | 0.0000 |
\n",
"1 | 0.0000 | 0.2000 | 0.0000 |
\n",
"2 | 0.0000 | 0.3000 | 0.0000 |
\n",
"3 | 0.0000 | 0.4000 | 0.0000 |
\n",
"\n",
" 2 | 0 | 0.0000 | 0.0000 | 0.1000 |
\n",
"1 | 0.0000 | 0.0000 | 0.2000 |
\n",
"2 | 0.0000 | 0.0000 | 0.3000 |
\n",
"3 | 0.0000 | 0.0000 | 0.4000 |
\n",
"\n",
" 2 | \n",
" 0 | 0 | 0.1000 | 0.0000 | 0.0000 |
\n",
"1 | 0.2000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 0.3000 |
\n",
"3 | 0.0000 | 0.0000 | 0.4000 |
\n",
"\n",
" 1 | 0 | 0.1000 | 0.0000 | 0.0000 |
\n",
"1 | 0.2000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 0.3000 |
\n",
"3 | 0.0000 | 0.0000 | 0.4000 |
\n",
"\n",
" 2 | 0 | 0.1000 | 0.0000 | 0.0000 |
\n",
"1 | 0.2000 | 0.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 0.3000 |
\n",
"3 | 0.0000 | 0.0000 | 0.4000 |
\n",
"\n",
" 3 | \n",
" 0 | 0 | 0.0000 | 0.0000 | 0.1000 |
\n",
"1 | 0.0000 | 0.0000 | 0.2000 |
\n",
"2 | 0.0000 | 0.0000 | 0.3000 |
\n",
"3 | 0.0000 | 0.0000 | 0.4000 |
\n",
"\n",
" 1 | 0 | 0.0000 | 0.1000 | 0.0000 |
\n",
"1 | 0.0000 | 0.2000 | 0.0000 |
\n",
"2 | 0.0000 | 0.3000 | 0.0000 |
\n",
"3 | 0.0000 | 0.4000 | 0.0000 |
\n",
"\n",
" 2 | 0 | 0.0000 | 0.0000 | 0.1000 |
\n",
"1 | 0.0000 | 0.0000 | 0.2000 |
\n",
"2 | 0.0000 | 0.0000 | 0.3000 |
\n",
"3 | 0.0000 | 0.0000 | 0.4000 |
\n",
"
"
],
"text/plain": [
"(pyAgrum.Potential@0x560ca2671170) \n",
" || E |\n",
"xi_E |D |C ||0 |1 |2 |\n",
"------|------|------||---------|---------|---------|\n",
"0 |0 |0 || 0.1000 | 0.0000 | 0.0000 |\n",
"1 |0 |0 || 0.2000 | 0.0000 | 0.0000 |\n",
"2 |0 |0 || 0.0000 | 0.0000 | 0.3000 |\n",
"3 |0 |0 || 0.0000 | 0.0000 | 0.4000 |\n",
"0 |1 |0 || 0.1000 | 0.0000 | 0.0000 |\n",
"1 |1 |0 || 0.2000 | 0.0000 | 0.0000 |\n",
"[...36 more line(s) ...]\n",
"2 |1 |3 || 0.0000 | 0.3000 | 0.0000 |\n",
"3 |1 |3 || 0.0000 | 0.4000 | 0.0000 |\n",
"0 |2 |3 || 0.0000 | 0.0000 | 0.1000 |\n",
"1 |2 |3 || 0.0000 | 0.0000 | 0.2000 |\n",
"2 |2 |3 || 0.0000 | 0.0000 | 0.3000 |\n",
"3 |2 |3 || 0.0000 | 0.0000 | 0.4000 |"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"XP_E = (bn.cpt('E') * bn.cpt('xi_E')).reorganize(['E', 'xi_E', 'D', 'C'])\n",
"XP_E"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "652829dc-f3b0-4f0d-84d9-3f2b4213c1d1",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" | \n",
" E\n",
" |
\n",
"C | D | \n",
" 0 | \n",
" 1 | \n",
" 2 |
\n",
"\n",
" 0 | 0 | 0.3000 | 0.0000 | 0.7000 |
\n",
"1 | 0.3000 | 0.0000 | 0.7000 |
\n",
"2 | 0.3000 | 0.0000 | 0.7000 |
\n",
"\n",
" 1 | 0 | 0.0000 | 0.0000 | 1.0000 |
\n",
"1 | 0.0000 | 1.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 1.0000 |
\n",
"\n",
" 2 | 0 | 0.3000 | 0.0000 | 0.7000 |
\n",
"1 | 0.3000 | 0.0000 | 0.7000 |
\n",
"2 | 0.3000 | 0.0000 | 0.7000 |
\n",
"\n",
" 3 | 0 | 0.0000 | 0.0000 | 1.0000 |
\n",
"1 | 0.0000 | 1.0000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 1.0000 |
\n",
"
"
],
"text/plain": [
"(pyAgrum.Potential@0x560ca277e7e0) \n",
" || E |\n",
"D |C ||0 |1 |2 |\n",
"------|------||---------|---------|---------|\n",
"0 |0 || 0.3000 | 0.0000 | 0.7000 |\n",
"1 |0 || 0.3000 | 0.0000 | 0.7000 |\n",
"2 |0 || 0.3000 | 0.0000 | 0.7000 |\n",
"0 |1 || 0.0000 | 0.0000 | 1.0000 |\n",
"1 |1 || 0.0000 | 1.0000 | 0.0000 |\n",
"2 |1 || 0.0000 | 0.0000 | 1.0000 |\n",
"0 |2 || 0.3000 | 0.0000 | 0.7000 |\n",
"1 |2 || 0.3000 | 0.0000 | 0.7000 |\n",
"2 |2 || 0.3000 | 0.0000 | 0.7000 |\n",
"0 |3 || 0.0000 | 0.0000 | 1.0000 |\n",
"1 |3 || 0.0000 | 1.0000 | 0.0000 |\n",
"2 |3 || 0.0000 | 0.0000 | 1.0000 |"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P_E = XP_E.sumOut('xi_E')\n",
"P_E"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "7cbebb79-5563-4eb7-98ba-d018e7b80149",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" | \n",
" F\n",
" |
\n",
"E | xi_F | \n",
" 0 | \n",
" 1 | \n",
" 2 |
\n",
"\n",
" 0 | 0 | 0.2000 | 0.0000 | 0.0000 |
\n",
"1 | 0.0000 | 0.3000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 0.3000 |
\n",
"3 | 0.0000 | 0.0000 | 0.2000 |
\n",
"\n",
" 1 | 0 | 0.2000 | 0.0000 | 0.0000 |
\n",
"1 | 0.0000 | 0.0000 | 0.3000 |
\n",
"2 | 0.0000 | 0.0000 | 0.3000 |
\n",
"3 | 0.0000 | 0.0000 | 0.2000 |
\n",
"\n",
" 2 | 0 | 0.2000 | 0.0000 | 0.0000 |
\n",
"1 | 0.0000 | 0.3000 | 0.0000 |
\n",
"2 | 0.0000 | 0.0000 | 0.3000 |
\n",
"3 | 0.0000 | 0.0000 | 0.2000 |
\n",
"
"
],
"text/plain": [
"(pyAgrum.Potential@0x560ca27744a0) \n",
" || F |\n",
"xi_F |E ||0 |1 |2 |\n",
"------|------||---------|---------|---------|\n",
"0 |0 || 0.2000 | 0.0000 | 0.0000 |\n",
"1 |0 || 0.0000 | 0.3000 | 0.0000 |\n",
"2 |0 || 0.0000 | 0.0000 | 0.3000 |\n",
"3 |0 || 0.0000 | 0.0000 | 0.2000 |\n",
"0 |1 || 0.2000 | 0.0000 | 0.0000 |\n",
"1 |1 || 0.0000 | 0.0000 | 0.3000 |\n",
"2 |1 || 0.0000 | 0.0000 | 0.3000 |\n",
"3 |1 || 0.0000 | 0.0000 | 0.2000 |\n",
"0 |2 || 0.2000 | 0.0000 | 0.0000 |\n",
"1 |2 || 0.0000 | 0.3000 | 0.0000 |\n",
"2 |2 || 0.0000 | 0.0000 | 0.3000 |\n",
"3 |2 || 0.0000 | 0.0000 | 0.2000 |"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"XP_F = (bn.cpt('F') * bn.cpt('xi_F')).reorganize(['F', 'xi_F', 'E'])\n",
"XP_F"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "75abf155-065e-4e64-8d9e-e4be6d805c70",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" | \n",
" F\n",
" |
\n",
"E | \n",
" 0 | \n",
" 1 | \n",
" 2 |
\n",
"0 | 0.2000 | 0.3000 | 0.5000 |
\n",
"1 | 0.2000 | 0.0000 | 0.8000 |
\n",
"2 | 0.2000 | 0.3000 | 0.5000 |
\n",
"
"
],
"text/plain": [
"(pyAgrum.Potential@0x560ca2772bb0) \n",
" || F |\n",
"E ||0 |1 |2 |\n",
"------||---------|---------|---------|\n",
"0 || 0.2000 | 0.3000 | 0.5000 |\n",
"1 || 0.2000 | 0.0000 | 0.8000 |\n",
"2 || 0.2000 | 0.3000 | 0.5000 |"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P_F = XP_F.sumOut('xi_F')\n",
"P_F"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6fbf660b-b933-4110-99bb-39177369b034",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}