Differences

This shows you the differences between two versions of the page.

Link to this comparison view

en:dydaktyka:problog:lab2 [2017/06/04 14:54]
msl [Zombie Epidemics]
en:dydaktyka:problog:lab2 [2019/06/27 15:49]
Line 1: Line 1:
-====== Probabilistic Programming — Probabilistic Graphs ====== 
- 
-Graph structures are commonly used to represent knowledge across various domains and problems. It shouldn'​t be surprising that they are also present in many probabilistic models. In this class we will introduce probabilistic graphs --- weighted graphs with weights representing probabilities. Next, there will be very short introduction to decision theory in Problog. Finally we will try to escape from zombies which clearly shows usefulness of this class. 
-  
-===== Probabilistic Graphs ===== 
- 
-Probabilistic graph looks like a normal weighted graph with weights being real numbers from range ''<​0,​1>'',​ like in the graph below: 
- 
-{{ :​en:​dydaktyka:​problog:​probabilistic_graph.png?​direct&​500 |}} 
- 
-You can easily represent this graph in Problog as a list of edges: 
-<code prolog> 
-0.8::​edge(1,​2). 
-0.2::​edge(1,​3). 
-0.2::​edge(1,​4). 
-0.2::​edge(2,​3). 
-0.7::​edge(3,​5). 
-0.3::​edge(4.5). 
-</​code>​ 
- 
-The weight should be interpreted as a probability that transition from node to node (from state to state?) succeeds. ​ 
- 
-We can now write a rule (the same as in classical Prolog) to check if there is a path in a graph, i.e. 
-<code prolog> 
-% there is a direct path between the nodes, if there is an edge between those nodes 
-path(A,B) :- edge(A,B). 
-% there is a indirect path between the nodes, if there is an intermediate node 
-% that can be reached directly from the first node, and from which you can reach the second node 
-path(A,C) :- edge(A,B), 
-             B \= C, 
-             ​edge(B,​C). 
-</​code>​ 
- 
-Now you can ask Problog, what is the probability of reaching ''​5''​ from ''​1''​. 
- 
-<code prolog> 
-query(path(1,​5)). 
-</​code> ​ 
- 
-Test it! 
- 
-==== Zombie Epidemics ==== 
- 
-{{ :​en:​dydaktyka:​problog:​zombie_epidemic.png?​direct&​600 |}} 
- 
-One of the most popular use cases for graphs in probabilistic programming is to model social networks, where people interact with other people, leading to spread of information or... zombies. We will model here a simplified case of zombie epidemics. More serious (also probabilistic) approach can be found in a great article: [[https://​arxiv.org/​abs/​1311.6376|"​Bayesian Analysis of Epidemics — Zombies,​ Influenza, and other Diseases"​]]. Here we will focus on an early phase of the zombie epidemics in a shopping mall. Here goes the story: 
- 
-//Someone very evil and mischievous leaked a zombie virus in a shopping mall air conditioning system. This way of spreading the virus isn't very efficient, but there is 0.1 probability that somebody will get ill just from breathing the bad air. What makes situation worse is that the virus attracts the already infected people. There is a high chance (0.6), that the healthy people will get infected if they get in a physical contact with already infected ones.// ​ 
- 
-So, the situation is clear. We have some people in the mall, to save computing time let's say there are eight friend. In order to make your life easier, we will generate them using a built-in Problog predicate ''​between/​3''​. 
- 
-<code prolog>  ​ 
-human(X) :- between(1, 8, X). 
-</​code>​ 
- 
-Now, some of them (let's say first 2) are already infected. 
- 
-<code prolog> 
-initially_infected(X) :- human(X), X < 3. 
-</​code>​ 
- 
-And finally our probabilistic graph! We will say that two people can get in a physical contact with 0.1 probability. It's a very dense graph (clique) with quite weak edges. 
- 
-<code prolog> 
-% X \= Y, because you can meet with yourself 
-0.1::​contact(X,​Y) :- human(X), human(Y), X \= Y. 
-</​code>​ 
- 
-=== Assignments === 
- 
-  - add missing rules for the virus spread: 
-    * you can be already infected 
-    * you can get infected because of the bad air 
-    * you can get infected because meeting and contacting an infected person 
-  - check what is the probability that any human gets infected 
-    * how would it change if there was only one infected person in beginning? 
-    * how would it change if couldn'​t get infected via air?  
-  - introduce a new element to the model: some people are naturally resistant to the virus 
-    * if you are resistant, you can't get infected by air 
-    * the probability that a resistant person will get infected via physical contact is halved 
-    * hint: [[http://​ai.ia.agh.edu.pl/​wiki/​en:​dydaktyka:​problog:​lab1#​predicting_treatment_s_effects|previous class]] 
-  - make third and fourth people resistant to the virus 
-    * what is the impact of the resistant people on the whole population? 
  
en/dydaktyka/problog/lab2.txt · Last modified: 2019/06/27 15:49 (external edit)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0