Fn for rand. generation of ev.

Fn to gen new BNs
This commit is contained in:
BuildTools 2021-09-15 15:30:03 -05:00
parent 976470f6c4
commit 14c651dfa7
2 changed files with 55 additions and 4 deletions

View File

59
main.py
View File

@ -5,23 +5,74 @@
import json
import random
from collections import defaultdict
import math
import sys
import os
#pwd = os.getcwd()
#sys.path.append(pwd +'/gen-bn/')
#sys.path.append("./gen-bn")
import gen_bn.gen_bn
#from collections import defaultdict
def main():
#Generate a new BN. Specify type and number of nodes in network
gen_json("dag", 5)
#Get our BN
bayes_net = import_bayes()
ev = {"0" : True, "4" : True}
W = likelihood_weighting(1, ev, bayes_net, 10)
#Generate random evidence
E = gen_ev(bayes_net)
#Get W from LW
W = likelihood_weighting(1, E, bayes_net, 10)
#Print if desired
print()
for key, value in W.items():
print(key, ' : ', value)
#Generate a new BN.
#Input: Type ("dag", or "polytree")
#Input: Number of nodes in the network
def gen_json(type, num_nodes):
os.chdir("./gen_bn")
os.system('python gen_bn.py' + ' ' + type + ' ' + str(num_nodes))
#Import the BN from the json
def import_bayes():
with open ("gen-bn/bn.json") as json_file:
with open ("gen_bn/bn.json") as json_file:
bayes_json = json.load(json_file)
json_file.close()
return bayes_json
#Generate a random set of evidence
def gen_ev(bayes_net):
total_nodes = len(bayes_net)
#Arbitrarily, let's only generate total_nodes/2 (rounded up) evidence variables at most, but at least 1
num_ev = random.randint(1, int(math.ceil(total_nodes/2)))
fixed_ev = []
#Go through and generate nodes that will be fixed
for i in range(num_ev):
fixed_var = random.randint(0, total_nodes-1)
if fixed_var not in fixed_ev:
fixed_ev.append(fixed_var)
#Now generate random values for the ev
#Randomly generate a double. >=0.5 will be "True", <0.5 will be "False"
E = {}
for i in fixed_ev:
val_p = random.random()
if val_p >= 0.5:
E[str(i)] = True
else:
E[str(i)] = False
return E
#Checks if node has parents
def is_root(node, BN):
return (BN[node]["parents"]) == []