cplint on SWISH is a web application for probabilistic logic programming  About  Help  LIFTCOVER-Help  PHIL-Help  PASCAL-Help  Credits  Dismiss

Latest: Threads and Python in LIFTCOVER, course, PHIL examples, book

  
    ? users online
  • Logout
    • Open hangout
    • Open chat for current file
<div class="notebook">

<div class="nb-cell markdown">
# Epidemic

In this section we consider a program which models the fact that if somebody has the flu and the climate is cold, there is the possibility that an epidemic or a pandemic arises. We are uncertain about whether the climate is cold but we know for sure that David and Robert have the flu.

### Writing the program step by step
The rule that we want to write is the one which  states that, if somebody has the flu and the climate is cold, an epidemic arises with 60% probability, a pandemic arises with 30% probability, whereas we have a 10% probability that neither an epidemic nor a pandemic arises. We can write
==
epidemic : 0.6; pandemic : 0.3; null: 0.1 :- flu(_), cold.
==
As we said in Section [Logic Program with Annotated Disjunction](tutorial/lpad.swinb), the =|null|= atom can be implicit. 
Therefore the previous rule, without changing its meaning, can be written
==
epidemic : 0.6; pandemic : 0.3 :- flu(_), cold.
==
The following probabilistic fact says that the weather is cold with a 70% probability. Note that the =|null|= atom is implicit here as well.
==
cold : 0.7.
==
Now we assert that David and Robert have the flu.
==
flu(david).
flu(robert).
==
</div>

<div class="nb-cell markdown">
### Full program with the Prolog editor

The full program of the example is show below.
</div>

<div class="nb-cell program prolog">
% load the 'pita' library to perform inference
:- use_module(library(pita)).
:- pita.
% allows to create graphical results
:- if(current_predicate(use_rendering/1)).
:- use_rendering(c3).
:- endif.
% to be written before the program
:- begin_lpad.

epidemic : 0.6; pandemic : 0.3 :- flu(_), cold.
cold : 0.7.
flu(david).
flu(robert).
% to be written after the program
:- end_lpad.
</div>

<div class="nb-cell markdown">
What is the probability that an epidemic arises? To know it we just have to submit the following query.
</div>

<div class="nb-cell query">
prob(epidemic, P).
</div>

<div class="nb-cell markdown">
Let us see the histogram of the previous query
</div>

<div class="nb-cell query">
prob_bar(epidemic, P).
</div>

<div class="nb-cell markdown">
This example shows that conclusions from different groundings of a rule are combined with a noisy or rule: the probability of an epidemic is obtained by combining with noisy or the conclusions of the two groundings of the rule where the only variable is replaced by David or Robert. So the probability of an epidemic if =cold= is true is 0.6+0.6-0.6*0.6=84. Since =cold= is also uncertain, the overall probability is 0.84*0.7=0.588.

--
Complete example: [epidemic.pl](example/inference/epidemic.pl)

--
Complete example with the LPAD editor: [epidemic.cpl](example/inference/epidemic.cpl)

--
- Reference: E. Bellodi and F. Riguzzi. _Expectation Maximization over binary decision diagrams for probabilistic logic programs_. Intelligent Data Analysis, 17(2):343-363, 2013.
</div>

<div class="nb-cell markdown">
--
[Back to Tutorial](tutorial/tutorial.swinb)
</div>

</div>