Dots-and-Boxes analüüsi metoodika

link: http://wilson.engr.wisc.edu/boxes/method/

Vaadates kõiki võimalikke käike toodab n! aega analüüsiks. Minu programm vaatleb iga võimaliku positsiooni asemel, mis tekitab a-2n time analüüsi. Kuigi 2n saab suure kiiresti, see on kusagil lähedal nii suur, kui n!.

Tagurpidi liikumist

iga positsiooni Jaoks programmi kauplustes parim tulemus mängija liikuda tuleviku kastid. Karbid juba ümbritsetud ignoreeritakse. Seega, iga seisukoht on üheselt tuvastatud read olemas. Puuduvad andmed selle kohta, hinded, kuni käik on hoitud.

Analüüs ehitustööde tagasi positsioonist, millel on kõik read täidetud. See seisukoht on antud väärtus antud esimeses line andmete faili (tavaliselt null). Seejärel programm töötleb positsioonide üks vähem line täidetud. Kui need on tehtud, see töötleb positsioonide teine joon vähem. Lõpuks ta läheb tagasi algasendisse.

Iga selline seis programm leiab kõik võimalikud käigud ja hoiab skoor parim tulemus mängija liikuda.

Iga võimalik liikuda programmi esimene kontrollib, kas null, üks või kaks uut kastid olid moodustatud. Kui ei ole uued kastid olid moodustatud, skoor liikuda on negatiivne tulemus on tekkinud seisukoht, kuna positsioon on parim tulemus teine mängija salvestatud. Kui üks või kaks uut kastid olid moodustunud, tulemus liiguvad tulemus on tekkinud seisukoht, pluss mitmed uued karbid, kuna mängija on endiselt liikvel.

Leida seisukohti etteantud ridade arv

seisukoht on esindatud binaarne number üks bitt (binary digit) koht määratud, et iga rida. Natuke on 0, kui liin on olemas, ja 1, kui joon puudub. (Ma peegelpildis tavaline konventsiooni et muuta see lihtsamaks, et kontrollida uute kastides.)

Ma jagage read rühmadesse. Iga rühma read on esindatud järjestikuse bittide seisukoht on binaarne number. Need bitti saab kopeerida ja pannakse eraldi number riigi esindamine liinide grupis. Näiteks 3×3 mäng on 24 read kokku. Programm kasutab kahte rühma read, millel on 12 read iga. Iga võimaliku line count grupp (0 kuni 12), programm ehitab nimekirja numbrid esindavad rühma numbriga read, mis on olemas. Seejärel leida positsioonide n jadad, ma ühendada kõik esimese rühma riiki, kus ma jadad teise grupi riigi n-i jadad, kus ma varieerub üle kõik võimalikud väärtused, mis ei tulemusel on võimatu ridade arvu, kas rühma. Näiteks kui soovite leida kõiki positsioone, 15 read 3×3 mäng, programm ühendab kõik esimese grupi riigid, kus 3 rida, kõik teise rühma riigid, millel on 12 read (seal on ainult üks neist), siis kõik esimese grupi riigid, kus 4 rida, kõik teise rühma riigid 11 read, … ja lõpuks kõik esimese grupi riigid, millel on 12 read (jällegi, on ainult üks võimalik) kõik teise rühma riigid, kus 3 rida.

Kontrollin uued karbid

Iga rida on antud indeks-arv, mis vastab tema natuke seisukoht on binaarne number. Programm on kaks komplekti box testi väärtused, mis on viidatud indeksi abil mitu uut liini. Üks komplekt kontrollib uue kastis või vasakule, uus rida. Muude kontrolli alla kasti või õigust uue liini. Need väärtused on kasutada, et vaadata, kas teised 3 rida on juba olemas. Bits vastavad need 3 rida on seatud 1; kõik muud bitti on seatud 0. Test on tehtud kasutades loogilist “ja” koostööd seisukoht on binaarne number ja katse väärtus. “Ja” toiming, iga bit seisukoht, toodab 1, kui vastavad bitid on mõlemad väärtused on määratud; 0 teisiti. Kuna positsioon on binaarne number on bittide väärtuseks on 0, kui liin on olemas, on “ja” see ja testi väärtust toodab null tulemus siis ja ainult siis, kui kolm liini on juba olemas.

Kui kast ei ole olemas, sest joon on äärel, katse väärtus on kõik bitti komplekt, seega testimise kõik read on kohal. Kuna test on tehtud enne uus liin, mis on paigutatud asendisse, on binaarne number, seal on vähemalt üks rida ei määrata ja katse see väärtus on öelda, ei ole uus kast.

Kasutades palju joon rühmade

Pärast Islandi analüüs jooksis just poole tunni jooksul, ma sain aru, et computing ajal ei oleks probleem 3×5 mängu analüüsi. Islandi mäng on 30 avatud liinid kuigi 3×5 mäng on 38 avatud liinid mistõttu on 256 (28) korda raskem. 256 korda poole tunni jooksul on 128 tundi või umbes 5 päeva. Kuna ma suutnud luua programm, et start, kus see pooleli jäi pärast katkestada või reboot, 5 päeva võib kergesti teha enam ööd ja nädalavahetustel. Nii et probleem sai figuring kuidas teha see mahub minu masin, millel on 256 MB RAM ja 16 GB vaba kõvaketta ruumi.

Alguses see ei tundu võimalik. Säilitamine analüüsi võtaks 238 baiti või 256 GB kettaruumi. Ruumi vaja, samas RAM väärtuse arvutamiseks positsioonide 19 jadad samas viitavad tulemused positsioonide 20 jadad oleksid 56 GB, pigem rohkem kui mu veerandi GB RAM.
Oletades, et read olid jagatud kahte rühma 19., kus iga rida, ma võiks olla RAM just väärtused, mis vastavad antud ridade arv iga kahe rühma. Näiteks, kui teed positsioonide 19 read, ma võiks hinnata positsioonide 9 read esimeses grupis ja 10 read teises rühmas. Ma helistan neile 9/19 10/19 seisukohti. Arvutada nende väärtusi ma tahaks viidata kahele positsioonide kogumid, 20 read: 10/19 10/19 ja 9/19 11/19. Ma ei vaja nii neid, 20 rida komplekti mälu korraga; neid võib kasutada ühe korraga salvestades parima punktisumma arvestades lihtsalt uute liinide esimese rühma kõigi 9/19 10/19 positsioonid ja siis näeme, kui mingit paranemist võiks teha hinded uus liin, teises rühmas. Kaks puhvrid võtaks lihtsalt 16 GB.

Siis mõistsin, et ma võiks lõhkuda read arvesse rohkem kui kaks rühma. Kasutades 6 rühmad, ma võiks lõigata RAM vaja lihtsalt 426 MB. Veel lõigata, kasutades sümmeetria (vt allpool), mis on tehtud see sobib. Muidugi, leida, näiteks, hinded jaoks 4/8 3/6 3/6 3/6 3/6 3/6 positsioonid, programm oli lugeda kuue erineva komplekti hinded 20 read–, millel mõlemal on veel üks rida ühes kuus rühma.

Sümmeetria

3×5 mäng on sümmeetriline vertikaalselt ja horisontaalselt, nii et ära sümmeetria, ma võiks jagada ruumi nõuetele, 4 (tegelikult 3 minu lõplik rakendamine). Paul Stevens teatas viga test, sümmeetria üle diagonaal ruudukujuliste pardal.

Arvutada tulemus seisukoht, programm vaatleb eelnevalt välja arvutatud punktisummad positsioonid, mis tulenevad lisada veel üks rida. Siiski, lisades line tulemuseks võib olla asend, mis peab olema sümmeetriliselt ümber enne selle tulemus võib leida. Veenduge, et tulemus on positsioon, mis tuleneb sümmeetriline ümberkujundamine on kohe saadaval, on vajalik, et ümberkujundamine kaart tahes read ühte rühma. Sel viisil ridade arvu igas rühmas jääb samaks pärast ümberkujundamise.

Enne programmi määrab read rühmi, siis esimene näeb read, mis on seotud ühe teise poolt sümmeetriline ümberkujundamine. Selles 3×5 mäng on seitse komplekti 4 read ja viied komplekti 2 read, mis on nendega seotud. Programm siis määrab komplekti read rühmadele. Eest 3×5 mängu kasutades 256 MB RAM, kuude rühma tulemus (iga kahe komplekti read) suurused 8 6 6 6 6 6.

Et määrata, kui positsioon peaks olema sümmeetriliselt ümber, programm vaatleb read esimeses grupis ainult. Ajal setup etapi programm skaneerib läbi kõik võimalikud line koosseisudes esimese rühma read. Iga konfiguratsiooni, see kehtib vertikaalne peegeldus, horisontaalne tagasiside ja eneseanalüüsi kaudu päritolu muutusi. Kui üks neist ümberkujundamise tulemuste arv riigi liinid rühm, mis on arvuliselt väiksem number, riigi originaal read, siis (1) konfiguratsioon EI kuulu seotud ratsioonid antud ridade arvu määrata ja (2) teave on salvestatud, mille suhtes sümmeetriline ümberkujundamise tuleb kasutada, et saada seisukoht, kelle skoor on arvutatud–mis on kuidas saada vastava konfiguratsiooni madalaima numbriline väärtus riik on oma read.

Kuigi alles esimene grupp on kasutatud, et näha, kui ümberkujundamisel tuleks teha, kui ümberkujundamisel tehakse, mõjutab read kõik grupid.

Säästes kettaruumi

hinded seisukohti etteantud ridade arvu igas rühmas on salvestatud ühe ketta faili. Näiteks, hinded jaoks 4/8 3/6 4/6 2/6 3/6 3/6 positsioonid on salvestatud faili:
\Kastid\3×5\19\4\3\4\2\3.bin
Kui längkriipsud eraldi pesastatud kaustade nimed. 3×5 on mängu nimi on analüüsitud. 19 on ridade arv kokku on asendis. Ülejäänud kausta nimed ja faili nimi pärit on, et ridade arvu rühmades. Ridade arvu viimase rühma on mitte kasutada, kuna see on fikseeritud teised numbrid. .bin – see on binaarne fail–selle sisu ei saa otseselt vaadelda. Pesastatud kaustad on kasutatud, sest Windows protsesside kaustad, kus suur hulk faile väga aeglaselt.

Sümmeetriline muutusi katkesta kettaruumi vaja 256 GB 85 GB. Siiski, see ei ole vajalik säilitada kogu analüüsi tulemusi. Niipea, kui programm oli tehtud positsioonide 19 read tulemused positsioonide 20 read võiks välja jätta. Vaid 16 GB vaba kõvaketta ruumi, programm hoiab tulemused positsioonide 15 või vähem ridu. Selle tulemuseks on “avatud raamat”, 3×5 mäng.

Aga, jätad lihtsalt tulemuste 20 rida seisukohti ja 19 rida positsioonide kulub ikka 22 GB. See on lahendatud, kustutades osa 20 read positsiooni faile, kui neid enam ei vajata täiendavat arvutamine hinded 19 read seisukohti. Kui programm läheb läbi kõik võimalikud kombinatsioonid read loeb rühmadele, et lisada kuni 19 read, loota esimese grupi read, mis kunagi väheneb. Seega, kui arvestada esimese rühma read liigub alates 0 kuni 1, näiteks kõik failid, alustades \Kastid\3×5\20\0\, saab kustutada. Selle muudatuse analüüs sobib 16 GB saadaval.

Ketid

sel Hetkel, programm oli endiselt ebapiisav, et lahendada 5×5 probleeme 12. peatükk Dots-and-Boxes Mängu poolt Elwyn Berlekamp (A. K. Peters, 2000). Kui arvutid jätkuvalt kahekordistada oma suutlikkust iga 18 kuu tagant, me peaks olema võimalik analüüsida kogu 5×5 mängu 2034, kuna see on veel 22 read kui 3×5 mäng, mis oli analüüsida 2001. aastal. Programm nüüd saab tegeleda positsioonide kuni 36 avatud liinid, kui positsioon on nr sümmeetria ja 14 Gb kettaruumi on saadaval. Mis tähendas, et just 5×5 positsioonide 24 või enam read (out of 60) saaks lahendada. Ükski peatükk 12 probleeme olnud, et paljud jooned.
Kett on string, ühe või mitme lahtrid kaks poolt täidetud. Ma tegin oletuse, et kui üks mängija võttis liini ahelas, vähemalt üks parimaid mängida read on kaasatud kõik ülejäänud liinid kett on täidetud, üks mängija või teine, enne kui kõik read mujal on täidetud. Iga komplekt kett read on esindatud ühe “pseudo-line”. Asukoha esindus programm on lihtsalt üks natuke öeldes, kas kett on täiesti täis või on veel täielik tühi. Näiteks siin on positsioon probleem 12.18 (enne kriipsjoon liikuda):

+     +     +  .  +     +     +
            |  .  |
            |  .  |
            |  .  |
+     +  .  +  .  +     +     +
      |  .  |  .
      |  .  |  ....
      |  .  |
+     +  .  +-----+-----+-----+
      |  .  |
      |  .  |  ..........
      |  .  |  .
+     +  .  +  .  +-----+  .  +
            |           |  .
            |     ....  |  ....
            |        .  |
+     +     +  .  +  .  +-----+
            |  .
            |  ....
            |
+     +     +-----+     +     +

Punktid mark ketid, mis on iga esindatud ühe pseudo-line. 60 read, 15 on täidetud, 30 on tühi, ja 15 on seotud 6 ketid. Seisukohti, mis võivad tekkida sellest, et see lähtepositsioon on esindatud 36 bitti–30 tühjad read ja 6, 6 ketid. Seega, see seisukoht on vaevalt praeguse võimekuse programmi.

Paljud positsioonid, mis tulenevad antud lähtepositsioon, esialgne ketid on saanud osa enam ketid. Programm ei muuda positsiooni esindatuse süsteemi olukord. Pseudo read moodustavad jätkuvalt veidi esialgse ketid. See on, sest seisukoha esindamine on kasutada “aadressi” juurdepääsu eelnevalt välja arvutatud punktisummad.

Hinnates, kas liigub esmane ahel on hea mängija liikuda, programm on saadaval net punkte, mille parimad mängida tulevikus kastid mängija liikuda pärast kogu esialgse kett on täidetud. Programmi, siis on vaja kontrollida, kastid ümber keti, et näha, mis mängija on esimene võimalus võtta kastid ahelas, et näha, kas see mängija oleks kasu tegemine ohverdama, et vältida tuua liikuda pärast kett on täidetud, ning kontrollida, kas kett on pikendatud, või isegi teha osa aas.

Kui esmane ahel on 3-kast, kahepoolne mõlemal pool lihtsalt kaugemale kett, siis mängija liikuda saab liikuda kett, mille kogumine ja on võimalus võtta kastid ahelas. Muidu, see on teine mängija, kes on valik ahelas. Ma helistan inimest, kellel on võimalus võtta lahtrid keti, “chain mängija”.

Kui esmane ahel on pikendatud piisavalt, nii et kett saab mängija teha ohvriks hiljem, siis tulemus pärast kett on täiesti täis juba kajastab seda võimalust ja kett mängija võtab kõik kastid esialgse ahela. Muidu, programm kontrollib, kas seal on piisavalt ruumi ohvriks, eeldades, et parim liiguvad kett mängija poolt algselt liikvel ja vaadates esialgse ahela ja kõik laiendid. Kui seal ei ole ikka veel piisavalt ruumi ohverdada, kett mängija võtab kõik lahtrid. Muidu programm kontrollib, kas ohver on kasumlik ja kui on, siis hindab liigub kett mängija algselt liikvel eeldades, kett-mängija muudab ohverdama.

Viimase käigu karistus

programm võimaldab karistus tuleb kohaldada skoor mängija, kes teeb viimase käigu. Kui see karistus on piisavalt suur, liigub valitud parim on samad, nagu on valinud nimstring analüüs. Näiteks, mul on analüüsitud probleem 11.16 karistuste suurendamise ulatus. Programm ei võimalda osaline karistused, sest nad oleks pakkumise nr täiendav teave:

  • Kui sa jooksed analüüs kahe erineva karistused tulemus liikuda ei saa muuta rohkem kui pluss või miinus erinevus karistused.
  • järjestikuse täisarvu karistused, üks analüüsi tulemusi kõigis isegi täisarv hinded ja muud tulemused kõik paaritu täisarvuni hinded.
  • Seega järjestikuse täisarvu karistused, hinded on alati muutub +1 või -1…maksimaalselt võimalik.
  • Seega saad punkte iga osaline karistuse määranud interpoleerivate vahel hinded kõrval integer karistused

Lollakas liigub

lõplik versioon programm hõlmab lollakas liikuda analüüs. Väljund, tulemus on tähe koos. v kui mängija tuleb teha järgmine lollakas liikuda võikui mängija B peab. Kui kumbki mängija peab tegema lollakas liikuda, nr järelliide on kasutatud. Ajal analüüsi, kaks bitti bait, mida kasutatakse, et hoida skoor kasutatakse, et hoida lollakas riigi liikuda. See jätab lihtsalt 6 bits hinded. Seega, ainult siis, skoor alates -32 kuni +31 saab salvestada. See muudab lollakas liikuda analüüsi programmi versiooni ebausaldusväärne lauad suurem kui 5, 6. Seega, ma saan versioon olemas, mis ei ole lollakas liikuda analüüsi kasutamiseks suuremates lauad.

Leida lollakas liigub mõistlik arvuti aeg, programm teeb lollakas boonus kontrollige alati, kui on võimalik jäädvustada kasti. Kui kast on teisel pool liini kaalumisel on täpselt kaks teisel pool on juba täidetud, programm leiab, et vastane on eelmise liikuda oli lollakas.

Nurgad

William Fraser kirjutas: “Kas te võtate arvesse asjaolu, et [ab] ja [ba] vt samaväärse lingid? Seega (kui paned kaheksa nurka lingid arvesse viimase 8 line grupp) teil on võimalik salvestada ainult 3^4=81 kanded asemel 2^8=256. See oleks täiesti sõltumatu rotatsioon/peegeldus. See lõikab ketta kasutus 75% ja mälukasutus keskmiselt 75%.”

Ma rakendanud seda ettepanekut, mis võimaldas analüüsida 4×4 mäng.