Esempio n. 1
0
    def _init_BN(self, BNName, BNnodesdef):
        BNnodes = {}
        BNconnections = []
        BN = BNet(BNName)

        # Save the nodesdef for future use (saving)
        self._BNDef = BNnodesdef

        for node in BNnodesdef:
            (nodename, isdiscrete, numstates, leafnode) = node
            BNnodes[nodename] = BN.add_v(BVertex(nodename, isdiscrete, numstates))

        # TODO: Find a way to improve this and avoid to have to loop a
        # second time
        # reason is because BNnodes[leafnode] is not sure to be there when
        # going through the first loop

        for node in BNnodesdef:
            (nodename, isdiscrete, numstates, leafnode) = node
            if type(leafnode) == type([]):
                for r in leafnode:
                    if r != None:
                        BNconnections.append((BNnodes[nodename], BNnodes[r]))
            elif leafnode != None:
                BNconnections.append((BNnodes[nodename], BNnodes[leafnode]))
            else:
                #do nothing
                pass

        for ep in BNconnections:
            BN.add_e(DirEdge(len(BN.e), *ep))

        # Ok our Bnet has been created, let's save it in the controller
        self._BN = BN

        # Let's not forget to initialize the distribution
        self._BN.InitDistributions()
Esempio n. 2
0
from OpenBayes import BNet, BVertex, DirEdge, JoinTree

network = BNet('Asia Bayesian Network')

# Create a discrete node for all nodes with 2 states
visit_to_asia = network.add_v(BVertex('Visit to Asia', True, 2))
smoking = network.add_v(BVertex('Smoking', True, 2))
tuberculosis = network.add_v(BVertex('Tuberculosis', True, 2))
lung_cancer = network.add_v(BVertex('Lung Cancer', True, 2))
bronchitis = network.add_v(BVertex('Bronchitis', True, 2))
tub_or_cancer = network.add_v(BVertex('Tuberculosis or Cancer', True, 2))
xray_result = network.add_v(BVertex('X-Ray Result', True, 2))
dyspnea = network.add_v(BVertex('Dyspnea', True, 2))

# Connect the nodes

# V -> T
network.add_e(DirEdge(len(network.e), visit_to_asia, tuberculosis))

# T -> TC
network.add_e(DirEdge(len(network.e), tuberculosis, tub_or_cancer))

# TC -> X
network.add_e(DirEdge(len(network.e), tub_or_cancer, xray_result))

# TC -> D
network.add_e(DirEdge(len(network.e), tub_or_cancer, dyspnea))

# S -> LC
network.add_e(DirEdge(len(network.e), smoking, lung_cancer))
Esempio n. 3
0
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."""

import OpenBayes
from OpenBayes import BNet, BVertex, DirEdge, JoinTree

import logging

logging.getLogger(__name__).setLevel(logging.CRITICAL)
logging.getLogger("").setLevel(logging.CRITICAL)

import numpy

network = BNet('Number Guessing')

# Create a discrete node for all nodes with 2 states
numbers = network.add_v(BVertex('numbers', True, 10))
bigger_3 = network.add_v(BVertex('Is your number bigger than 3?', True, 2))
bigger_5 = network.add_v(BVertex('bigger_5', True, 2))
IsTheNumberBiggerThan7 = network.add_v(
    BVertex('IsTheNumberBiggerThan7', True, 2))
prime = network.add_v(BVertex('prime', True, 2))
even = network.add_v(BVertex('even', True, 2))
odd = network.add_v(BVertex('odd', True, 2))

network.add_e(DirEdge(len(network.e), numbers, bigger_3))
network.add_e(DirEdge(len(network.e), numbers, bigger_5))
network.add_e(DirEdge(len(network.e), numbers, IsTheNumberBiggerThan7))
network.add_e(DirEdge(len(network.e), numbers, even))