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()
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))
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))