Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

pl:prolog:pllib:belief_networks [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 +====== Belief networks ======
 +{{tag>​networks interpreter}}
 +===== Description =====
 +An interpreter for belief networks.
 +
 +**Source**: ​ PROLOG programming for artificial intelligence,​ 3rd Edition, Harlow, 2001, ISBN 0-201-40375-7.
 +===== Download =====
 +Program source code: {{belief_networks.pl}}
 +===== Listing =====
 +<code prolog>
 +% Figure 15.11  An interpreter for belief networks.
 +
 +:- op( 900, fy, not).
 +
 +% not Goal): negation as failure; ​
 +%   Note: This is often available as a built-in predicate,
 +%   often written as prefix operator "​\+",​ e.g. \+ likes(mary,​snakes)
 +
 +not Goal  :-
 +  Goal, !, fail
 +  ; 
 +  true.
 +
 +% Reasoning in belief networks
 +
 +% Belief network is represented by relations:
 +%    parent( ParentNode, Node)
 +%    p( Node, ParentStates,​ Prob)
 +%      where Prob is conditional probability of Node given 
 +%      values of parent variables ParentStates,​ for example: ​
 +%      p( alarm, [ burglary, not earthquake],​ 0.99)
 +%    p( Node, Prob)
 +%      probability of node without parents
 +
 +
 +% prob( Event, Condition, P):
 +%   ​probability of Event, given Cond, is P;
 +%   Event is a variable, its negation, or a list
 +%   of simple events representing their conjunction
 +
 +prob( [X | Xs], Cond, P)  :-  !,   % Probability of conjunction
 +  prob( X, Cond, Px),
 +  prob( Xs, [X | Cond], PRest),
 +  P is Px * PRest.
 +
 +prob( [], _, 1)  :-  !.            % Empty conjunction
 +
 +prob( X, Cond, 1)  :-
 +  member( X, Cond), !.             % Cond implies X
 +
 +prob( X, Cond, 0)  :-
 +  member( not X, Cond), !.         % Cond implies X is false
 +
 +prob( not X, Cond, P)  :-  !,      % Probability of negation
 +  prob( X, Cond, P0),
 +  P is 1 - P0.
 +
 +% Use Bayes rule if condition involves a descendant of X
 +
 +prob( X, Cond0, P)  :-
 +  delete( Y, Cond0, Cond),
 +  predecessor( X, Y), !,           % Y is a descendant of X
 +  prob( X, Cond, Px),
 +  prob( Y, [X | Cond], PyGivenX),
 +  prob( Y, Cond, Py),              ​
 +  P is Px * PyGivenX / Py.         % Assuming Py > 0
 +
 +% Cases when condition does not involve a descendant
 +
 +prob( X, Cond, P)  :-
 +  p( X, P), !.              % X a root cause - its probability given
 +
 +prob( X, Cond, P)  :-  !,
 +  findall( (CONDi,Pi), p(X,​CONDi,​Pi),​ CPlist), ​ % Conditions on parents
 +  sum_probs( CPlist, Cond, P).
 +
 +% sum_probs( CondsProbs, Cond, WeigthedSum)
 +%   ​CondsProbs is a list of conditions and corresponding probabilities,​
 +%   ​WeightedSum is weighted sum of probabilities of Conds given Cond
 +
 +sum_probs( [], _, 0).
 +
 +sum_probs( [ (COND1,P1) | CondsProbs],​ COND, P)  :-
 +  prob( COND1, COND, PC1),
 +  sum_probs( CondsProbs, COND, PRest),
 +  P is P1 * PC1 + PRest.
 +
 +predecessor( X, not Y)  :- !,        % Negated variable Y
 +  predecessor( X, Y).
 +
 +predecessor( X, Y)  :-
 +  parent( X, Y).
 +
 +predecessor( X, Z)  :-
 +  parent( X, Y),
 +  predecessor( Y, Z).
 +
 +member( X, [X | _]).
 +
 +member( X, [_ | L])  :-
 +  member( X, L).
 +
 +delete( X, [X | L], L).
 +
 +delete( X, [Y | L], [Y | L2])  :-
 +  delete( X, L, L2).
 +</​code>​
 +===== Comments =====
  
pl/prolog/pllib/belief_networks.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
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