Fn for rand. generation of ev.
Fn to gen new BNs
This commit is contained in:
parent
976470f6c4
commit
14c651dfa7
59
main.py
59
main.py
@ -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"]) == []
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user