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

Slides:



Advertisements
Liknende presentasjoner
Avhengigheter og installering
Advertisements

Askøy Sjakklubb Ungdom
HVORDAN LAGE GODE WORD-DOKUMENTER
1964 Magasinet Nyhetsbrev Web 2000 Mobil MBO Hjemmet Mortensen selger til de ansatte Nettbrett 2010 Web-TV 2011 Byråguide 2013 Event 2012 KAMPANJE.
C++ for Java-programmerere
Refleksjoner og tanker rundt bruk av C-map i skolen
Spillere Postenligaen 2012/2013
IKT ressurser for e-læring NVU-konferansen 2005 Olav Skundberg HiST, AITeL
Extreme Integration Oslo XP meetup, 22. mars, 2011 Johannes Brodwall.
Det gode Det rette Det rettferdige
Dokumentasjon og Planlegging av større IT-prosjekter
”Verifiser Forventet Funksjonalitet”
Arbeidsløs.
Etter forarbeidet og dagen i dag er målet at dere skal kunne:
Løpstur til Barcelona oktober 2011 INVITASJON FRIIDRETTSGRUPPEN HAUGESUND.
Microsoft Office2010 ved UiO Fellesmøte IT-ansvarlige januar 2011.
SnarveierPC og nettSamarbeidMicrosoft Web- tjenester Word
Velkommen! USITs utviklerforum, 20.februar Tjenestegruppe for utvikling Arrangerer utviklerforum Skal dele erfaringer på tvers på USIT Er ansvarlig.
© Lars-Erik Kindblad.  Et platformuavhengig verktøy for å automatisere build prosesser.  Støttes og drives av Apache Software Foundation.  Kommer ferdig.
Kompleksitetsanalyse
Øvingsforelesning Magnus Haug
Hovedprinsipper i Rational Unified Process
Bendik Bygstad Høgskolen i Vestfold RUP-prosjekt Sammenhengen med UML 1.Hovedstruktur i RUP-prosjekter 2.Faser og iterasjoner 3.Sammenhengen med.
© UNIVERSITETETS SENTER FOR INFORMASJONSTEKNOLOGI UNIVERSITETET I OSLO USIT Side 1 HOUSTON Planene fremover.
Norsk Finansbarometer 2011 TNS Gallup Oslo, 2011 Det norske skadeforsikrings- markedet og dets bevegelser Grafikkrapport - total.
Oppland Arbeiderblad Kjønn i kildebruk - Utviklingstrekk over en to års periode.
Forelesning 2 – WMP - PHP Introduksjon - Tom Heine Nätt.
s. 1 Evaluering av rådgivningstjenesten Foto: Crestock.com.
DNTs Unghestsatsing.
Nyhetsliste ALEPH brukermøte 17. oktober 2003 David Massey.
RFID – Communities in Action Ambisjoner og visjoner Totto
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
1. Emil Jungman Født: Posisjon: Målvakt.
1. Emil Jungman Født: Posisjon: Målvakt.
Askøy Sjakklubb Ungdom
Askøy Sjakklubb Ungdom
Askøy Sjakklubb Ungdom
Askøy Sjakklubb Ungdom
Askøy Sjakklubb Ungdom Leksjon 5: Repetisjon av grunnleggende teori om åpningspillet Vi skal se to sjakkvideoer: -En kort oppsummering av kjente åpningsteorier.
Norsk akvarieforbunds oppdrettskampanje gjennom 25 år - en presentasjon av NAF oppdrettskampanjen gjennom 25 år, og resultater fra 2007.
01. Lars Eggen Rismark Født: Posisjon: Målvakt
Bearbeide og presentere interessante bridgespill
Barnehagereformen gjennomføres i Trondheim! Sluttspurten, Gardermoen
Ankh Testing av papirprototyp av GUI. Testens forløp Visuell introduksjon av VS.NET Navigasjonsmodellen vår Revisjonskontrollsystemer Intervju ang. databakgrunn.
INF 4130 Eksamen 2008 Gjennomgang.
Oppgaver til kodegenerering etc. INF-5110, 2013 Oppgave 1: Vi skal se på koden generert av TA-instruksjonene til høyre i figur 9.10 i det utdelte notatet,
Å omfavne forandringer med ekstrem programmering(XP) Brukt i In140 Skrevet av Ola Bø Bygger på Kent Becks artikkel "Embracing change with extreme programming."
Termbaser Lars Nygaard. Termbaser Database over begreper Innhold –Definisjoner –Oversettelser –Leksikalske relasjoner –Eksempler.
Nordlandshest / lyngshest
De 222 mest brukte ordene i det norske språket..
Langtidsserie utarbeidet av Landbruksdirektoratet Alta
INF-1400 Obligatorisk Oppgave 1 Breakout-Klone Marius Andreassen Edvard Pedersen
123 Data - Førstehjelp Krokelvdalen Skole. Hva skal vi lære Slå på/av datamaskinen Hva som må til for å komme på internett Hvilke typer kommunikasjonsformer.
Gruppe 3M2 Multiplayerspill til mobiltelefon - med MIDP 2.0 André Aubert Mats Bue Martin Havnør.
2005 Informasjonsmøte torsdag Bachelorprogrammet i Utviklingsstudier.
INF 295 Algoritmer og datastrukturer Forelesning 22 Teknikker for algoritmeutvikling Hans Fr. Nordhaug/ Ola Bø.
Ortering Mål: Se på forskjellige måter for sortering.
Masteroppgave Administrasjonsmoduler til eAccess.
Hva er en robot? Roboter er mer enn maskiner som ligner mennesker.
JavaFX i kodeklubben Apps i Java. Programmering og programmeringsspråk Alle programmeringsspråk er egentlig like... men alt som følger med språket (verktøy,
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
1 INF oktober 2010 Stein Krogdahl Foreløpige foiler Dagens program: –Første time: Kap 23.5: Trær og strategier for spill med to spillere –Andre.
Kap. 9 – Computer Intelligence How Information Technology Is Conquering the World: Workplace, Private Life, and Society Professor Kai A. Olsen,
INF-1400 Obligatorisk Oppgave 3 Mayhem Clone
INF-1400 Obligatorisk Oppgave 1
Eldre og moderne teknologi
Oppgaver Hvit i trekket. Er hvit sjakk, matt eller patt?
PROTO.IO INTERAKTIV PROTOTYPING.
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
Utskrift av presentasjonen:

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 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.

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

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) 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.

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) 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!

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) Spesial trekk som Rokade og en-passant skaper litt ekstra hodebry, men den tyngste beregningen er hvorvidt kongen står i sjakk.

Testing: Perft / Divide Dybde Trekk Slå En passant Rokade Forvandling Sjakk Matt 1 20 2 400 3 8 902 34 12 4 197 281 1 576 469 8 5 4 865 609 82 719 258 27 351 347 6 119 060 324 2 812 008 5248 809 099 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 ???

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?

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

Det er mulig... Sjakksjokk i OL - sattt i matt etter tre (!) trekk 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) 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.

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.

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.

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.

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

CCRL Rating liste for Sjakkmotorer

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”.

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.

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 takk for meg og min lyn-sjakk-presentasjon