wolffd@0: % Compare the speeds of various inference engines on the water DBN wolffd@0: seed = 0; wolffd@0: rand('state', seed); wolffd@0: randn('state', seed); wolffd@0: wolffd@0: %bnet = mk_water_dbn; wolffd@0: bnet = mk_orig_water_dbn; wolffd@0: wolffd@0: T = 3; wolffd@0: engine = {}; wolffd@0: %engine{end+1} = smoother_engine(jtree_2TBN_inf_engine(bnet)); wolffd@0: %engine{end+1} = smoother_engine(hmm_2TBN_inf_engine(bnet)); wolffd@0: %engine{end+1} = jtree_dbn_inf_engine(bnet); wolffd@0: engine{end+1} = jtree_unrolled_dbn_inf_engine(bnet, T); wolffd@0: engine{end+1} = cbk_inf_engine(bnet, 'clusters', {[1],[2],[3],[4],[5],[6],[7],[8]}); %ff wolffd@0: engine{end+1} = cbk_inf_engine(bnet, 'clusters', {[1 2],[3 4 5 6],[7 8]}); %manually designed marginally independent by BK wolffd@0: engine{end+1} = cbk_inf_engine(bnet, 'clusters', {[1:5], [3:7], [7:8]}); %manually designed conditionally independent by BK wolffd@0: engine{end+1} = cbk_inf_engine(bnet, 'clusters', {[1 3], [2 3 7], [3 5], [3 4 7], [6 7 8]}); %automatically found using TJTs offline wolffd@0: engine{end+1} = cbk_inf_engine(bnet, 'clusters', {[1 3 5], [2 3 5 7], [3 4 7], [4 6 7], [6 7 8]}); %automatically found using TJTs offline wolffd@0: engine{end+1} = cbk_inf_engine(bnet, 'clusters', {[1 3 4 5], [2 3 4 7 8], [4 6 7 8]}); %automatically found using TJTs offline wolffd@0: wolffd@0: % bk_inf_engine yields exactly the same results for the marginally independent cases. wolffd@0: %engine{end+1} = bk_inf_engine(bnet, 'clusters', 'ff'); wolffd@0: %engine{end+1} = bk_inf_engine(bnet, 'clusters', { [1 2], [3 4 5 6], [7 8] }); wolffd@0: wolffd@0: wolffd@0: inf_time = cmp_inference_dbn(bnet, engine, T, 'exact', 1) wolffd@0: learning_time = cmp_learning_dbn(bnet, engine, T, 'exact', 1)