Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Sjakk Programmering 1. Historie 2. Hvordan Mechanical Turk, 1771

Liknende presentasjoner


Presentasjon om: "Sjakk Programmering 1. Historie 2. Hvordan Mechanical Turk, 1771"— Utskrift av presentasjonen:

0 Sjakk Matt Sjakk Programmering Javazone 2014, Per S Digre

1 Sjakk Programmering 1. Historie 2. Hvordan Mechanical Turk, 1771
Slo både Benjamin Franklin og Napoleon Bonaparte Jeg skal snakke litt om Sjakk Programmering, litt historie og hva det er for noe? På bildet er en sjakk-maskin laget på 1700 tallet kalt tyrkeren. Den har overhodet ikke noe med sjakk programmering å gjøre, mer marionett og dukketeater, men de som satt inni var nok flinke i sjakk. Det demonstrerer iallefall menneskets fascinasjon for tenkende maskiner.

2 Pioneerer 1948 Alan Turing skriver program, simulert i 1952, (Turing testen) 1952 Baron Bowden’s bok, “Faster than thought” (Turing beskriver sjakk) 1956 Los Alamos Chess, første kjørende program på Maniac1 1960 ELO Rating System utviklet av USCF (Arpad Elo) 1983 David Horne skriver sjakk program for Sinclair ZX81 (781 bytes) 1990 ELO test system for sjakkmotorer (Bednorz & Tönissen, BT2450) Bowden’s bok har Turing med en beskrivelse av hvordan et sjakk program kan virke 1953 skriver Turing historiens første sjakk program I 1960 ble Elo ratingen oppfunnet, som er en statistisk måling der forskjell på 100 ELO er en 64% sjanse for å vinne, 200, 76%, osv. ELO er ingen forkortelse men derimot navnet på oppfinneren. Rundt 1980 begynte det å komme masse sjakk computere og sjakk programmer. Kanskje historiens peneste data-program ble skrevet for ZX81 på bare 781 bytes? Alan Turing Arpad Elo

3 Sjakk Matt - Maskin vinner
1997 Deep Thought slår Garry Kasparov (ELO 2851) 2000 Kasparov spiller uavgjort mot Deep Thought 2004 Magnus Carlsen, 13 år gammel stormester 2007 Kasparov slår Turing’s sjakk motor på 16 trekk 2013 Carlsen blir World Chess Champion (ELO April 2014) 2014 Beste sjakk motor, Stockfish 5 (ELO 3370) 1997 ble det historie ved at IBM’s Deep Thought, computer for første gang slo regjerende verdensmester Garry Kasparov. Fra år 2000 så har det totalt vært Sjakk Matt for menneske mot maskin. Beste sjakk program Stockfish scorer 500 ELO høyere enn beste menneske, dvs 96% sjanse for å slå Magnus for hvert parti.

4 Hva er beste sjakkmotor ?
Utvikling: 1993 PGN - Portable Game Notation og FEN - Forsyth Edwards Notation 1994 Xboard - Chess Engine Communication Protocol, lar sjakk motorer konkurrere 2000 UCI - Universal Chess Interface, ny standard for sjakk motorer, rating lister 2006 CCRL - Computer Chess Rating List, offisiell sjakk motor rating motorer Vinnere: Crafty Rybka 2011 Rybka blir diskvalifisert for kopiering av Crafty og Fruit Houdini - ELO 3336 (Athlon 64 X GHz) 2014 -> Stockfish - ELO 3370 (fra Glarung av Tord Romstad) Java: Amyan - ELO plass Cuckoo Chess - ELO plass ←- (anbefales å kikke på) Carballo Chess Engine - ELO plass Tord Romstad (Stockfish) Standarder har gjort at sjakk programmer nå kan konkurrere mot hverandre. Det har vokst fram et konkurranse miljø i sjakk programmering og dagens vinner er Stockfish. Stockfish er basert på Tord Romstad’s Glarung sjakk motor, Heia Norge!

5 Hva er en Sjakkmotor ? 1. Generere trekk 2. Evaluere
3. Iterere, søke dypere

6 Generere trekk 1. Enkle: Hest og konge
2. Sliders: Løper, tårn og dronning 3. Bonde: Flytt, slå, forvandling 4. Spesial-trekk: Rokade, En-passant 5. Kongen kan ikke stå i sjakk Forhåndskalkulere låste (“pinned”) brikker - Bitboards 6. Halvtrekk og uavgjort situasjoner Teknikker A. Enkle sjakk motorer: 10*12 brett B. Bitboards: 64-bit maps (Magic-number, pawn-hashing, etc) Spesial trekk som Rokade og en-passant skaper litt ekstra hodebry, men den tyngste beregningen er hvorvidt kongen står i sjakk.

7 Testing: Perft / Divide
Dybde Trekk Slå En passant Rokade Forvandling Sjakk Matt 1 20 2 400 3 8 902 34 12 4 1 576 469 8 5 82 719 258 27 351 347 6 5248 10 828 Åpningstillingen kommer på en dybde av 6 trekk (3 hvite, 3 svarte) opp 120 millioner trekk, noe som Stockfish itererer på under et sekund. En slik telling av lovlige trekk er det en sjakk motor bruker for å verifisere trekk generering. Hvis der er feil så teller man pr trekk “DIVIDE” og fortsetter å drille ned til feil trekket. Litt moro er det kanskje at svart kan matte på 2 trekk med 8 forskjellige trekk kombinasjoner. La oss se litt mer på det. Svart matter på 2 trekk ???

8 Sjakk matt på to trekk To mulige matt stillinger for svart
To mulige matt stillinger for hvit Transposisjon ! Hvilken bonde først? Dette er den eneste måten. Hvit åpner med begge bønder til høyre for kongen, uten å kunne dekke til med hest eller løper kan svart dronning slippe forbi og matte. Teknisk mulig men jeg har aldri sett noen faktisk gjøre dette i praksis, inntil i høst. Jeg har ringet rundt de to bøndene som gir to forskjellige matt-stillinger for hvit og svart. 2 ganger 2 er 4, men hva med 8? Kluet er transposisjon, hvilken bonde flytter hvit først?

9 Testing: Perft / Divide
Dybde Trekk Slå En passant Rokade Forvandling Sjakk Matt 1 20 2 400 3 8 902 34 12 4 1 576 469 8 5 82 719 258 27 351 347 6 5248 10 828 I en verden av transposisjon på 120 millioner trekk så er faktisk bare 6% ulike stillinger Bare 6% ulike stillinger pga transposisjon

10 Det er mulig... Sjakksjokk i OL - sattt i matt etter tre (!) trekk
Dagbladet Sjakksjokk i OL - sattt i matt etter tre (!) trekk Zimbabwe-Togo 1.e4 g5 2.d4 f6 3.Qh5 mate 1-0

11 Evaluere 1. Material verdi:
Bonde=100, Hest=320, Løper=330, Tårn=500, Dronning=900, Konge=20000 2. Posisjons verdier / Piece Square Tables 3. Spesial evaluering: Dobbel-bonde, alene-bonde, forsvar, rokade muligheter, mobilitet Teknikker: 1. Zobrist Key - hashcode 2. Polyglot åpningsdatabaser 3. Slutt-spill databaser (for 5,4,3 brikker igjen ca 2GB) Hvordan setter man verdi på en stilling? Enklest er å telle de materielle verdiene, men en litt forbedret utgave er å også verdsette hvor på brettet de står, og det skal jeg straks vise noen eksempler på. Deretter må man sette verdi på posisjonering i forhold til andre brikker. I åpningspillet så dropper man evaluering hvis åpningen finnes i en åpningsdatabase. Mot slutten så slår man opp i slutt-spill databaser dersom det bare er 5 gjenværende brikker. Zobrist key er en genial hashkode som man bruker for oppslag i databasene eller egen cache og transposisjonstabeller.

12 Eksempel PSQT: Hest / Springer
(base = 100) (base = 198) (base= 258) Klassisk (Hest = 320) Stockfish Startspill (Hest = 817) Stockfish Sluttspill (Hest = 846) Generelt sett er det bra å ha brikken mot midten for maks mobilitet. I Stockfish åpningstpillet (bildet i midten) straffes man med så mye som verdien av en bonde for å plassere hesten inni motstanderens hjørne. Mot slutten er det irrelevant hvilken side av brettet man står.

13 Eksempel PSQT: Konge (base = 100) (base = 198) (base = 258)
Klassisk Startspill Stockfish Startspill Stockfish Sluttspill Kongen derimot står tryggest gjemt i en rokade stilling i starten og senere bør den komme seg mot midten.

14 Iterere, søke dypere 1. Mini-max 2. Alpha-Beta pruning
- Principal Variation Search - Late Move Reductions 3. Quiescence 4. Iterative deepening Sortering A. Merge/Insertion-sort B. Killer-move slots Transposisjonstabeller -- Double-key / Cuckoo hashing I prinsippet tenker finner man eget beste trekk ved å finne motstanderens beste respons. Alpha-Beta pruner iterering av trekk som er for dårlige, ca 90% pruning ved dybde på 4. Når iterering har nådd riktig dybde så er det viktig å fullførie en eventuell brikke-utbytting til man ikke kan bytte lenger. Det kalles “Quiescence” en “stille” tilstand. Vel å merke så nesten ti-dobler “Quiescence” søke jobben, så der forsvant det som var oppspart av alpha-beta pruningen. For at trekk filtrering skal virke best er det viktig å få de sortert etter hvor gode de er, helst uten å bruke for lang tid. Vanlige sorterings-algoritmer som merge og insertion-sort kan gjøres raskere ved slik som “killer”-sortering, en nesten sortering som bryr seg mest om de gode trekkene. Deretter bruker man hashtabeller for å slippe å gjenta trekk-evaluering for transposisjoner. Etter trekk-filtrering er det begrenset virkning av transposisjon men den gir ca 20-30% ytterligere filtrering.

15 Benchmark 1. Elo Rating: Elostat / Bayeselo
2. Arena: Teste mot andre motorer 3. Konkurrere: CCRL Nå har man en sjakk motor og hva gjør man så? Vel se hvor god den er ved å kjøre gjennom en ELO test suite som Elostat eller Bayeselo. Deretter kan man bruke Arena programmet til å teste kamp mot andre sjakk motorer. Og til slutt så laster man den opp på CCRL og konkurrerer mot 500 andre motorer. Arena Chess GUI 3.5

16 CCRL Rating liste for Sjakkmotorer

17 Fishtest Stockfish 5 Github - branches Contribution benchmark
Distributed testing Her er en skjermdump fra Stockfish’s test-miljø hvor folk kan bidra på egne git-brancher og teste distribuert før det avgjøres hva som merges til “master”.

18 Teknologi 1. Multi-thread / multi-process
4 tråder (dual-core med hyperthreading) - 2 ganger bedre 8 tråder (quad-core med hyperthreading) - 3 ganger bedre (hva med Amdahl’s lov? burde hatt ca 4 & 6 ganger forbedring) 2. Java eller C mange starter med Java og skriver om senere C/C++ er 2-3 ganger raskere (mye raskere på nye processorer med POPCNT, LSB bitscan-instruksjoner) Klart det hjelper med concurrency men ikke så meget som jeg hadde håpet. Foredringen er ikke så god som Amdahls lov skulle tilsi. Det skulle vært en 8 ganger forbedring siden jobbene er relativt like og mange, men jeg får en 3 ganger forbedring som skulle tyde på andre flaskehalser, kanskje Java? Mange starter med Java fordi det er enkelt å kode, oversiktlig, enkelt å debugge og teste, men ender senere opp med å skrive om til C for å optimalisere videre. Spesiellt kan man også benytte seg av biscan instruksjoner ved å bruke inline assembly,det gir nok en ekstra 20% forbedring.

19 Norwegian Gambit http://www.norwegiangambit.com Sjakk motor
Prototypes i Java og testes med JUnit Målet: Bli beste Java Sjakk motor Plan: Generere C-kode/ASM med Xtext / Xtend Plan: Generere C-kode kode med effektiv hard-koding Verktøysett for Eclipse Diverse PERFT/DIVIDE Junit test utilities GUI i FX/SWT som kjører direkte fra Eclipse PSQT Editor FEN Hover som gir et bilde av sjakk brett når musa går over en FEN notasjon

20 Takk for meg Hvis interesse for sjakk programmering
ta kontakt, takk for meg og min lyn-sjakk-presentasjon


Laste ned ppt "Sjakk Programmering 1. Historie 2. Hvordan Mechanical Turk, 1771"

Liknende presentasjoner


Annonser fra Google