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 json
|
||||||
import random
|
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():
|
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()
|
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()
|
print()
|
||||||
for key, value in W.items():
|
for key, value in W.items():
|
||||||
print(key, ' : ', value)
|
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
|
#Import the BN from the json
|
||||||
def import_bayes():
|
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)
|
bayes_json = json.load(json_file)
|
||||||
json_file.close()
|
json_file.close()
|
||||||
return bayes_json
|
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
|
#Checks if node has parents
|
||||||
def is_root(node, BN):
|
def is_root(node, BN):
|
||||||
return (BN[node]["parents"]) == []
|
return (BN[node]["parents"]) == []
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user