Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
en:dydaktyka:problog:intro [2017/05/15 17:55]
msl [Priors]
en:dydaktyka:problog:intro [2019/06/27 15:49] (current)
Line 45: Line 45:
 0.4::​student_knows_the_answer. 0.4::​student_knows_the_answer.
  
-pass_exam :- \+ illegible_handwriting, student_knows_the_answer.+pass_exam :- student_knows_the_answer, ​\+ illegible_handwriting.
 </​code>  ​ </​code>  ​
  
Line 136: Line 136:
  
 <code prolog> <code prolog>
-pass_exam(Student) :- has_illegible_writing(Student), ​heads(Student). +pass_exam(Student) :- heads(Student), ​has_illegible_writing(Student). 
-pass_exam(Student) :- \+ has_illegible_writing(Student), ​knows_the_answer(Student).+pass_exam(Student) :- knows_the_answer(Student), ​\+ has_illegible_writing(Student).
 </​code>  ​ </​code>  ​
 +
 +<WRAP center round tip 95%>
 +Good advice: if you use negation (''​\+''​) together with variables in the rule body, be sure that the variable has been already used in the same rule body in a positive context, e.g. don't write 
 +
 +''​\+ has_illegible_writing(Student),​ knows_the_answer(Student)'', ​
 +
 +because variable ''​Student''​ is used here first in the negative context. If you want to know details, learn more about Prolog ;)
 +</​WRAP>​
  
 Try to run the following model and check what is the probability of passing the exam by Joan. Try to add some evidence to the model. Try to run the following model and check what is the probability of passing the exam by Joan. Try to add some evidence to the model.
Line 174: Line 182:
 0.7::​pass_exam(Student) :- handwriting(Student,​ partly_legible),​ knows_the_answer(student). 0.7::​pass_exam(Student) :- handwriting(Student,​ partly_legible),​ knows_the_answer(student).
 </​code>  ​ </​code>  ​
- 
  
 Update rest of the rules accordingly and check if the model still works. What is the chance of passing the exam by Maxwell, who knows the answer but his handwriting is only partly legible? Update rest of the rules accordingly and check if the model still works. What is the chance of passing the exam by Maxwell, who knows the answer but his handwriting is only partly legible?
 +
 +==== Last Fixes ====
 +
 +There is one problem with the approach we've used with ''​handwriting''​ predicate. Have you noticed? All three facts ''​handwriting(Student,​ illegible), handwriting(Student,​ partly_legible),​ handwriting(Student,​ legible)''​ can be true at the same time. In other words, our model has a flaw we need to fix!
 +
 +There are to ways to take care of that:
 +
 +  - (not recommended) we add additional rules that say that only one value can be true.
 +  - (recommended) use so called //annotated disjunctions//,​ which will be explained briefly.
 +
 +If we have three facts that only one of them can be true at the time, we can write them as:
 +
 +<code prolog>
 +fact1; fact2; fact3.
 +</​code> ​
 +
 +The same we can due with a rule:
 +<code prolog>
 +fact1; fact2; fact3 :- rule_body.
 +</​code>​
 +
 +Which in our case translates to:
 +<code prolog>
 +0.5::​handwriting(Name,​ illegible); ​
 +0.4::​handwriting(Name,​ partly_legible); ​
 +0.1::​handwriting(Name,​ legible ):- student(Name).
 +</​code>​
 +
 +Try to use that instead of the previous notation. Is there any difference?
  
 ===== First Assignment ===== ===== First Assignment =====
en/dydaktyka/problog/intro.1494863738.txt.gz · Last modified: 2019/06/27 16:00 (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