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