コード例 #1
0
ファイル: SumProduct.py プロジェクト: jadenstock/SumProduct
					message[BN.vars[var].index(vals_assignment[tgt_index])] += factor.funct(vals_assignment) * prod_value

				incoming_messages[var][edges[var].index(factor)] = np.array(copy.copy(message)) #put the message in the "queue"

		#move messages from incoming_messages to states
		for var in incoming_messages:
			states[var] = copy.copy(incoming_messages[var])
			for vect in states[var]: #normalize the vectors
				vect = (1.0/sum(vect))*vect
			
	#our final states are just a product of all of the state vectors for each var
	distributions = {}
	for var in states:
		dist = np.array([1 for _ in xrange(len(BN.vars[var]))])
		for vect in states[var]:
			dist = dist * vect
		distributions[var] = [x/float(sum(dist)) for x in dist]

	#write our results to a file
	f = open(output, "w")
	for var in BN.vars_in_order:
		f.write("{} ".format(var))
		for n in distributions[var]:
			f.write("{} ".format(n))
		f.write("\n")
	f.close()

if __name__== '__main__':
	net_name = sys.argv[1]
	net = BNet(net_name)
	sum_product(net, output = "{}-results.txt".format(net_name.replace(".bif", "")))