wolffd@0: function [scenarios, log_probs] = enumerate_scenarios(bnet, evidence) wolffd@0: % ENUMERATE_SCENARIOS Enumerate all assignments, and return the prob. of the non-zeros ones wolffd@0: % function [scenarios, log_probs] = enumerate_scenarios(bnet, evidence) wolffd@0: wolffd@0: assert(isempty(bnet.cnodes)); wolffd@0: n = length(bnet.dag); wolffd@0: observed = ~isemptycell(evidence); wolffd@0: vals = cat(1,evidence{observed}); wolffd@0: vals = vals(:)'; wolffd@0: ns = bnet.node_sizes; wolffd@0: wolffd@0: log_probs = []; wolffd@0: scenarios = []; wolffd@0: for i=1:prod(ns) wolffd@0: inst = ind2subv(ns, i); % i'th instantiation wolffd@0: if isempty(vals) | inst(observed) == vals % agrees with evidence wolffd@0: ll = log_lik_complete(bnet, num2cell(inst(:))); wolffd@0: log_probs = [log_probs ll]; wolffd@0: scenarios = [scenarios(:)' inst]; wolffd@0: end wolffd@0: end