wolffd@0: function [engine, loglik] = enter_evidence(engine, evidence) wolffd@0: % ENTER_EVIDENCE Add the specified evidence to the network (gibbs_sampling_inf_engine) wolffd@0: % [engine, loglik] = enter_evidence(engine, evidence) wolffd@0: % wolffd@0: % evidence{i} = [] if if X(i) is hidden, and otherwise contains its observed value wolffd@0: % wolffd@0: % loglik is not computed... we just return a 0 value wolffd@0: wolffd@0: bnet = bnet_from_engine(engine); wolffd@0: wolffd@0: engine.hnodes = find(isemptycell(evidence)); wolffd@0: engine.onodes = mysetdiff(1:length(evidence), engine.hnodes); wolffd@0: wolffd@0: engine.evidence = zeros(engine.slice_size, 1); wolffd@0: wolffd@0: % Reset all counts since they are no longer valid wolffd@0: engine.marginal_counts = {}; wolffd@0: %engine.state = sample_bnet (bnet, 1, 0); wolffd@0: engine.state = cell2num(sample_bnet(bnet)); wolffd@0: wolffd@0: % For speed, we use a normal (not cell) array. We're making use of wolffd@0: % the current restriction to discrete nodes. wolffd@0: for i = engine.onodes wolffd@0: engine.evidence(i) = evidence{i}; wolffd@0: end wolffd@0: wolffd@0: loglik = 0; wolffd@0: wolffd@0: