{ "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": [ "\n", "\n", "G\n", "\n", "\n", "xi_D\n", "\n", "\n", "xi_D\n", "\n", "\n", "\n", "\n", "\n", "D\n", "\n", "\n", "D\n", "\n", "\n", "\n", "\n", "\n", "xi_D->D\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "xi_A\n", "\n", "\n", "xi_A\n", "\n", "\n", "\n", "\n", "\n", "A\n", "\n", "\n", "A\n", "\n", "\n", "\n", "\n", "\n", "xi_A->A\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "E\n", "\n", "\n", "E\n", "\n", "\n", "\n", "\n", "\n", "F\n", "\n", "\n", "F\n", "\n", "\n", "\n", "\n", "\n", "E->F\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "B\n", "\n", "\n", "B\n", "\n", "\n", "\n", "\n", "\n", "B->D\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "C\n", "\n", "\n", "C\n", "\n", "\n", "\n", "\n", "\n", "B->C\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "A->C\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "xi_C\n", "\n", "\n", "xi_C\n", "\n", "\n", "\n", "\n", "\n", "xi_C->C\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "D->E\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "xi_F\n", "\n", "\n", "xi_F\n", "\n", "\n", "\n", "\n", "\n", "xi_F->F\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "C->E\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "xi_E\n", "\n", "\n", "xi_E\n", "\n", "\n", "\n", "\n", "\n", "xi_E->E\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "xi_B\n", "\n", "\n", "xi_B\n", "\n", "\n", "\n", "\n", "\n", "xi_B->B\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "" ], "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", " \n", "\n", "\n", "\n", "\n", "\n", "
A
\n", "
xi_A
\n", "
0
\n", "
1
0
1.00000.0000
1
1.00000.0000
2
0.00001.0000
3
0.00001.0000
" ], "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", " \n", "\n", "\n", "\n", "\n", "\n", "
B
\n", "
xi_B
\n", "
0
\n", "
1
0
0.00001.0000
1
1.00000.0000
2
0.00001.0000
3
1.00000.0000
" ], "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", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
C
\n", "
A
B
xi_C
\n", "
0
\n", "
1
\n", "
2
\n", "
3
\n", "
0
\n", "
0
0
1.00000.00000.00000.0000
1
1.00000.00000.00000.0000
2
0.00000.00001.00000.0000
3
0.00000.00001.00000.0000
\n", "
1
0
1.00000.00000.00000.0000
1
1.00000.00000.00000.0000
2
0.00000.00000.00001.0000
3
0.00000.00000.00001.0000
\n", "
1
\n", "
0
0
0.00001.00000.00000.0000
1
0.00001.00000.00000.0000
2
0.00000.00001.00000.0000
3
0.00000.00001.00000.0000
\n", "
1
0
0.00001.00000.00000.0000
1
0.00001.00000.00000.0000
2
0.00000.00000.00001.0000
3
0.00000.00000.00001.0000
" ], "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", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
D
\n", "
B
xi_D
\n", "
0
\n", "
1
\n", "
2
\n", "
0
0
1.00000.00000.0000
1
0.00000.00001.0000
2
1.00000.00000.0000
3
0.00000.00001.0000
\n", "
1
0
0.00000.00001.0000
1
0.00001.00000.0000
2
0.00000.00001.0000
3
0.00000.00001.0000
" ], "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", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
E
\n", "
C
D
xi_E
\n", "
0
\n", "
1
\n", "
2
\n", "
0
\n", "
0
0
1.00000.00000.0000
1
1.00000.00000.0000
2
0.00000.00001.0000
3
0.00000.00001.0000
\n", "
1
0
1.00000.00000.0000
1
1.00000.00000.0000
2
0.00000.00001.0000
3
0.00000.00001.0000
\n", "
2
0
1.00000.00000.0000
1
1.00000.00000.0000
2
0.00000.00001.0000
3
0.00000.00001.0000
\n", "
1
\n", "
0
0
0.00000.00001.0000
1
0.00000.00001.0000
2
0.00000.00001.0000
3
0.00000.00001.0000
\n", "
1
0
0.00001.00000.0000
1
0.00001.00000.0000
2
0.00001.00000.0000
3
0.00001.00000.0000
\n", "
2
0
0.00000.00001.0000
1
0.00000.00001.0000
2
0.00000.00001.0000
3
0.00000.00001.0000
\n", "
2
\n", "
0
0
1.00000.00000.0000
1
1.00000.00000.0000
2
0.00000.00001.0000
3
0.00000.00001.0000
\n", "
1
0
1.00000.00000.0000
1
1.00000.00000.0000
2
0.00000.00001.0000
3
0.00000.00001.0000
\n", "
2
0
1.00000.00000.0000
1
1.00000.00000.0000
2
0.00000.00001.0000
3
0.00000.00001.0000
\n", "
3
\n", "
0
0
0.00000.00001.0000
1
0.00000.00001.0000
2
0.00000.00001.0000
3
0.00000.00001.0000
\n", "
1
0
0.00001.00000.0000
1
0.00001.00000.0000
2
0.00001.00000.0000
3
0.00001.00000.0000
\n", "
2
0
0.00000.00001.0000
1
0.00000.00001.0000
2
0.00000.00001.0000
3
0.00000.00001.0000
" ], "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", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
F
\n", "
E
xi_F
\n", "
0
\n", "
1
\n", "
2
\n", "
0
0
1.00000.00000.0000
1
0.00001.00000.0000
2
0.00000.00001.0000
3
0.00000.00001.0000
\n", "
1
0
1.00000.00000.0000
1
0.00000.00001.0000
2
0.00000.00001.0000
3
0.00000.00001.0000
\n", "
2
0
1.00000.00000.0000
1
0.00001.00000.0000
2
0.00000.00001.0000
3
0.00000.00001.0000
" ], "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", " \n", "\n", "\n", "\n", "
xi_A
\n", "
A
\n", "
0
\n", "
1
\n", "
2
\n", "
3
0
0.20000.10000.00000.0000
1
0.00000.00000.30000.4000
" ], "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", " \n", "\n", "\n", "
A
\n", "
0
\n", "
1
0.30000.7000
" ], "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", " \n", "\n", "\n", "\n", "
xi_B
\n", "
B
\n", "
0
\n", "
1
\n", "
2
\n", "
3
0
0.00000.40000.00000.1000
1
0.20000.00000.30000.0000
" ], "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", " \n", "\n", "\n", "
B
\n", "
0
\n", "
1
0.50000.5000
" ], "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", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
C
\n", "
A
B
xi_C
\n", "
0
\n", "
1
\n", "
2
\n", "
3
\n", "
0
\n", "
0
0
0.30000.00000.00000.0000
1
0.30000.00000.00000.0000
2
0.00000.00000.20000.0000
3
0.00000.00000.20000.0000
\n", "
1
0
0.30000.00000.00000.0000
1
0.30000.00000.00000.0000
2
0.00000.00000.00000.2000
3
0.00000.00000.00000.2000
\n", "
1
\n", "
0
0
0.00000.30000.00000.0000
1
0.00000.30000.00000.0000
2
0.00000.00000.20000.0000
3
0.00000.00000.20000.0000
\n", "
1
0
0.00000.30000.00000.0000
1
0.00000.30000.00000.0000
2
0.00000.00000.00000.2000
3
0.00000.00000.00000.2000
" ], "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", " \n", "\n", "\n", "\n", "\n", "\n", "
C
\n", "
A
B
\n", "
0
\n", "
1
\n", "
2
\n", "
3
\n", "
0
0
0.60000.00000.40000.0000
1
0.60000.00000.00000.4000
\n", "
1
0
0.00000.60000.40000.0000
1
0.00000.60000.00000.4000
" ], "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", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
D
\n", "
B
xi_D
\n", "
0
\n", "
1
\n", "
2
\n", "
0
0
0.50000.00000.0000
1
0.00000.00000.3000
2
0.10000.00000.0000
3
0.00000.00000.1000
\n", "
1
0
0.00000.00000.5000
1
0.00000.30000.0000
2
0.00000.00000.1000
3
0.00000.00000.1000
" ], "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", " \n", "\n", "\n", "\n", "
D
\n", "
B
\n", "
0
\n", "
1
\n", "
2
0
0.60000.00000.4000
1
0.00000.30000.7000
" ], "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", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
E
\n", "
C
D
xi_E
\n", "
0
\n", "
1
\n", "
2
\n", "
0
\n", "
0
0
0.10000.00000.0000
1
0.20000.00000.0000
2
0.00000.00000.3000
3
0.00000.00000.4000
\n", "
1
0
0.10000.00000.0000
1
0.20000.00000.0000
2
0.00000.00000.3000
3
0.00000.00000.4000
\n", "
2
0
0.10000.00000.0000
1
0.20000.00000.0000
2
0.00000.00000.3000
3
0.00000.00000.4000
\n", "
1
\n", "
0
0
0.00000.00000.1000
1
0.00000.00000.2000
2
0.00000.00000.3000
3
0.00000.00000.4000
\n", "
1
0
0.00000.10000.0000
1
0.00000.20000.0000
2
0.00000.30000.0000
3
0.00000.40000.0000
\n", "
2
0
0.00000.00000.1000
1
0.00000.00000.2000
2
0.00000.00000.3000
3
0.00000.00000.4000
\n", "
2
\n", "
0
0
0.10000.00000.0000
1
0.20000.00000.0000
2
0.00000.00000.3000
3
0.00000.00000.4000
\n", "
1
0
0.10000.00000.0000
1
0.20000.00000.0000
2
0.00000.00000.3000
3
0.00000.00000.4000
\n", "
2
0
0.10000.00000.0000
1
0.20000.00000.0000
2
0.00000.00000.3000
3
0.00000.00000.4000
\n", "
3
\n", "
0
0
0.00000.00000.1000
1
0.00000.00000.2000
2
0.00000.00000.3000
3
0.00000.00000.4000
\n", "
1
0
0.00000.10000.0000
1
0.00000.20000.0000
2
0.00000.30000.0000
3
0.00000.40000.0000
\n", "
2
0
0.00000.00000.1000
1
0.00000.00000.2000
2
0.00000.00000.3000
3
0.00000.00000.4000
" ], "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", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
E
\n", "
C
D
\n", "
0
\n", "
1
\n", "
2
\n", "
0
0
0.30000.00000.7000
1
0.30000.00000.7000
2
0.30000.00000.7000
\n", "
1
0
0.00000.00001.0000
1
0.00001.00000.0000
2
0.00000.00001.0000
\n", "
2
0
0.30000.00000.7000
1
0.30000.00000.7000
2
0.30000.00000.7000
\n", "
3
0
0.00000.00001.0000
1
0.00001.00000.0000
2
0.00000.00001.0000
" ], "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", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
F
\n", "
E
xi_F
\n", "
0
\n", "
1
\n", "
2
\n", "
0
0
0.20000.00000.0000
1
0.00000.30000.0000
2
0.00000.00000.3000
3
0.00000.00000.2000
\n", "
1
0
0.20000.00000.0000
1
0.00000.00000.3000
2
0.00000.00000.3000
3
0.00000.00000.2000
\n", "
2
0
0.20000.00000.0000
1
0.00000.30000.0000
2
0.00000.00000.3000
3
0.00000.00000.2000
" ], "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", " \n", "\n", "\n", "\n", "\n", "
F
\n", "
E
\n", "
0
\n", "
1
\n", "
2
0
0.20000.30000.5000
1
0.20000.00000.8000
2
0.20000.30000.5000
" ], "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 }