public void LearnTest4()
{
Accord.Math.Tools.SetupGenerator(0);
int[][] sequences = new int[][]
{
new int[] { 0, 3, 1 },
new int[] { 0, 2 },
new int[] { 1, 0, 3 },
new int[] { 3, 4 },
new int[] { 0, 1, 3, 5 },
new int[] { 0, 3, 4 },
new int[] { 0, 1, 3, 5 },
new int[] { 0, 1, 3, 5 },
new int[] { 0, 1, 3, 4, 5 },
};
HiddenMarkovModel hmm = new HiddenMarkovModel(new Ergodic(3, random: true), 6);
var teacher = new ViterbiLearning(hmm) { Iterations = 100, Tolerance = 0 };
double ll = teacher.Run(sequences);
double l0; hmm.Decode(sequences[0], out l0);
double l1; hmm.Decode(sequences[1], out l1);
double l2; hmm.Decode(sequences[2], out l2);
double pl = System.Math.Exp(ll);
double p0 = System.Math.Exp(l0);
double p1 = System.Math.Exp(l1);
double p2 = System.Math.Exp(l2);
Assert.AreEqual(0.078050218613091762, pl, 1e-10);
Assert.AreEqual(0.008509757587448558, p0, 1e-10);
Assert.AreEqual(0.010609567901234561, p1, 1e-10);
Assert.AreEqual(0.008509757587448558, p2, 1e-10);
}