wolffd@0: % Compare the speeds of various inference engines on the DBN in Kjaerulff wolffd@0: % "dHugin: A computational system for dynamic time-sliced {B}ayesian networks", wolffd@0: % Intl. J. Forecasting 11:89-111, 1995. wolffd@0: % wolffd@0: % The intra structure is (all arcs point downwards) wolffd@0: % wolffd@0: % 1 -> 2 wolffd@0: % \ / wolffd@0: % 3 wolffd@0: % | wolffd@0: % 4 wolffd@0: % / \ wolffd@0: % 5 6 wolffd@0: % \ / wolffd@0: % 7 wolffd@0: % | wolffd@0: % 8 wolffd@0: % wolffd@0: % The inter structure is 1->1, 4->4, 8->8 wolffd@0: wolffd@0: seed = 0; wolffd@0: rand('state', seed); wolffd@0: randn('state', seed); wolffd@0: wolffd@0: ss = 8; wolffd@0: intra = zeros(ss); wolffd@0: intra(1,[2 3])=1; wolffd@0: intra(2,3)=1; wolffd@0: intra(3,4)=1; wolffd@0: intra(4,[5 6])=1; wolffd@0: intra([5 6], 7)=1; wolffd@0: intra(7,8)=1; wolffd@0: wolffd@0: inter = zeros(ss); wolffd@0: inter(1,1)=1; wolffd@0: inter(4,4)=1; wolffd@0: inter(8,8)=1; wolffd@0: wolffd@0: ns = 2*ones(1,ss); wolffd@0: onodes = 2; wolffd@0: bnet = mk_dbn(intra, inter, ns, 'observed', onodes, 'eclass2', (1:ss)+ss); wolffd@0: for i=1:2*ss wolffd@0: bnet.CPD{i} = tabular_CPD(bnet, i); wolffd@0: end wolffd@0: wolffd@0: T = 4; wolffd@0: wolffd@0: engine = {}; wolffd@0: engine{end+1} = jtree_unrolled_dbn_inf_engine(bnet, T); wolffd@0: engine{end+1} = jtree_dbn_inf_engine(bnet); wolffd@0: engine{end+1} = smoother_engine(jtree_2TBN_inf_engine(bnet)); wolffd@0: %engine{end+1} = smoother_engine(hmm_2TBN_inf_engine(bnet)); % observed nodes have children wolffd@0: wolffd@0: inf_time = cmp_inference_dbn(bnet, engine, T) wolffd@0: learning_time = cmp_learning_dbn(bnet, engine, T)