# This example is based on http://www.heatonresearch.com/
# Encog(tm) Java Examples v3.3
# http://www.heatonresearch.com/encog/
# https://github.com/encog/encog-java-examples
# http://www.apache.org/licenses/LICENSE-2.0


from org.encog.ml.data  import MLDataSet
from org.encog.ml.data.basic import BasicMLDataSet
from org.encog.ml.bayesian import BayesianNetwork,BayesianEvent
from org.encog.ml.bayesian.training import TrainBayesian;
from org.encog.ml.bayesian.training import BayesianInit;

DATA=[[1, 0, 0],[1, 1, 1],[0, 0, 1],[1, 1, 1], [0, 0, 0],
      [0, 1, 1],[1, 1, 1],[0, 0, 0],[1, 1, 1],[0, 0, 0]]

net=BayesianNetwork()
data=BasicMLDataSet(DATA,None)
net.createEvent("x1")
net.createEvent("x2")
net.createEvent("x3")
net.finalizeStructure()

train=TrainBayesian(net,data,10)
train.setInitNetwork(BayesianInit.InitEmpty)
train.iteration()

p=net.performQuery("P(+x2|+x1)") #  0.71
print "x2 probability : ",net.getEvent("x2").getTable().findLine(1, [1])
print "Calculated P(+x2|+x1): ", p
print "Final network structure: ", net.toString()
