Daniel@0: function [obs, hidden] = pomdp_sample(initial_prob, transmat, obsmat, act) Daniel@0: % SAMPLE_POMDP Generate a random sequence from a Partially Observed Markov Decision Process. Daniel@0: % [obs, hidden] = sample_pomdp(prior, transmat, obsmat, act) Daniel@0: % Daniel@0: % Inputs: Daniel@0: % prior(i) = Pr(Q(1)=i) Daniel@0: % transmat{a}(i,j) = Pr(Q(t)=j | Q(t-1)=i, A(t)=a) Daniel@0: % obsmat(i,k) = Pr(Y(t)=k | Q(t)=i) Daniel@0: % act(a) = A(t), so act(1) is ignored Daniel@0: % Daniel@0: % Output: Daniel@0: % obs and hidden are vectors of length T=length(act) Daniel@0: Daniel@0: Daniel@0: len = length(act); Daniel@0: hidden = mdp_sample(initial_prob, transmat, act); Daniel@0: obs = zeros(1, len); Daniel@0: for t=1:len Daniel@0: obs(t) = sample_discrete(obsmat(hidden(t),:)); Daniel@0: end