public void AKN_HMM_Learning_UT() { AKN_HiddenMarkovModel <String> m_HiddenMarkovModel = new AKN_HiddenMarkovModel <String>(3, 2); m_HiddenMarkovModel.MSetStates(new float[] { 0.656F, 0.344F, 0.0F }, new string[] { "Etat_1", "Etat_2", "Etat_3" }); m_HiddenMarkovModel.MSetTransitions(new float[, ] { { 0.346F, 0.365F, 0.289F }, { 0.159F, 0.514F, 0.327F }, { 0.377F, 0.259F, 0.364F } }); m_HiddenMarkovModel.MSetObservations(new String[] { "Pile", "Face" }); m_HiddenMarkovModel.MSetEmissions(new float[, ] { { 1.0F, 0.0F }, { 0.631F, 0.369F }, { 0.0F, 1.0F } }); String[] observation = new String[] { "Pile", "Face", "Face", "Pile", "Pile" }; m_HiddenMarkovModel.MUpdate(observation, 0, 15); float p = m_HiddenMarkovModel.MEvaluate(observation, eUseAlgorithme.kForward); Assert.That(NearlyEqual(p, (float)(0.2479884)), "Problem = " + (p - 0.2479884f)); Assert.That(NearlyEqual(m_HiddenMarkovModel["Etat_1"].m_startProbability, 1.0F), "Problem !" + m_HiddenMarkovModel["Etat_1"].m_startProbability); Assert.That(NearlyEqual(m_HiddenMarkovModel["Etat_2"].m_startProbability, 0.0F), "Problem !" + m_HiddenMarkovModel["Etat_2"].m_startProbability); Assert.That(NearlyEqual(m_HiddenMarkovModel["Etat_3"].m_startProbability, 0.0F), "Problem !" + m_HiddenMarkovModel["Etat_3"].m_startProbability); Assert.That(NearlyEqual(m_HiddenMarkovModel["Etat_1", "Etat_1"], 0.0F), "Problem !" + m_HiddenMarkovModel["Etat_1", "Etat_1"]); Assert.That(NearlyEqual(m_HiddenMarkovModel["Etat_1", "Etat_2"], 0.0F), "Problem !" + m_HiddenMarkovModel["Etat_1", "Etat_2"]); Assert.That(NearlyEqual(m_HiddenMarkovModel["Etat_1", "Etat_3"], 1.0F), "Problem !" + m_HiddenMarkovModel["Etat_1", "Etat_3"]); Assert.That(NearlyEqual(m_HiddenMarkovModel["Etat_2", "Etat_1"], 0.2119321F), "Problem !" + m_HiddenMarkovModel["Etat_2", "Etat_1"]); Assert.That(NearlyEqual(m_HiddenMarkovModel["Etat_2", "Etat_2"], 0.788068F), "Problem !" + m_HiddenMarkovModel["Etat_2", "Etat_2"]); Assert.That(NearlyEqual(m_HiddenMarkovModel["Etat_2", "Etat_3"], 0.0F), "Problem !" + m_HiddenMarkovModel["Etat_2", "Etat_3"]); Assert.That(NearlyEqual(m_HiddenMarkovModel["Etat_3", "Etat_1"], 0.0F), "Problem !" + m_HiddenMarkovModel["Etat_3", "Etat_1"]); Assert.That(NearlyEqual(m_HiddenMarkovModel["Etat_3", "Etat_2"], 0.5147933F), "Problem !" + m_HiddenMarkovModel["Etat_3", "Etat_2"]); Assert.That(NearlyEqual(m_HiddenMarkovModel["Etat_3", "Etat_3"], 0.4852067F), "Problem !" + m_HiddenMarkovModel["Etat_3", "Etat_3"]); Assert.That(NearlyEqual(m_HiddenMarkovModel.MGetEmission("Etat_1", "Pile"), 1.0F), "Problem !" + m_HiddenMarkovModel.MGetEmission("Etat_1", "Pile")); Assert.That(NearlyEqual(m_HiddenMarkovModel.MGetEmission("Etat_1", "Face"), 0.0F), "Problem !" + m_HiddenMarkovModel.MGetEmission("Etat_1", "Face")); Assert.That(NearlyEqual(m_HiddenMarkovModel.MGetEmission("Etat_2", "Pile"), 0.9686517F), "Problem !" + m_HiddenMarkovModel.MGetEmission("Etat_2", "Pile")); Assert.That(NearlyEqual(m_HiddenMarkovModel.MGetEmission("Etat_2", "Face"), 0.03134831F), "Problem !" + m_HiddenMarkovModel.MGetEmission("Etat_2", "Face")); Assert.That(NearlyEqual(m_HiddenMarkovModel.MGetEmission("Etat_3", "Pile"), 0.0F), "Problem !" + m_HiddenMarkovModel.MGetEmission("Etat_3", "Pile")); Assert.That(NearlyEqual(m_HiddenMarkovModel.MGetEmission("Etat_3", "Face"), 1.0F), "Problem !" + m_HiddenMarkovModel.MGetEmission("Etat_3", "Face")); }
public void AKN_HMM_Evaluation_UT() { AKN_HiddenMarkovModel <String> m_HiddenMarkovModel; String[] observations; float result; // Exemple 1 m_HiddenMarkovModel = new AKN_HiddenMarkovModel <String>(2, 2); m_HiddenMarkovModel.MSetStates(new float[] { 1.0F, 0.0F }, new string[] { "Samedi", "Dimanche" }); m_HiddenMarkovModel.MSetTransitions(new float[, ] { { 0.5F, 0.5F }, { 0.0F, 1.0F } }); m_HiddenMarkovModel.MSetObservations(new String[] { "Soleil", "Pluie" }); m_HiddenMarkovModel.MSetEmissions(new float[, ] { { 0.3F, 0.7F }, { 0.8F, 0.2F } }); observations = new String[] { "Soleil", "Pluie", "Pluie", "Soleil" }; result = m_HiddenMarkovModel.MEvaluate(observations, eUseAlgorithme.kForward); Assert.That(NearlyEqual(result, 0.0334125F), "Problem ! result = " + result); result = m_HiddenMarkovModel.MEvaluate(observations, eUseAlgorithme.kBackward); Assert.That(NearlyEqual(result, 0.0334125F), "Problem ! result = " + result); result = m_HiddenMarkovModel.MEvaluate(observations, eUseAlgorithme.kForwardAndBackward, 0); Assert.That(NearlyEqual(result, 0.0334125F), "Problem ! result = " + result); result = m_HiddenMarkovModel.MEvaluate(observations, eUseAlgorithme.kForwardAndBackward, 1); Assert.That(NearlyEqual(result, 0.0334125F), "Problem ! result = " + result); result = m_HiddenMarkovModel.MEvaluate(observations, eUseAlgorithme.kForwardAndBackward, 2); Assert.That(NearlyEqual(result, 0.0334125F), "Problem ! result = " + result); result = m_HiddenMarkovModel.MEvaluate(observations, eUseAlgorithme.kForwardAndBackward, 3); Assert.That(NearlyEqual(result, 0.0334125F), "Problem ! result = " + result); // Exemple 2 m_HiddenMarkovModel = new AKN_HiddenMarkovModel <String>(3, 2); m_HiddenMarkovModel.MSetStates(new float[] { 0.5F, 0.3F, 0.2F }, new string[] { "Etat_1", "Etat_2", "Etat_3" }); m_HiddenMarkovModel.MSetTransitions(new float[, ] { { 0.45F, 0.35F, 0.2F }, { 0.1F, 0.5F, 0.4F }, { 0.15F, 0.25F, 0.6F } }); m_HiddenMarkovModel.MSetObservations(new String[] { "Pile", "Face" }); m_HiddenMarkovModel.MSetEmissions(new float[, ] { { 1.0F, 0.0F }, { 0.5F, 0.5F }, { 0.0F, 1.0F } }); observations = new String[] { "Pile", "Face", "Face", "Pile", "Pile" }; result = m_HiddenMarkovModel.MEvaluate(observations, eUseAlgorithme.kForward); Assert.That(NearlyEqual(result, 0.0277625F), "Problem ! result = " + result); result = m_HiddenMarkovModel.MEvaluate(observations, eUseAlgorithme.kBackward); Assert.That(NearlyEqual(result, 0.0277625F), "Problem ! result = " + result); result = m_HiddenMarkovModel.MEvaluate(observations, eUseAlgorithme.kForwardAndBackward, 0); Assert.That(NearlyEqual(result, 0.0277625F), "Problem ! result = " + result); result = m_HiddenMarkovModel.MEvaluate(observations, eUseAlgorithme.kForwardAndBackward, 1); Assert.That(NearlyEqual(result, 0.0277625F), "Problem ! result = " + result); result = m_HiddenMarkovModel.MEvaluate(observations, eUseAlgorithme.kForwardAndBackward, 2); Assert.That(NearlyEqual(result, 0.0277625F), "Problem ! result = " + result); result = m_HiddenMarkovModel.MEvaluate(observations, eUseAlgorithme.kForwardAndBackward, 3); Assert.That(NearlyEqual(result, 0.0277625F), "Problem ! result = " + result); result = m_HiddenMarkovModel.MEvaluate(observations, eUseAlgorithme.kForwardAndBackward, 4); Assert.That(NearlyEqual(result, 0.0277625F), "Problem ! result = " + result); }