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

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
Resümee puudub
Resümee puudub
 
(ei näidata sama kasutaja 39 vahepealset redaktsiooni)
1. rida: 1. rida:
Ü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.
(2005 aasta ülesandevariandi [[Praktikumitöö: mõtlemismäng 2005 | leiad siit]].)


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:
<b>NB! See ülesanne on arhiivimaterjal, mitte reaalne laboriülesanne! Seda ülesannet ei tule programmeerida.</b>


* kui sinu programm kasutab korrektselt minimaxi
Ülesandeks on kirjutada talutavalt mängiv kabeprogramm. <b>Programmi võib kirjutada ja esitada kas üksi või kahekesi</b>. Kabeprogramm <b>peab</b> baseeruma D.Ecki mittemõtlevale kabeprogrammile [http://math.hws.edu/javanotes/c8/s5.html  sellest peatükist]: kasuta alusena [http://math.hws.edu/javanotes/source/Checkers.java seda  lähtekoodi]. Erinevalt Ecki programmist peab sinu programm suutma inimmängija vastu ise mängida (ja mitte lootusetult halvasti).
* 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.
"Kabe" all mõeldakse antud ülesandes [http://en.wikipedia.org/wiki/English_draughts Inglise (ameerika) kabet] 64-ruudulisel laual.


== Kahekesi programmeerimine ==
== Konkreetsed nõuded ==


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


* Programmi ettenäitamisel on kohal mõlemad tudengid. Kui ühte pole, siis tema lihtsalt punkte ei saa.
* Esimene nõue oli juba kirjas: Sinu programm peab baseeruma [http://math.hws.edu/javanotes/source/Checkers.java Ecki programmikoodile].
* 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.
* Teine nõue: juhendaja peab saama programmiga kergelt ja mugavalt mängida, kas siis graafilise kasutajaliidesega, või käsurealt (a la tikumäng).
* Kolmas nõue: programm peab mängima talutavalt hästi, kui ajapiiranguks on üks sekund käigu kohta. Talutavalt hästi tähendab seda, et kas (a) juhendaja ei suuda kiirelt mängides programmi võita või (b) juhendaja tuvastab, et programm teeb reeglina elementaarselt mõistlikke käike (näiteks, leiab paarikäigulised, lihtsad kombinatsioonid)  ja reegline ei tee väga halbu käike, nagu nuppude niisama vastasele ette käimine, elementaarsete ähvarduste takistamata jätmine jne.
* Neljas nõue: programmis peab olema realiseeritud minimax alpha-beta täiustusega.


== 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.
Mida ei nõuta, aga mis ei ole ka keelatud:


Etteantud kood koosneb neljast failist selles zip failis:
* Nagu mainitud, on see Sinu otsustada, kas jätkad Ecki kasutajaliidese tarvitamist apletina, teed apleti ümber graafiliseks omaette-rakenduseks või teed ilma graafikata käsurea-rakenduse, mis trükib seisu välja tähtede ja numbritega ja küsib mängijalt käike a la tikumäng.
* Programm ei pea tingimata lubama valida, kumba värviga mängija mängida tahab.
* Programm ei pea tingimata lubama valida , kui mitu sekundit masin mõelda võib (sel juhul peab piiriks olema üks sekund).


  [[Media:Five.zip]]
== Esialgseid, üldisi soovitusi  ==


vt ka: [[loengus tehtud kabe toorik]]


Kood on kohe edukalt kompileeritav ja töötav. Paraku mängib ta väga halvasti: käib alati esimesele vabale kohale. Selleks, et 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).
Alusta sellest, et tee valmis lihtne minimax (ilma alpha-betata) ja lihtne seisuhindaja, kus vaadatakse ainult seda, kas mõni osapooltest on võitnud.
Debugi see programm ära, mängides talle ise vastu. Tee katseid nii otsinguga sügavuseni kaks,
kolm, neli jne, kuni otsiaeg läheb liiga suureks. Uuri lihtsalt, kas programm leiab üles ühekäigulise võidu, kahekäigulise võidu jne, ning kas ta suudab blokeerida sinu ühekäigulise võidu, kahekäigulise võidu jne.


Etteantud lähtekood baseerub siin lehel varem viidatud lähtekoodile  http://www.leepoint.net/notes-java/45examples/55games/five/five.html
Seejärel asu täiustama seisuhindajat. Peamised ideed:


Võrreldes viimasega on lisatud masina käik, autoplay rezhiim ja 20x20 laua valik.
* Kas on laual (otsene võit)?
* Loe kokku lihtnupud ja tammid mõlema jaoks. Tamm pane ca kaks korda väärtuslikumaks, kui lihtnupp.
* Lisa lihtnuppudele kaalud: mida lähemal vastase viimasele reale, seda parem.


Tee katseid aja-arvestusega ja määra otsingusügavus selline, et AK klassides kunagi ei mõeldaks üle ühe sekundi.


Programmi headuse jaoks kriitiline idee on analüüsida kõik löögiahelad ja vastulöögiahelad jne alati
lõpuni läbi, vähendamata seejuures üldse otsingupuu sügavuse piirangut!


== 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:


== Kuidas minimaxi ja seisuhinde arvutamist programmeerida ==
* Esikoha võitnud programmi autorid kumbki 15 punkti.
* Teise koha võitnud programmi autorid kumbki 10 punkti.
* Kolmanda koha võitnud programmi autorid kumbki 5 punkti.


Loengus antud info ja viited:
Võistlus ei ole kohustuslik. Kuidas sellest osa võtta: ...
Loengumaterjal: [[Media:Progpohi12.PPT|Progpohi12.PPT]]


Lisaks:  
Õppejõule tuleb 2006 aasta jooksul (2007 on juba hilja!) saata emailiga järgmine info, kusjuures Subject real (emaili pealkiri) peab olema sõna <b>KABE</b>:
:http://en.wikipedia.org/wiki/Gomoku
 
:http://www.leepoint.net/notes-java/45examples/55games/five/five.html
* autorite nimed, matriklinumbrid, emailid
:http://www.ocf.berkeley.edu/~yosenl/extras/alphabeta/alphabeta.html
* programmi lähtekood
:http://web.archive.org/web/20040607185428/www.cs.vu.nl/~victor/thesis.html
* programmi valmiskompileeritud class failid
:http://www.cs.ualberta.ca/~chinook/
 
Sisulised nõuded:
 
* Teie programmi mõtlemiskomponendid peavad olema üleni teie enda kirjutatud. Artikleid lugeda ja teisi programme uurida tohib, neid otse kopeerida aga mitte.
* Kui õppejõul tekib eelmise punkti osas kahtlus, siis ta uurib autoritelt asja edasi, ning kahtluse püsimisel diskvalifitseerib kahtlase programmi võistluselt.
 
Tehnilised nõuded:
 
* Programm ei tohi AK arvutiklassides ühtegi käiku mõelda kauem, kui ühe sekundi.
* Programm peab suutma mängida nii mustade kui valgetega.
 
Seejärel korraldab õppejõud laekunud programmide vahel turniiri, kus edasi pääseb igast matshist parem.
 
Täiendavad detailid ilmuvad siia lehele hiljem.
 
== Kasulikke linke ==
 
:*[http://en.wikipedia.org/wiki/English_draughts inglise kabe reeglid] ja [http://en.wikipedia.org/wiki/Checkers kabe  üldiselt]
:*[http://math.hws.edu/javanotes/c8/s5.htm  õpikus toodud apleti] [http://math.hws.edu/javanotes/source/Checkers.java kood]: peab kasutama aluskoodina!
:* http://www.ocf.berkeley.edu/~yosenl/extras/alphabeta/alphabeta.html
:* http://www.cs.ualberta.ca/~chinook/
:* http://web.archive.org/web/20040607185428/www.cs.vu.nl/~victor/thesis.html

Viimane redaktsioon: 14. november 2007, kell 14:28

(2005 aasta ülesandevariandi leiad siit.)

NB! See ülesanne on arhiivimaterjal, mitte reaalne laboriülesanne! Seda ülesannet ei tule programmeerida.

Ülesandeks on kirjutada talutavalt mängiv kabeprogramm. Programmi võib kirjutada ja esitada kas üksi või kahekesi. Kabeprogramm peab baseeruma D.Ecki mittemõtlevale kabeprogrammile sellest peatükist: kasuta alusena seda lähtekoodi. Erinevalt Ecki programmist peab sinu programm suutma inimmängija vastu ise mängida (ja mitte lootusetult halvasti).

"Kabe" all mõeldakse antud ülesandes Inglise (ameerika) kabet 64-ruudulisel laual.

Konkreetsed nõuded

Mida nõutakse:

  • Esimene nõue oli juba kirjas: Sinu programm peab baseeruma Ecki programmikoodile.
  • Teine nõue: juhendaja peab saama programmiga kergelt ja mugavalt mängida, kas siis graafilise kasutajaliidesega, või käsurealt (a la tikumäng).
  • Kolmas nõue: programm peab mängima talutavalt hästi, kui ajapiiranguks on üks sekund käigu kohta. Talutavalt hästi tähendab seda, et kas (a) juhendaja ei suuda kiirelt mängides programmi võita või (b) juhendaja tuvastab, et programm teeb reeglina elementaarselt mõistlikke käike (näiteks, leiab paarikäigulised, lihtsad kombinatsioonid) ja reegline ei tee väga halbu käike, nagu nuppude niisama vastasele ette käimine, elementaarsete ähvarduste takistamata jätmine jne.
  • Neljas nõue: programmis peab olema realiseeritud minimax alpha-beta täiustusega.


Mida ei nõuta, aga mis ei ole ka keelatud:

  • Nagu mainitud, on see Sinu otsustada, kas jätkad Ecki kasutajaliidese tarvitamist apletina, teed apleti ümber graafiliseks omaette-rakenduseks või teed ilma graafikata käsurea-rakenduse, mis trükib seisu välja tähtede ja numbritega ja küsib mängijalt käike a la tikumäng.
  • Programm ei pea tingimata lubama valida, kumba värviga mängija mängida tahab.
  • Programm ei pea tingimata lubama valida , kui mitu sekundit masin mõelda võib (sel juhul peab piiriks olema üks sekund).

Esialgseid, üldisi soovitusi

vt ka: loengus tehtud kabe toorik

Alusta sellest, et tee valmis lihtne minimax (ilma alpha-betata) ja lihtne seisuhindaja, kus vaadatakse ainult seda, kas mõni osapooltest on võitnud. Debugi see programm ära, mängides talle ise vastu. Tee katseid nii otsinguga sügavuseni kaks, kolm, neli jne, kuni otsiaeg läheb liiga suureks. Uuri lihtsalt, kas programm leiab üles ühekäigulise võidu, kahekäigulise võidu jne, ning kas ta suudab blokeerida sinu ühekäigulise võidu, kahekäigulise võidu jne.

Seejärel asu täiustama seisuhindajat. Peamised ideed:

  • Kas on laual (otsene võit)?
  • Loe kokku lihtnupud ja tammid mõlema jaoks. Tamm pane ca kaks korda väärtuslikumaks, kui lihtnupp.
  • Lisa lihtnuppudele kaalud: mida lähemal vastase viimasele reale, seda parem.

Tee katseid aja-arvestusega ja määra otsingusügavus selline, et AK klassides kunagi ei mõeldaks üle ühe sekundi.

Programmi headuse jaoks kriitiline idee on analüüsida kõik löögiahelad ja vastulöögiahelad jne alati lõpuni läbi, vähendamata seejuures üldse otsingupuu sügavuse piirangut!

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 15 punkti.
  • Teise koha võitnud programmi autorid kumbki 10 punkti.
  • Kolmanda koha võitnud programmi autorid kumbki 5 punkti.

Võistlus ei ole kohustuslik. Kuidas sellest osa võtta: ...

Õppejõule tuleb 2006 aasta jooksul (2007 on juba hilja!) saata emailiga järgmine info, kusjuures Subject real (emaili pealkiri) peab olema sõna KABE:

  • autorite nimed, matriklinumbrid, emailid
  • programmi lähtekood
  • programmi valmiskompileeritud class failid

Sisulised nõuded:

  • Teie programmi mõtlemiskomponendid peavad olema üleni teie enda kirjutatud. Artikleid lugeda ja teisi programme uurida tohib, neid otse kopeerida aga mitte.
  • Kui õppejõul tekib eelmise punkti osas kahtlus, siis ta uurib autoritelt asja edasi, ning kahtluse püsimisel diskvalifitseerib kahtlase programmi võistluselt.

Tehnilised nõuded:

  • Programm ei tohi AK arvutiklassides ühtegi käiku mõelda kauem, kui ühe sekundi.
  • Programm peab suutma mängida nii mustade kui valgetega.

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

Täiendavad detailid ilmuvad siia lehele hiljem.

Kasulikke linke