def setUp(self): # Create BayesNet self.bn = BayesianNetwork() # Create Nodes weather0 = DiscreteNode("Weather0", ["Sun", "Rain"]) weather = DiscreteNode("Weather", ["Sun", "Rain"]) ice_cream_eaten = DiscreteNode("Ice Cream Eaten", [True, False]) # Add nodes self.bn.add_node(weather0) self.bn.add_node(weather) self.bn.add_node(ice_cream_eaten) # Add edges self.bn.add_edge(weather, ice_cream_eaten) self.bn.add_edge(weather0, weather) # Set probabilities cpt_weather0 = numpy.array([.6, .4]) weather0.set_probability_table(cpt_weather0, [weather0]) cpt_weather = numpy.array([[.7, .5], [.3, .5]]) weather.set_probability_table(cpt_weather, [weather0, weather]) ice_cream_eaten.set_probability(.9, [(ice_cream_eaten, True), (weather, "Sun")]) ice_cream_eaten.set_probability(.1, [(ice_cream_eaten, False), (weather, "Sun")]) ice_cream_eaten.set_probability(.2, [(ice_cream_eaten, True), (weather, "Rain")]) ice_cream_eaten.set_probability(.8, [(ice_cream_eaten, False), (weather, "Rain")])
def setUp(self): # Create BayesNet self.bn = BayesianNetwork() # Create Nodes weather0 = DiscreteNode("Weather0", ["Sun", "Rain"]) weather = DiscreteNode("Weather", ["Sun", "Rain"]) ice_cream_eaten = DiscreteNode("Ice Cream Eaten", [True, False]) # Add nodes self.bn.add_node(weather0) self.bn.add_node(weather) self.bn.add_node(ice_cream_eaten) # Add edges self.bn.add_edge(weather, ice_cream_eaten) self.bn.add_edge(weather0, weather) # Set probabilities cpt_weather0 = numpy.array([0.6, 0.4]) weather0.set_probability_table(cpt_weather0, [weather0]) cpt_weather = numpy.array([[0.7, 0.5], [0.3, 0.5]]) weather.set_probability_table(cpt_weather, [weather0, weather]) ice_cream_eaten.set_probability(0.9, [(ice_cream_eaten, True), (weather, "Sun")]) ice_cream_eaten.set_probability(0.1, [(ice_cream_eaten, False), (weather, "Sun")]) ice_cream_eaten.set_probability(0.2, [(ice_cream_eaten, True), (weather, "Rain")]) ice_cream_eaten.set_probability(0.8, [(ice_cream_eaten, False), (weather, "Rain")])
bdn.add_edge(prize, startup) bdn.add_edge(startup, income) bdn.add_edge(startup, costStartup) bdn.add_edge(prize, income) bdn.add_edge(income, benefit) costut = numpy.array([-50000, 0]) cost.set_utility_table(costut, [education]) benefitut = numpy.array([100000, 200000, 500000]) benefit.set_utility_table(benefitut, [income]) startuput = numpy.array([-20000, 0]) costStartup.set_utility_table(startuput, [startup]) income.set_probability(0.1, [(income, "low"), (startup, "do startUp"), (prize, "no prize")]) income.set_probability(0.2, [(income, "low"), (startup, "no startUp"), (prize, "no prize")]) income.set_probability(0.005, [(income, "low"), (startup, "do startUp"), (prize, "prize")]) income.set_probability(0.005, [(income, "low"), (startup, "no startUp"), (prize, "prize")]) income.set_probability(0.5, [(income, "average"), (startup, "do startUp"), (prize, "no prize")]) income.set_probability(0.6, [(income, "average"), (startup, "no startUp"), (prize, "no prize")]) income.set_probability(0.005, [(income, "average"), (startup, "do startUp"), (prize, "prize")]) income.set_probability(0.015, [(income, "average"), (startup, "no startUp"), (prize, "prize")]) income.set_probability(0.4, [(income, "high"), (startup, "do startUp"),
alarm = DiscreteNode("Alarm", ["Ringing", "Silent","Kaputt"]) earthquake = DiscreteNode("Earthquake", ["Shaking", "Calm"]) john_calls = DiscreteNode("John calls", ["Calling", "Not Calling"]) mary_calls = DiscreteNode("Mary calls", ["Calling", "Not Calling"]) bn.add_node(burglary) bn.add_node(alarm) bn.add_node(earthquake) bn.add_node(john_calls) bn.add_node(mary_calls) bn.add_edge(burglary,alarm) bn.add_edge(earthquake, alarm) bn.add_edge(alarm, john_calls) bn.add_edge(alarm, mary_calls) burglary.set_probability(0.2,[(burglary,"Intruder")]) alarm.set_probability(0.1,[(alarm,"Ringing"),(burglary,"Safe"),(earthquake,"Calm")]) cpt = numpy.array([[0.1,0.9],[0.5,0.5],[0.4,0.6]]) john_calls.set_probability_table(cpt, [alarm, john_calls]) print john_calls.is_valid() print alarm.is_valid() bn.draw()
# Add edges to show dependencies bn.add_edge(burglary,alarm) bn.add_edge(earthquake, alarm) bn.add_edge(alarm, john_calls) bn.add_edge(alarm, baum_calls) #create probability tables and set them in the node cpt_burglary = numpy.array([0.001,0.999]) burglary.set_probability_table(cpt_burglary,[burglary]) cpt_earthquake = numpy.array([0.002,0.998]) earthquake.set_probability_table(cpt_earthquake,[earthquake]) #another possibility to set probabilities alarm.set_probability(0.95,[(alarm,"Ringing"),(burglary,"Intruder"),(earthquake,"Shaking")]) alarm.set_probability(0.05,[(alarm,"Silent"),(burglary,"Intruder"),(earthquake,"Shaking")]) alarm.set_probability(0.29,[(alarm,"Ringing"),(burglary,"Safe"),(earthquake,"Shaking")]) alarm.set_probability(0.71,[(alarm,"Silent"),(burglary,"Safe"),(earthquake,"Shaking")]) alarm.set_probability(0.94,[(alarm,"Ringing"),(burglary,"Intruder"),(earthquake,"Calm")]) alarm.set_probability(0.06,[(alarm,"Silent"),(burglary,"Intruder"),(earthquake,"Calm")]) alarm.set_probability(0.001,[(alarm,"Ringing"),(burglary,"Safe"),(earthquake,"Calm")]) alarm.set_probability(0.999,[(alarm,"Silent"),(burglary,"Safe"),(earthquake,"Calm")]) baum_calls.set_probability(0.9,[(alarm,"Ringing"),(baum_calls,"Calling")]) baum_calls.set_probability(0.1,[(alarm,"Ringing"),(baum_calls,"Not Calling")]) baum_calls.set_probability(0.05,[(alarm,"Silent"),(baum_calls,"Calling")]) baum_calls.set_probability(0.95,[(alarm,"Silent"),(baum_calls,"Not Calling")]) john_calls.set_probability(0.7,[(alarm,"Ringing"),(john_calls,"Calling")]) john_calls.set_probability(0.3,[(alarm,"Ringing"),(john_calls,"Not Calling")])
bn = BayesianNetwork() burglary = DiscreteNode("Burglary", ["Intruder", "Safe"]) alarm = DiscreteNode("Alarm", ["Ringing", "Silent", "Kaputt"]) earthquake = DiscreteNode("Earthquake", ["Shaking", "Calm"]) john_calls = DiscreteNode("John calls", ["Calling", "Not Calling"]) mary_calls = DiscreteNode("Mary calls", ["Calling", "Not Calling"]) bn.add_node(burglary) bn.add_node(alarm) bn.add_node(earthquake) bn.add_node(john_calls) bn.add_node(mary_calls) bn.add_edge(burglary, alarm) bn.add_edge(earthquake, alarm) bn.add_edge(alarm, john_calls) bn.add_edge(alarm, mary_calls) burglary.set_probability(0.2, [(burglary, "Intruder")]) alarm.set_probability(0.1, [(alarm, "Ringing"), (burglary, "Safe"), (earthquake, "Calm")]) cpt = numpy.array([[0.1, 0.9], [0.5, 0.5], [0.4, 0.6]]) john_calls.set_probability_table(cpt, [alarm, john_calls]) print john_calls.is_valid() print alarm.is_valid() bn.draw()
bdn.add_edge(prize, startup) bdn.add_edge(startup, income) bdn.add_edge(startup, costStartup) bdn.add_edge(prize, income) bdn.add_edge(income, benefit) costut=numpy.array([-50000, 0]) cost.set_utility_table(costut, [education]) benefitut=numpy.array([100000,200000,500000]) benefit.set_utility_table(benefitut,[income]) startuput=numpy.array([-20000,0]) costStartup.set_utility_table(startuput,[startup]) income.set_probability(0.1,[(income,"low"),(startup,"do startUp"), (prize,"no prize")]) income.set_probability(0.2,[(income,"low"),(startup,"no startUp"), (prize,"no prize")]) income.set_probability(0.005,[(income,"low"),(startup,"do startUp"), (prize,"prize")]) income.set_probability(0.005,[(income,"low"),(startup,"no startUp"), (prize,"prize")]) income.set_probability(0.5,[(income,"average"),(startup,"do startUp"), (prize,"no prize")]) income.set_probability(0.6,[(income,"average"),(startup,"no startUp"), (prize,"no prize")]) income.set_probability(0.005,[(income,"average"),(startup,"do startUp"), (prize,"prize")]) income.set_probability(0.015,[(income,"average"),(startup,"no startUp"), (prize,"prize")]) income.set_probability(0.4,[(income,"high"),(startup,"do startUp"), (prize,"no prize")]) income.set_probability(0.2,[(income,"high"),(startup,"no startUp"), (prize,"no prize")]) income.set_probability(0.99,[(income,"high"),(startup,"do startUp"), (prize,"prize")]) income.set_probability(0.8,[(income,"high"),(startup,"no startUp"), (prize,"prize")]) prize.set_probability(0.0000001,[(prize,"prize"),(education,"no Phd")]) prize.set_probability(0.001,[(prize,"prize"),(education,"do Phd")]) prize.set_probability(0.9999999,[(prize,"no prize"),(education,"no Phd")])