Daniel@0: % influence diagram with no loops Daniel@0: % Daniel@0: % rv dec Daniel@0: % \ / Daniel@0: % utility Daniel@0: Daniel@0: N = 3; Daniel@0: dag = zeros(N); Daniel@0: X = 1; D = 2; U = 3; Daniel@0: dag([X D], U)=1; Daniel@0: Daniel@0: ns = zeros(1,N); Daniel@0: ns(X) = 2; ns(D) = 2; ns(U) = 1; Daniel@0: Daniel@0: limid = mk_limid(dag, ns, 'chance', X, 'decision', D, 'utility', U); Daniel@0: Daniel@0: % use random params Daniel@0: limid.CPD{X} = tabular_CPD(limid, X); Daniel@0: limid.CPD{D} = tabular_decision_node(limid, D); Daniel@0: limid.CPD{U} = tabular_utility_node(limid, U); Daniel@0: Daniel@0: %fname = '/home/cs/murphyk/matlab/Misc/loopybel.txt'; Daniel@0: global BNT_HOME Daniel@0: fname = sprintf('%s/loopybel.txt', BNT_HOME); Daniel@0: Daniel@0: engines = {}; Daniel@0: engines{end+1} = global_joint_inf_engine(limid); Daniel@0: engines{end+1} = jtree_limid_inf_engine(limid); Daniel@0: %engines{end+1} = belprop_inf_engine(limid, 'max_iter', 2*N, 'filename', fname); Daniel@0: engines{end+1} = belprop_inf_engine(limid, 'max_iter', 2*N); Daniel@0: Daniel@0: exact = [1 2]; Daniel@0: approx = 3; Daniel@0: Daniel@0: E = length(engines); Daniel@0: strategy = cell(1, E); Daniel@0: MEU = zeros(1, E); Daniel@0: for e=1:E Daniel@0: [strategy{e}, MEU(e)] = solve_limid(engines{e}); Daniel@0: MEU Daniel@0: end Daniel@0: MEU Daniel@0: Daniel@0: for e=exact(:)' Daniel@0: assert(approxeq(strategy{exact(1)}{D}, strategy{e}{D})) Daniel@0: end Daniel@0: Daniel@0: for e=approx(:)' Daniel@0: approxeq(strategy{exact(1)}{D}, strategy{e}{D}) Daniel@0: end