Iti0210lab14: erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
PriitJ (arutelu | kaastöö)
Uus lehekülg: '= Hüvitisega õppimine = == Sissejuhatus == Rakendame hüvitisega õppimist (''reinforcement learning'') seamängule, millega puutusime kokku 4. praktikumis....'
 
PriitJ (arutelu | kaastöö)
Resümee puudub
13. rida: 13. rida:
Treeni oma algoritm, mängides <code>dummy_ai</code> vastu. Seejärel katseta, mitu korda näiteks 100 mängust sinu algoritm võidab. Et võrdlus aus oleks, pane 50% mängudest alustajaks oma algoritm ja 50% <code>dummy_ai</code>.
Treeni oma algoritm, mängides <code>dummy_ai</code> vastu. Seejärel katseta, mitu korda näiteks 100 mängust sinu algoritm võidab. Et võrdlus aus oleks, pane 50% mängudest alustajaks oma algoritm ja 50% <code>dummy_ai</code>.


== Testraamistik ==
== Q-Learning seamängu jaoks ==
 
Kõigepealt, mis on olek ja mis on tegevus?
 
Lihtne soovitus oleks võtta olekuks praegused punktid (AI-l 0-100 ja vastasel 0-100). Tegevus on loomulikult ROLL ja PASS, muid valikuid pole. Tabel Q oleks siis dimensioonidega 101x101x2, vaikimisi on selle kõik väljad 0. Pythonis võib selle teha <code>dict</code>-i kasutades.
 
'''Käigu valimine'''
 
Primitiivne meetod (''greedy''): oletame, et seis on 30 punkti AI-l, 90 punkti vastasel. Vaatan tabelist, kumb tegevus on suurema skooriga, ''Q[(30,90),PASS]'' või ''Q[(30,90),ROLL]''.
 
Erinevaid võimalusi õppiv meetod (''epsilon-greedy''): väike tõenäosus epsilon, et valitakse halvem käik (täpsemalt, juhuslik käik, aga siin mängus on alati ainult üks alternatiiv).
 
'''Õppimine'''
 
Oletame, et <code>tegevus</code> on tehtud ja teada <code>uus_olek</code> ning ka parim võimalik skoor, mida uuest olekust võimalik saavutada <code>max_Q</code> = max(Q[uus_olek,PASS], Q[uus_olek,ROLL]). Lisaks tasu <code>R</code> mis on 0, v.a. juhul kui keegi just võitis või kaotas.
 
Primitiivne meetod: kirjuta eelnev teadmine üle: ''Q[vana olek,tegevus] = R + gamma * max_Q''
 
Eelnevat teadmist arvestav meetod: ''Q[vana olek,tegevus] = alpha * (R + gamma * max_Q - Q[vana olek, tegevus])''
 
== Testimine ja treenimine ==


Kasuta testraamistikku, mille kirjutasid [[Iti0210lab62|4. praktikumi]] jaoks. Kui võtsid üle praktikumijuhendis oleva, siis funktsioon, mis mängib.
Kasuta testraamistikku, mille kirjutasid [[Iti0210lab62|4. praktikumi]] jaoks. Kui võtsid üle praktikumijuhendis oleva, siis funktsioon, mis mängib.
24. rida: 44. rida:
     # and pick the one that returns the highest minimax estimate
     # and pick the one that returns the highest minimax estimate
</pre>
</pre>
== Treenimine ==




36. rida: 54. rida:
</pre>
</pre>


== Q-Learning ==





Redaktsioon: 21. aprill 2019, kell 13:05

Hüvitisega õppimine

Sissejuhatus

Rakendame hüvitisega õppimist (reinforcement learning) seamängule, millega puutusime kokku 4. praktikumis. Reeglid uuesti:

  • mängitakse selleni, kes saab enne 100 punkti. Alguses on mõlemal mängijal 0 punkti.
  • mängija võib veeretada ühte täringut mitu korda järjest, senikaua kuni ta ei veereta 1. Tulemused liidetakse kokku.
  • kui mängija otsustab, et soovib veeretatud punktid alles hoida, liidetakse need tema kogusummale ja kord läheb vastasele.
  • kui mängija veeretab 1, siis läheb kord vastasele ja mängija kaotab kõik selle korra jooksul veeretatud punktid.

Rakendame Q-Learning algoritmi. Lihtne selgitus Q-Learning algoritmi kohta.

Treeni oma algoritm, mängides dummy_ai vastu. Seejärel katseta, mitu korda näiteks 100 mängust sinu algoritm võidab. Et võrdlus aus oleks, pane 50% mängudest alustajaks oma algoritm ja 50% dummy_ai.

Q-Learning seamängu jaoks

Kõigepealt, mis on olek ja mis on tegevus?

Lihtne soovitus oleks võtta olekuks praegused punktid (AI-l 0-100 ja vastasel 0-100). Tegevus on loomulikult ROLL ja PASS, muid valikuid pole. Tabel Q oleks siis dimensioonidega 101x101x2, vaikimisi on selle kõik väljad 0. Pythonis võib selle teha dict-i kasutades.

Käigu valimine

Primitiivne meetod (greedy): oletame, et seis on 30 punkti AI-l, 90 punkti vastasel. Vaatan tabelist, kumb tegevus on suurema skooriga, Q[(30,90),PASS] või Q[(30,90),ROLL].

Erinevaid võimalusi õppiv meetod (epsilon-greedy): väike tõenäosus epsilon, et valitakse halvem käik (täpsemalt, juhuslik käik, aga siin mängus on alati ainult üks alternatiiv).

Õppimine

Oletame, et tegevus on tehtud ja teada uus_olek ning ka parim võimalik skoor, mida uuest olekust võimalik saavutada max_Q = max(Q[uus_olek,PASS], Q[uus_olek,ROLL]). Lisaks tasu R mis on 0, v.a. juhul kui keegi just võitis või kaotas.

Primitiivne meetod: kirjuta eelnev teadmine üle: Q[vana olek,tegevus] = R + gamma * max_Q

Eelnevat teadmist arvestav meetod: Q[vana olek,tegevus] = alpha * (R + gamma * max_Q - Q[vana olek, tegevus])

Testimine ja treenimine

Kasuta testraamistikku, mille kirjutasid 4. praktikumi jaoks. Kui võtsid üle praktikumijuhendis oleva, siis funktsioon, mis mängib.

def minimax_ai(turn, rolled, my_points, opp_points):
    # this is the top level of search
    # we search all possible moves
    # (PASS and ROLL in case of the Pig game)
    # and pick the one that returns the highest minimax estimate


def dummy_ai(turn, rolled, my_points, opp_points):
    if rolled < 21:
        return ROLL
    else:
        return PASS


Lisaülesanne

Selle osa tegemine ei ole kohustuslik.

  1. Treeni algoritm dummy_ai vastu, mis on väga riskiv või väga konservatiivne (muuda konstanti 21 kas suuremaks või oluliselt väiksemaks).
  2. Muuda dummy_ai tagasi "optimaalseks" (üle 21 punkti otsus PASS)
  3. Mängita oma algoritmi dummy_ai vastu ja proovi jälgida võiduprotsenti ajas. Kas sinu algoritm suudab vastase muutunud strateegiale reageerida?