public void LearnTest4()
{
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(3, 6);
var teacher = new BaumWelchLearning(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.82996841576789704, pl, 1e-10);
Assert.AreEqual(0.014012065043262294, p0, 1e-10);
Assert.AreEqual(0.016930905415294094, p1, 1e-10);
Assert.AreEqual(0.001936595918966074, p2, 1e-10);
}