public void ConstructorTest()
{
double[,] A;
double[] pi;
var hmm = HiddenMarkovModel.CreateGeneric(2, 4);
A = new double[,]
{
{ 0.5, 0.5 },
{ 0.5, 0.5 }
};
pi = new double[] { 1, 0 };
var logA = A.Log();
var logPi = pi.Log();
Assert.AreEqual(2, hmm.States);
Assert.AreEqual(1, hmm.Dimension);
Assert.IsTrue(logA.IsEqual(hmm.Transitions));
Assert.IsTrue(logPi.IsEqual(hmm.Probabilities));
hmm = HiddenMarkovModel.CreateGeneric(new Forward(2), 4);
A = new double[,]
{
{ 0.5, 0.5 },
{ 0.0, 1.0 }
};
pi = new double[] { 1, 0 };
logA = A.Log();
logPi = pi.Log();
Assert.AreEqual(2, hmm.States);
Assert.AreEqual(1, hmm.Dimension);
Assert.IsTrue(logA.IsEqual(hmm.Transitions));
Assert.IsTrue(logPi.IsEqual(hmm.Probabilities));
A = new double[,]
{
{ 0.7, 0.3 },
{ 0.4, 0.6 }
};
GeneralDiscreteDistribution[] B =
{
new GeneralDiscreteDistribution(0.1, 0.4, 0.5),
new GeneralDiscreteDistribution(0.6, 0.3, 0.1)
};
pi = new double[]
{
0.6, 0.4
};
hmm = new HiddenMarkovModel<GeneralDiscreteDistribution>(A, B, pi);
logA = A.Log();
logPi = pi.Log();
Assert.AreEqual(2, hmm.States);
Assert.AreEqual(1, hmm.Dimension);
Assert.IsTrue(logA.IsEqual(hmm.Transitions));
Assert.IsTrue(logPi.IsEqual(hmm.Probabilities));
Assert.AreEqual(B, hmm.Emissions);
}