states = 5;

N=2*states;
dag = zeros(N,N);			% Luodaan verkkorakenne.
T = 1:states;				% tilamuuttujat
M = (states+1):N;			% emissiomuuttujat
for i=T,
  dag(T(i), M(i)) = 1;			% T(i) on M(i):n vanhempi
end
for i=T(1:states-1),
  dag(T(i), T(i+1)) = 1;
end

bnet = mk_bnet(dag, 2*ones(1,N));	% Luodaan Bayes-verkko

prior = [0.5 0.5];			% Ensimmäisen tilan priori
state_transition = [0.8 0.2 0.2 0.8];	% Siirtymäjakauma
emission = [0.9 0.1 0.1 0.9];		% Emissiojakauma

% Lisätään todennäköisyysjakaumat verkkoon:

bnet.CPD{1} = tabular_CPD(bnet, 1, prior);
for i=T(2:states),
  bnet.CPD{i} = tabular_CPD(bnet, i, state_transition);
end
for i=M,
  bnet.CPD{i} = tabular_CPD(bnet, i, emission);
end

% Luodaan inferenssikone:

engine = jtree_inf_engine(bnet);

% Evidenssiä:

evidence = cell(1,N);
evidence{states+1} = 1;
evidence{states+2} = 1;
evidence{states+3} = 1;
evidence{states+4} = 2;
evidence{states+5} = 2;

% Evidenssi koneeseen:

[engine, loglik] = enter_evidence(engine, evidence);

% Marginaalijakaumat:

for i = T,
  x = marginal_nodes(engine, i);
  x.T
  bar(x.T)
  pause
end
