wolffd@0: % Evaluate effectiveness of likelihood weighting on the lawn sprinkler example wolffd@0: wolffd@0: N = 4; wolffd@0: dag = zeros(N,N); wolffd@0: C = 1; R = 2; S = 3; W = 4; wolffd@0: dag(C,[R S]) = 1; wolffd@0: dag(R,W) = 1; wolffd@0: dag(S,W)=1; wolffd@0: wolffd@0: false = 1; true = 2; wolffd@0: ns = 2*ones(1,N); % binary nodes wolffd@0: wolffd@0: bnet = mk_bnet(dag, ns); wolffd@0: bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]); wolffd@0: bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]); wolffd@0: bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]); wolffd@0: bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]); wolffd@0: wolffd@0: wolffd@0: clear engine; wolffd@0: engine{1} = jtree_inf_engine(bnet); wolffd@0: engine{2} = likelihood_weighting_inf_engine(bnet); wolffd@0: wolffd@0: nengines = length(engine); wolffd@0: m = cell(1, nengines); wolffd@0: ll = zeros(1, nengines); wolffd@0: wolffd@0: evidence = cell(1,N); wolffd@0: %evidence{C} = true; % evidence at the top is the easiest wolffd@0: evidence{W} = true; % evidence at the bottom is the hardets wolffd@0: wolffd@0: query = [R]; wolffd@0: wolffd@0: i=1; wolffd@0: engine{i} = enter_evidence(engine{i}, evidence); wolffd@0: exact_m = marginal_nodes(engine{i}, query); wolffd@0: wolffd@0: i=2; wolffd@0: samples = 100:100:500; wolffd@0: err = zeros(1, length(samples)); wolffd@0: for j=1:length(samples) wolffd@0: nsamples = samples(j); wolffd@0: engine{i} = enter_evidence(engine{i}, evidence, nsamples); wolffd@0: approx_m = marginal_nodes(engine{i}, query); wolffd@0: a1=approxeq(approx_m.T,exact_m.T,1e-1); wolffd@0: a2=approxeq(approx_m.T,exact_m.T,1e-2); wolffd@0: a3=approxeq(approx_m.T,exact_m.T,1e-3); wolffd@0: e = sum(abs(approx_m.T(:) - exact_m.T(:))); wolffd@0: fprintf('%d samples, 1dp %d, 2dp %d, 3dp %d, err %f\n', nsamples, a1, a2, a3, e); wolffd@0: err(j) = e; wolffd@0: end