220 likes | 431 Views
Sjakk Matt. Sjakk Programmering. Javazone 2014, Per S Digre. Sjakk Programmering. 1. Historie 2. Hvordan. Mechanical Turk, 1771 Slo både Benjamin Franklin og Napoleon Bonaparte. Pioneerer. 1948 Alan Turing skriver program, simulert i 1952, (Turing testen)
E N D
Sjakk Matt Sjakk Programmering Javazone 2014, Per S Digre
Sjakk Programmering 1. Historie 2. Hvordan Mechanical Turk, 1771 Slo både Benjamin Franklin og Napoleon Bonaparte
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) Alan Turing Arpad Elo
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 2882 - April 2014) 2014 Beste sjakk motor, Stockfish 5 (ELO 3370)
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 - 500+ motorer Vinnere: 1986-1989 Crafty 2005-2010 Rybka 2011 Rybka blir diskvalifisert for kopiering av Crafty og Fruit 2011-2014 Houdini - ELO 3336 (Athlon 64 X2 4600+ 2.4 GHz) 2014 -> Stockfish - ELO 3370 (fra Glarung av Tord Romstad) Java: Amyan - ELO 2598 - 93 plass Cuckoo Chess - ELO 2589 - 96 plass ←- (anbefales å kikke på) Carballo Chess Engine - ELO 2167 - 277 plass Tord Romstad (Stockfish)
Hva er en Sjakkmotor ? 1. Generere trekk 2. Evaluere 3. Iterere, søke dypere
Genereretrekk 1. Enkle: Hestogkonge 2. Sliders: Løper, tårnogdronning 3. Bonde: Flytt, slå, forvandling 4. Spesial-trekk: Rokade, En-passant 5. Kongenkanikkeståisjakk Forhåndskalkulerelåste (“pinned”) brikker - Bitboards 6. Halvtrekkoguavgjortsituasjoner Teknikker A. Enklesjakkmotorer: 10*12 brett B. Bitboards: 64-bit maps (Magic-number, pawn-hashing, etc)
Testing: Perft / Divide Svart matter på 2 trekk ???
Sjakk matt på to trekk To mulige matt stillinger for svart To mulige matt stillinger for hvit Transposisjon ! Hvilken bonde først?
Testing: Perft / Divide Bare 6% ulike stillinger pga transposisjon
Det er mulig... Dagbladet 06.08.2014 Sjakksjokki OL - sattti matt ettertre (!) trekk Zimbabwe-Togo 1.e4 g5 2.d4 f6 3.Qh5 mate 1-0
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)
Eksempel PSQT: Hest / Springer (base = 198) (base = 100) (base= 258) Klassisk (Hest = 320) Stockfish Startspill (Hest = 817) Stockfish Sluttspill (Hest = 846)
Eksempel PSQT: Konge (base = 198) (base = 100) (base = 258) Klassisk Startspill Stockfish Startspill Stockfish Sluttspill
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
Benchmark 1. Elo Rating: Elostat / Bayeselo 2. Arena: Teste mot andre motorer 3. Konkurrere: CCRL Arena Chess GUI 3.5
CCRL Rating liste for Sjakkmotorer
Fishtest Stockfish 5 Github - branches Contribution benchmark Distributed testing
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)
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
Takk for meg Hvis interesse for sjakk programmering ta kontakt, per@digre.com http://www.norwegiangambit.com