ITI0011:Gomoku turniir

Allikas: Kursused
Mine navigeerimisribale Mine otsikasti

Üldine

Tudengitel on võimalik võrrelda oma Gomoku algoritme teiste tudengite lahendustega. Selleks korraldatakse uue aasta alguses turniir, kus loodud programmid omavahel mängivad. Parimad tudengid saavad boonuspunkte. Loe täpsemalt järgnevatest peatükkidest.

Turniiri korralduses ja/või reeglites võib ette tulla muudatusi.

Kui osaled võistlusel, vaata seda lehte kindlasti enne esitamistähtaega - 31. detsembril.

Informatsiooni Gomoku koduse ülesande kohta (ja kasutatava rakenduse) leiad siit: ITI0011:Gomoku.

NB! Osalejatele Gomoku rakenduse uue versiooni muudetud failid: Meedia:Gomoku_v0.5_to_0.6_changed_files.zip. Paki failid lahti src/gomoku kausta. See võimaldab mänguajalugu vaadata/salvestada. Annab võimaluse oma mängude tagasisidet vaadata.

Esitamine

Osaleda saab kas üksinda või kaheliikmelise võistkonnana.

Osalemiseks on vaja oma lahendus esitada võistlusele. See toimub kahes etapis:

1) 23. detsembril registreerimine - esitada oma soov võistlusel osalemiseks. Selleks saata email ago.luberg@ttu.ee. Kirja pealkiri "Gomoku tournament", sisusse võistlejate nimed, matriklikoodid.

Koos võistlemissooviga on võimalik esitada ka oma lahendus. See lahendus ei pea olema lõplik. Kõik lahendused, mis 23. detsembriks on saadetud, teevad juhuslikult mänge teiste lahendustega. Iga tudeng saab tagasisidet oma programmi mängude kohta. Seega on see hea võimalus testida koodi ja avastada vigu.

2) 31. detsembril lõplik kood - esitada oma lõplik kood, mis võistlusel osaleb. Võistkond saadab emaili ago.luberg@ttu.ee aadressil pealkirjaga "Gomoku tournament", kus on (igaks juhuks uuesti) võistlejate nimed, matriklikoodid ning lahenduse lähtekood. Lahendus peab olema tervenisti ühes failis. Täpsem juhis esitamise kohta selgub jooksvalt (arvatavasti StudentStrategyXXXXXX.java, kus XXXXXX on matriklinumber, milles on klass, mis implementeerib ComputerStrategy interface'i).

Enne lõplikku esitamist palun kontrollige viimast versiooni Gomoku rakendusest. Suure tõenäosusega see muutub (kuigi võimalik, et tudengite koodiosa see ei puuduta).

Turniiri reeglid

Osalemise eeldus võiks olla see, et teie kood võidab vähemalt tugevamat vastast vähemalt pooltel juhtudel. Seda otseselt kontrollima ei hakata.

Ranged reeglid rakendusele (mille eiramine tähendab disklahvi):

  • ei tohi kasutada võrguühendust
  • ei tohi kasutada faile (ei lugemiseks ega kirjutamiseks)
  • ei tohi üritada vastase programmi segada mittemänguliselt (ehk siis koodis mingil kujul; laual vastase takistamine on vastupidi soovituslik)
  • programm ei tohiks oma käigu ajal anda Exceptionit

Muud reeglid lahendusele:

  • peab töötama nii valgete kui mustade nuppudega mängides
  • peab tagastama käigu vähemalt 1.0 sekundi jooksul. Kui seda ei juhtu, tehakse kasutaja eest suvaline käik (vabale ruudule). TODO: määrata konstant TIME_LIMIT, millega saaks vajadusel mängida.
  • kasutada saab vaid Java standardteegi funktsionaalsust. Kui tahate mingit muud algoritmi kasutada, peate selle lähtekoodi kaasa panema, JAR-faile ei saa kaasa panna.
  • kood peab olema võistleja(te) enda kirjutatud. Kui õppejõul tekib kahtlusi, on tal õigus lasta tudengi(te)l oma koodi seletada.
  • programm peab töötama ka mittetühjalt algseisult alustades.
  • lahendus töötab nii 10x10 kui 20x20 laual.
  • lähtefaili maksimaalne suurus on 1MB (ehk siis väga suurt andmebaasi lähtekoodi lisada ei saa, samas 1MB annab mingil määral vabadust selles osas).

Lahendus võib olla mitmelõimeline (ingl multi-threaded).

Turniiri korraldus

Sõltuvalt osalejate arvust korraldatakse alagrupi turniirid ja seejärel finaalturniir (play-off). Korraldajatel on õigus teha alagrupi turniiri ja finaalturniiri vahel mõnepäevane paus, mille jooksul finaalturniirile saanud võistlejad saavad oma alagrupi mänge üle vaadata ja soovi korral lahendust täiendada.

Mängude korraldamine pole veel selge. Arvatavasti toimub iga kahe mängija vahel mäng selliselt:

  • mängitakse 10x10 laual N mängu nii, et mängija A on valge ja B on must.
  • mängitakse 10x10 laual N mängu nii, et A on must ja B on valge.
  • korratakse sama 20x20 laua peal
  • sõltuvalt jooksvale tulemusele, korraldatakse mänge erinevatest algseisudest. Ehk siis on mingi konkreetne algseis, kus ükskord alustab mängija A ja teisel korral mängija B.

Kui osalejaid on piisavalt, näiteks rohkem kui 4 või rohkem kui 8, korraldatakse alagrupiturniir. Alagruppidesse loositakse mängijad juhuslikult. Igasse alagruppi peaks jääma 3-4 mängijat, kellest 2 saavad edasi. Vastavad numbrid võivad muutuda. Oluline oleks see, et finaalturniirile pääsejate hulk oleks kahe aste (et play-off toimiks õigesti).

Finaalturniiri puhul võidakse korraldada ka variant, kus kõik mängivad kõikidega läbi. See peaks andma põhjalikuma ülevaate parimast mängijast (play-off süsteemis võib mõni hea mängija kogemata välja langeda, sest mängib kohe esimeses voorus turniiri võitjata, muidu see mängija oleks võinud 2. koha saada).

Lisapunktid

Parimad võistkonnad saavad lisapunkte, mis lähevad arvesse lõpphinde saamisel. Boonuspunktide suurus selgub peale seda, kui on paigas, palju osalejaid on. Kindlasti jagatakse välja kahele parimale võistkonnale lisapunktid. Kui osavõtjaid on palju, saab see number suurem.

Et julgustada võistlusest rohkem osa võtma, teeme lisapunktidega nii, et need, kellel neid vaja pole (kellel on näiteks hinne juba käes), nemad punkte ei saa (selle võrra saavad järgmised kohad. Küll aga tiitel jääb ikka neile alles (näiteks esikoht jne).

Tulemused

Osalejaid oli 3. Kõik mängisid kõikidega läbi nii 10x10 kui ka 20x20 laual. 10 mängu mängis üks mängija valgetega (ehk alustas), 10 mängu teine mängija. Seega iga kahe mängija vahel peeti 40 mängu:

1) 10 mängu 10x10 laual, kus mängija A alustab, 
2) 10 mängu 10x10 laual, kus mängija B alustab, 
3) 10 mängu 20x20 laual, kus mängija A alustab, 
4) 10 mängu 20x20 laual, kus mängija B alustab.

GOMOKU Tulemused:

  10x10 20x20 10x10 20x20 10x10 20x20 Võite Viike Kaotusi Punktid Koht
P1 P2 P3
valge P1 10-0 8-2 10-0 10-0 59 15 6 59 I
must 5-0 6-4 0-0 10-0
valge P2 0-5 4-6 10-0 10-0 27 24 29 27 II
must 0-10 2-8 1-0 0-0
valge P3 0-0 0-10 0-1 0-0 0 29 51 0 III
must 0-10 0-10 0-10 0-10

Viik ja kaotus annavad 0 punkti, võit annab 1 punkti.

0-0 tähendab, et kõik 10 mängu lõppesid viigiga. 10-0 tähendab, et mängija, kes on vastaval real, võitis kõik mängud mängijat, kes on vastavas veerus. 0-10 tähendab, et mängija, kes on vastaval real, kaotas kõik mängud mängijale, kes on vastavas veerus.

Lisapunktid järgmiselt:

  • Kõik osalejad saavad 10p lisaks.