wolffd@0: % Same as cg1, except we call stab_cond_gauss_inf_engine wolffd@0: wolffd@0: bnet = mk_incinerator_bnet; wolffd@0: wolffd@0: engines = {}; wolffd@0: engines{end+1} = stab_cond_gauss_inf_engine(bnet); wolffd@0: engines{end+1} = jtree_inf_engine(bnet); wolffd@0: engines{end+1} = cond_gauss_inf_engine(bnet); wolffd@0: nengines = length(engines); wolffd@0: wolffd@0: F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9; wolffd@0: n = 9; wolffd@0: dnodes = [B F W]; wolffd@0: cnodes = mysetdiff(1:n, dnodes); wolffd@0: wolffd@0: evidence = cell(1,n); % no evidence wolffd@0: ll = zeros(1, nengines); wolffd@0: for e=1:nengines wolffd@0: [engines{e}, ll(e)] = enter_evidence(engines{e}, evidence); wolffd@0: end wolffd@0: %assert(approxeq(ll(1), ll))) wolffd@0: ll wolffd@0: wolffd@0: % Compare to the results in table on p1107. wolffd@0: % These results are printed to 3dp in Cowell p150 wolffd@0: wolffd@0: mu = zeros(1,n); wolffd@0: sigma = zeros(1,n); wolffd@0: dprob = zeros(1,n); wolffd@0: addev = 1; wolffd@0: tol = 1e-2; wolffd@0: for e=1:nengines wolffd@0: for i=cnodes(:)' wolffd@0: m = marginal_nodes(engines{e}, i, addev); wolffd@0: mu(i) = m.mu; wolffd@0: sigma(i) = sqrt(m.Sigma); wolffd@0: end wolffd@0: for i=dnodes(:)' wolffd@0: m = marginal_nodes(engines{e}, i, addev); wolffd@0: dprob(i) = m.T(1); wolffd@0: end wolffd@0: assert(approxeq(mu([E D C L Min Mout]), [-3.25 3.04 -1.85 1.48 -0.214 2.83], tol)) wolffd@0: assert(approxeq(sigma([E D C L Min Mout]), [0.709 0.770 0.507 0.631 0.459 0.860], tol)) wolffd@0: assert(approxeq(dprob([B F W]), [0.85 0.95 0.29], tol)) wolffd@0: %m = marginal_nodes(engines{e}, bnet.names('E'), addev); wolffd@0: %assert(approxeq(m.mu, -3.25, tol)) wolffd@0: %assert(approxeq(sqrt(m.Sigma), 0.709, tol)) wolffd@0: end wolffd@0: wolffd@0: % Add evidence (p 1105, top right) wolffd@0: evidence = cell(1,n); wolffd@0: evidence{W} = 1; % industrial wolffd@0: evidence{L} = 1.1; wolffd@0: evidence{C} = -0.9; wolffd@0: wolffd@0: ll = zeros(1, nengines); wolffd@0: for e=1:nengines wolffd@0: [engines{e}, ll(e)] = enter_evidence(engines{e}, evidence); wolffd@0: end wolffd@0: %assert(all(approxeq(ll(1), ll))) wolffd@0: ll wolffd@0: wolffd@0: for e=1:nengines wolffd@0: for i=cnodes(:)' wolffd@0: m = marginal_nodes(engines{e}, i, addev); wolffd@0: mu(i) = m.mu; wolffd@0: sigma(i) = sqrt(m.Sigma); wolffd@0: end wolffd@0: for i=dnodes(:)' wolffd@0: m = marginal_nodes(engines{e}, i, addev); wolffd@0: dprob(i) = m.T(1); wolffd@0: end wolffd@0: assert(approxeq(mu([E D C L Min Mout]), [-3.90 3.61 -0.9 1.1 0.5 4.11], tol)) wolffd@0: assert(approxeq(sigma([E D C L Min Mout]), [0.076 0.326 0 0 0.1 0.344], tol)) wolffd@0: assert(approxeq(dprob([B F W]), [0.0122 0.9995 1], tol)) wolffd@0: end wolffd@0: