Praktikumitöö:mõtlemismäng: erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
Resümee puudub
Resümee puudub
43. rida: 43. rida:
NB! Kontrolli, et sinu programm ei mõtleks AK arvutiklasside masinates ühte käiku kunagi üle ühe sekundi. Pikemat mõtlemist käsitletakse lihtsalt vigase töötamisena.
NB! Kontrolli, et sinu programm ei mõtleks AK arvutiklasside masinates ühte käiku kunagi üle ühe sekundi. Pikemat mõtlemist käsitletakse lihtsalt vigase töötamisena.


== Võistlus ja lisapunktid ==


Pärast praktikumitöö esitamise tähtaja möödumist korraldab õppejõud programmide vahel võistluse, ning esimese kahe parema programmi autorid saavad eksami jaoks lisapunkte:
* Esikoha võitnud programmi autorid kumbki 10 punkti.
* Teise koha võitnud programmi autorid kumbki 5 punkti.
Võistlus ei ole kohustuslik. Kuidas sellest osa võtta: kolme päeva jooksul peale
praktikumitähtaja möödumist tuleb teha oma programmist versioon, kus varem best_move funktsioonis
sisaldunud kood kopeeritakse funktsioon best_opponent_move failis FiveOpponent.java. Viimane
fail peab olema täiesti sõltumatu teistest programmi lähtekoodi-failidest (st peab ise kompileeruma).
õppejõule saata emailiga järgmine info:
* autorite nimed, matriklinumbrid, emailid
* programmi lähtekood (NB! FiveOpponent.java peab sisaldama sinu käiguvaliku-programmi)
* programmi valmiskompileeritud class failid
NB!
* Programm ei tohi AK arvutiklassides ühtegi käiku mõelda kauem, kui ühe sekundi.
* Programm peab suutma mängida nii 10x10 kui 20x20 laual.
* Programm peab suutma käia ka siis, kui etteantud laud on tühi (alustaja must).
* Programm saab ette laua (vt praegust best_opponent_move) ja otsustab ise, kelle käik on,
  ning annab tagasi ühte integeri kodeeritult (vt praegust best_opponent_move) käigu sellele
  käijale (st suudab leida nii parima valge kui musta käigu, olenevalt, kelle käik on).
Seejärel korraldab õppejõud laekunud programmide vahel turniiri, kus edasi pääseb igast matshist parem.
Täiendavad detailid ilmuvad siia lehele hiljem.


== Kuidas minimaxi ja seisuhinde arvutamist programmeerida ==
== Kuidas minimaxi ja seisuhinde arvutamist programmeerida ==

Redaktsioon: 22. november 2005, kell 03:44

Ülesandeks on lisada etteantud viis-nuppu-ritta programmile nö mõtlemiskomponent: jupid programmi, mis leiavad etteantud seisust võimalikult hea käigu. Nende juppide lisamise tulemusena peab sinu programm mängima viit nuppu ritta nö "mõistliku headuse" tasemel.

Konkreetselt nõutakse, et sinu programm peab rõhuval enamikul juhtudel võitma õppejõu poolt etteantavat viis-nuppu-ritta võrdlusprogrammi, eeldades, et mõlemal on iga käigu jaoks aega üks sekund. See võrldusprogramm tuleb - ilma lähtekoodita - siia lehele 1. detsembriks. Igal juhul on garanteeritud, et:

  • kui sinu programm kasutab korrektselt minimaxi
  • oled programmeerinud mõistliku lihtsa seisuhinde (vaatab viieste olemasolu, loeb kokku lahtised neljased, poollahtised neljased, lahtised kolmesed)

siis sinu programm võidab etteantud võrdlusprogrammi, kui mõlemal on ajapiir üks sekund käigu kohta.

NB! Sinu programm peab suutma mõistliku headusega mängida nii 10x10 kui 20x20 laual.

Kahekesi programmeerimine

Viis nuppu ritta ülesannet võib programmeerida kas üksi või kahekesi. Kahekesi programmeerimise puhul saab kumbki täispunktid, tingimusel, et:

  • Programmi ettenäitamisel on kohal mõlemad tudengid. Kui ühte pole, siis tema lihtsalt punkte ei saa.
  • Kumbki tudeng saab programmi tekstist aru (st ka nendest osadest, mida tema programmeerinud ei olnud). Kui juhendajale tundub, et üks tudeng ei saa programmi tekstist hästi aru, siis ta jätab sellele tudengile punktid panemata või paneb lihtsalt vähem.

Etteantud lähtekood

Sinu programm peab olema järgmise etteantud koodi edasiarendus. Mingeid muid alternatiive - üleni isetehtud või mujalt saadud GUI või muud klassid - ei aktsepteerita.

Etteantud kood koosneb neljast failist selles zip failis:


Five.zip


Kood on kohe edukalt kompileeritav ja töötav. Paraku mängib ta väga halvasti: käib alati esimesele vabale kohale. Selleks, et ta paremini mängiks, pead lisama funktsiooni best_move (failis FiveLogic.java) minimaxi kasutamise ja mõistliku seisuhinde (st kirjutama need funktsioonid lisaks ja kutsuma neid best_move seest välja). Mingeid muid funktsioone või kasutajaliidese nüansse muutma ei pea.

Etteantud lähtekood baseerub siin lehel varem viidatud lähtekoodile http://www.leepoint.net/notes-java/45examples/55games/five/five.html

Võrreldes viimasega on lisatud masina käik, autoplay rezhiim ja 20x20 laua valik.

"auto" nupp ja võrdlusprogramm

"auto" nupule vajutamise korral hakkab programm täisautomaatselt mängima: toimub võistlus funktsiooni best_move (failis FiveLogic.java) ning funktsiooni best_opponent_move (failis FiveOpponent.java) vahel. Inimmängija rolli võtab siis best_opponent_move.

Ka best_opponent_move mängib väga halvasti: ta püüab samuti käia esimesele vabale ruudule, alustades aga paremalt alt, mitte vasakult ülalt, nagu best_move.

õppejõu poolt hiljem antav võrdlusprogramm kujutab endast valmiskompileeritud klass-faili FiveOpponent.class, millega pead algul isekompileeritud FiveOpponent.class faili lihtsalt asendama (st kustutad kataloogist nii FiveOpponent.class kui FiveOpponent.java ning paned asemele siit lehelt laetud FiveOpponent.class).

NB! Kontrolli, et sinu programm ei mõtleks AK arvutiklasside masinates ühte käiku kunagi üle ühe sekundi. Pikemat mõtlemist käsitletakse lihtsalt vigase töötamisena.

Võistlus ja lisapunktid

Pärast praktikumitöö esitamise tähtaja möödumist korraldab õppejõud programmide vahel võistluse, ning esimese kahe parema programmi autorid saavad eksami jaoks lisapunkte:

  • Esikoha võitnud programmi autorid kumbki 10 punkti.
  • Teise koha võitnud programmi autorid kumbki 5 punkti.

Võistlus ei ole kohustuslik. Kuidas sellest osa võtta: kolme päeva jooksul peale praktikumitähtaja möödumist tuleb teha oma programmist versioon, kus varem best_move funktsioonis sisaldunud kood kopeeritakse funktsioon best_opponent_move failis FiveOpponent.java. Viimane fail peab olema täiesti sõltumatu teistest programmi lähtekoodi-failidest (st peab ise kompileeruma).

õppejõule saata emailiga järgmine info:

  • autorite nimed, matriklinumbrid, emailid
  • programmi lähtekood (NB! FiveOpponent.java peab sisaldama sinu käiguvaliku-programmi)
  • programmi valmiskompileeritud class failid

NB!

  • Programm ei tohi AK arvutiklassides ühtegi käiku mõelda kauem, kui ühe sekundi.
  • Programm peab suutma mängida nii 10x10 kui 20x20 laual.
  • Programm peab suutma käia ka siis, kui etteantud laud on tühi (alustaja must).
  • Programm saab ette laua (vt praegust best_opponent_move) ja otsustab ise, kelle käik on,
 ning annab tagasi ühte integeri kodeeritult (vt praegust best_opponent_move) käigu sellele
 käijale (st suudab leida nii parima valge kui musta käigu, olenevalt, kelle käik on).

Seejärel korraldab õppejõud laekunud programmide vahel turniiri, kus edasi pääseb igast matshist parem.

Täiendavad detailid ilmuvad siia lehele hiljem.

Kuidas minimaxi ja seisuhinde arvutamist programmeerida

Loengus antud info ja viited: Loengumaterjal: Progpohi12.PPT

Lisaks:

http://en.wikipedia.org/wiki/Gomoku
http://www.leepoint.net/notes-java/45examples/55games/five/five.html
http://www.ocf.berkeley.edu/~yosenl/extras/alphabeta/alphabeta.html
http://web.archive.org/web/20040607185428/www.cs.vu.nl/~victor/thesis.html
http://www.cs.ualberta.ca/~chinook/