From d056f42b5564d1cf05079111ab946ada31207075 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vili=20Sinerv=C3=A4?= Date: Sat, 24 Sep 2022 11:04:57 +0300 Subject: [PATCH] =?UTF-8?q?Lis=C3=A4=C3=A4=20satunnaisuuden=20testaus=20Ma?= =?UTF-8?q?rkovin=20ketjulle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tests/markov_ketju_test.py | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/tests/markov_ketju_test.py b/src/tests/markov_ketju_test.py index c83375a..3c5ac4c 100644 --- a/src/tests/markov_ketju_test.py +++ b/src/tests/markov_ketju_test.py @@ -34,3 +34,39 @@ class TestMarkovKetju(unittest.TestCase): self.assertRaises(ValueError, ketju.aseta_alkuosa, "F") ketju.aseta_alkuosa("EF") self.assertFalse(ketju.seuraava()) + + def test_seuraava_todennakoisyys(self): + """Testaa, että Markovin ketjun antamat merkit ilmenevät likimain oikeilla yleisyyksillä""" + ketju = MarkovKetju(1) + opetusdata = ["AA", "AB", "AB", "AC", "AC", "AC"] + ketju.kasittele_opetusdata(opetusdata) + + """yhteensä ja marginaali määrittävät testin tarkkuuden ja toisaalta virheellisen hylkäämisen + todennäköisyyden. 3000 iteraatiota ja 5% marginaali tarkoittaa, että todellinen määrä saa + poiketa odotetusta enintään 3000*0,05 = 150, joka on mielestäni riittävän suuri tarkkuus. + Todennäköisyys, että testi ei mene läpi, kun Markovin ketju toimii oikein, on luokkaa 10^-8. + """ + yhteensa = 3000 + marginaali = 0.05 + + a_maara = 0 + b_maara = 0 + c_maara = 0 + + for i in range(yhteensa): + ketju.aseta_alkuosa("A") + merkki = ketju.seuraava() + if merkki == "A": + a_maara += 1 + elif merkki == "B": + b_maara += 1 + elif merkki == "C": + c_maara += 1 + + a_osuus = a_maara / yhteensa # Pitäisi olla noin 1/6 + b_osuus = b_maara / yhteensa # Pitäisi olla noin 2/6 + c_osuus = c_maara / yhteensa # Pitäisi olla noin 3/6 + + self.assertAlmostEqual(a_osuus, 1/6, delta=marginaali) + self.assertAlmostEqual(b_osuus, 2/6, delta=marginaali) + self.assertAlmostEqual(c_osuus, 3/6, delta=marginaali)