Sjakk matt på to trekk

Download Report

Transcript Sjakk matt på to trekk

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
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)
Testing: Perft / Divide
Dybde
Trekk
Slå
En passant
Rokade
Forvandling
Sjakk
Matt
1
20
0
0
0
0
0
0
2
400
0
0
0
0
0
0
3
8 902
34
0
0
0
12
0
4
197 281
1 576
0
0
0
469
8
5
4 865 609
82 719
258
0
0
27 351
347
6
119 060 324
2 812 008
5248
0
0
809 099
10 828
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
Dybde
Trekk
Slå
En passant
Rokade
Forvandling
Sjakk
Matt
1
20
0
0
0
0
0
0
2
400
0
0
0
0
0
0
3
8 902
34
0
0
0
12
0
4
197 281
1 576
0
0
0
469
8
5
4 865 609
82 719
258
0
0
27 351
347
6
119 060 324
2 812 008
5248
0
0
809 099
10 828
Bare 6% ulike stillinger pga transposisjon
Det er mulig...
Dagbladet 06.08.2014
Sjakksjokk i OL - sattt i matt etter tre (!) 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 = 100)
Klassisk (Hest = 320)
(base = 198)
Stockfish Startspill (Hest = 817)
(base= 258)
Stockfish Sluttspill (Hest = 846)
Eksempel PSQT: Konge
(base = 100)
Klassisk Startspill
(base = 198)
Stockfish Startspill
(base = 258)
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, [email protected]
http://www.norwegiangambit.com