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