woensdag 30 mei 2012

Analyseren met de computer

Bij het nalezen van de partijcommentaren van de Russische grootmeester Sergey Shipov op het wereldkampioenschap schaken, viel mij 1 uitspraak bijzonder in de smaak: 'Three aren't enough for me now' zie: chessintranslation. Hiermee bedoelt hij dat zelfs 3 computers onvoldoende zijn om kwalitatief optimale verslaggeving te doen. Uiteraard is dit een relatief begrip maar ik begrijp wel dat vandaag tezelfdertijd gebruikmakend van verscheidene computers betere analyses gemaakt kunnen worden, zeker als die online en dus onder grote tijdsdruk moeten gebeuren.

Ik beschouw mijzelf als 1 van de eerste schakers die opgegroeid zijn compleet omgeven door computerprogramma's. De meeste spelers van mijn leeftijd zullen nog wel het pre-computertijdperk meegemaakt hebben maar omdat ik pas op mijn 20ste een eerste officiĆ«le rating kreeg, heb ik het jeugdschaken toen nog zonder (serieuze) computerassistentie bijna helemaal overgeslagen. 

Over welke methodes toe te passen bij het analyseren met computers bestaat weinig lectuur. Het is ook een onderwerp waarover meestal niet gepraat wordt op de clubavonden want computers worden nog steeds gezien als pretbedervers. Ik kreeg laatst de vraag op chesspub waarom iets analyseren als je dit zelf toch niet speelt. Analyseren, wordt dus eerder bekeken als een noodzakelijk kwaad om punten te scoren en/of progressie te maken en niet iets plezierig. Persoonlijk heb ik vaak evenveel plezier bij het uitwerken van een analyse met computerprogramma's dan het spelen van een bordpartij wat niet betekent dat ik exclusief thuis wil analyseren want af en toe menselijk contact is nodig.

'Modern chess analysis' van de in 2009 overleden Amerikaanse correspondentiegrootmeester Robin Smith is wellicht het beste wat er op de markt beschikbaar is van materiaal over analyseren met de computer maar het boekje dateert weeral van 2004 en dus zou een opvolger welkom zijn. Dit ga ik hier niet doen maar ik zal wel even kort bespreken welke evolutie ik meegemaakt heb in dit domein en dan specifiek betreffende het analyseren van gespeelde bordpartijen. Vandaag kan ik toch al buigen op ongeveer 20 jaar expertise als we mijn tablecomputers mogen meerekenen.

Aanvankelijk analyseerde ik mijn partijen zoals vandaag de meeste amateurs hun partijen analyseren. Ik keek waar mijn partij afweek van de theorie. Vanaf dat punt vermeldde ik bij elke gespeelde zet of het dezelfde zet was als de computer na een paar minuten rekenen en indien niet dan gaf ik op hoeveel de evaluatie afweek + welke zet met optimale variant beter was volgens de computer (in de beginjaren geen automatische feature in de programma's). Eenmaal de hele partij door de mangel gehaald, kleurde ik de analyses op met persoonlijke proza en analysetekens om het achteraf leesbaarder te maken.

Ik heb gedurende de vele jaren, gebruik gemaakt van vele engines: de Fritzserie, Rebel, Shredder, Rybka,... en dit leerde mij dat programma's vaak andere hoofdvoortzettingen kiezen die bovendien soms grondig afwijken in evaluatie. Omdat het voor een speler moeilijk of zelfs onmogelijk is om te weten welke engine nu de juiste evaluatie opgeeft (soms geen van beiden want de evaluatie ligt in het midden) , liet ik de engines het onderling uitvechten. Omdat het onderling controleren van de engines een exponentieel tijdsverslindende activiteit is, leerde ik al snel dat ik mijzelf moest beperken tot maximaal mijn 2 topengines.

Het algoritme dat ik gebruikte bij het bepalen van de juiste evaluatie, is uiteraard over de jaren sterk geĆ«volueerd. Al snel zag ik in dat het onmogelijk was om voor elke andere zet dat een engine opgaf, een nieuwe diepgaande analyse te maken zodat ik mij beperkte tot de zetten waar het evaluatieteken veranderde. Dit betekent bijvoorbeeld van gelijke stelling (=) naar licht voordeel (+/=). Een 2de grote evolutie (ergens toegepast rond 2004 voor het eerst) betekende de toepassing van het retrogradesysteem. Je analyseert niet meer van de beginstelling maar start van de eindpositie waar de evaluatie veelal heel duidelijk is. Het grote voordeel is dat je automatisch altijd over een vrij nauwkeurige evaluatie beschikt van de gespeelde zet en je dus enkel moet concentreren op de eventueel betere computerzetten. Hieronder wordt het algoritme uitgelegd:

Algoritme
Evalulatiepartijkeuze is gekend op voorhand door gebruikmakend van retrogradeanalyse
Programma 1 en 2 zijn de 2 sterkste schaakengines beschikbaar.
Evaluatiefunctie heeft 2 parameters (op welke zet, met welk programma).
De gekozen zet voor de evaluatiefunctie gebeurt ofwel op een specifiek gekozen zet ofwel op de laatste zet van een analysevariant.
De evaluatie heeft als ouput: +-; +/-; +/=;=;-/=;-/+;-+. Dit is gelinkt aan het gekozen programma in infinite analysis mode. Bij het bepalen van de evaluatie van een zet, stop ik normaal na maximaal 1 minuut behalve als het een specifiek gekozen computerzet is en de evaluatie verschilt t.o.v. de partijzet dan wacht ik maximaal tot 10 minuten.
De evaluatie van 2 zetten zijn gelijk wanneer de output gelijk is.
De analysefunctie heeft 2 parameters (op welke zet, met welk programma).
Voor de analysefunctie wordt gebruik gemaakt van correspondentieanalyses. Ik gebruik normaal 10 plies diep, 1 hoofdvariant, geen zijvarianten, 60 seconden per zet.
De vergelijkfunctie heeft 2 parameters (variant A, variant B).
De output van de vergelijkfunctie is een zet, genoemd vergelijkzet hieronder waar de 2 varianten afwijken. Programma 1 wijkt af wanneer programma1 een zet voorstelt in een variant die uiteindelijk tot een slechtere evaluatie leidt voor hetzelfde kleur van de afgeweken zet. Het omgekeerde geldt voor programma 2.
Het beschreven algoritme hieronder is reitiratief en eindigt als een stop wordt gehaald wat soms wel eventjes kan duren.


1) Evaluatiepartijkeuze = Evaluatie (programma 1keuze, programma1)
2) Ja: vervolg; Nee: ga naar nr 39
3) Evaluatiepartijkeuze = Evaluatie (programma 2keuze,programma 2)
4) Ja: stop; Nee: vervolg
5) Analyse (programma2keuze, programma 2)
6) Evaluatiepartijkeuze = Evaluatie (Analyse (programma2keuze, programma 2), programma2)
7) Ja: stop; Nee: vervolg
8) Evaluatiepartijkeuze = Evaluatie (Analyse (programma2keuze, programma 2), programma1)
9) Ja: stop; Nee: vervolg
10) Analyse (programma2keuze, programma 1)
11) Evaluatie (Analyse (programma2keuze, programma 1), programma1) = (Analyse (programma2keuze, programma 2), programma1)
12) Ja: vervolg; Nee: ga naar nr 15
13) Evaluatie (Analyse (programma2keuze, programma 1), programma2) = (Analyse (programma2keuze, programma 2), programma2)
14) Ja: stop; Nee: vervolg
15) Vergelijk (Analyse (programma2keuze, programma 1), Analyse (programma2keuze, programma2))
16) programma 1 wijkt af: vervolg; programma 2 wijkt af: ga naar nr 32
17) Analyse (vergelijkkeuze, programma 1)
18) Evaluatie (Analyse (vergelijkkeuze, programma 1), programma1) = (Analyse (programma2keuze, programma 2), programma1)
19) Ja: vervolg; Nee: ga naar nr 22
20) Evaluatie (Analyse (vergelijkkeuze, programma 1), programma2) = (Analyse (programma2keuze, programma 2), programma2)
21) Ja: stop; Nee: vervolg
22) Vergelijk (Analyse (vergelijkkeuze, programma 1), Analyse (programma2keuze, programma2))
23) programma 1 wijkt af: ga naar nr 17; programma 2 wijkt af: vervolg
24) Analyse (vergelijkkeuze, programma 2)
25) Evaluatie (Analyse (vergelijkkeuze, programma 1), programma1) = (Analyse (vergelijkkeuze, programma 2), programma1)
26) Ja: vervolg; Nee: ga naar nr 29
27) Evaluatie (Analyse (vergelijkkeuze, programma 1), programma2) = (Analyse (vergelijkkeuze, programma 2), programma2)
28) Ja: stop; Nee: vervolg
29) Vergelijk (Analyse (vergelijkkeuze, programma 1), Analyse (vergelijkkeuze, programma2))
30) programma 1 wijkt af: vervolg; programma 2 wijkt af: ga naar nr24
31) Analyse (vergelijkkeuze, programma 1) en ga naar nr 25
32) Analyse (vergelijkkeuze, programma 2)
33) Evaluatie (Analyse (programma2keuze, programma 1), programma1) = (Analyse (vergelijkkeuze, programma 2), programma1)
34) Ja: vervolg; Nee: ga naar nr 37
35) Evaluatie (Analyse (programma2keuze, programma 1), programma2) = (Analyse (vergelijkkeuze, programma 2), programma2)
36) Ja: stop; Nee: vervolg
37) Vergelijk (Analyse (programma2keuze, programma 1), Analyse (vergelijkkeuze, programma2))
38) programma 1 wijkt af: ga naar nr 31; programma 2 wijkt af: ga naar nr32
39) Analyse (programma1keuze, programma 1)
40) Evaluatiepartijkeuze = Evaluatie (Analyse (programma1keuze, programma 1), programma1)
41) Ja: stop; Nee: vervolg
42) Evaluatiepartijkeuze = Evaluatie (Analyse (programma1keuze, programma 1), programma2)
43) Ja: stop; Nee: vervolg
44) Analyse (programma1keuze, programma 2)
45) Evaluatie (Analyse (programma1keuze, programma 1), programma1) = (Analyse (programma1keuze, programma 2), programma1)
46) Ja: vervolg; Nee: ga naar nr 49
47) Evaluatie (Analyse (programma1keuze, programma 1), programma2) = (Analyse (programma1keuze, programma 2), programma2)
48) Ja: stop; Nee: vervolg
49) Vergelijk (Analyse (programma1keuze, programma 1), Analyse (programma1keuze, programma2))
50) programma 1 wijkt af: vervolg; programma 2 wijkt af: ga naar nr 66
51) Analyse (vergelijkkeuze, programma 1)
52) Evaluatie (Analyse (vergelijkkeuze, programma 1), programma1) = (Analyse (programma1keuze, programma 2), programma1)
53) Ja: vervolg; Nee: ga naar nr 56
54) Evaluatie (Analyse (vergelijkkeuze, programma 1), programma2) = (Analyse (programma1keuze, programma 2), programma2)
55) Ja: stop; Nee: vervolg
56) Vergelijk (Analyse (vergelijkkeuze, programma 1), Analyse (programma1keuze, programma2))
57) programma 1 wijkt af: ga naar nr 51; programma 2 wijkt af: vervolg
58) Analyse (vergelijkkeuze, programma 2)
59) Evaluatie (Analyse (vergelijkkeuze, programma 1), programma1) = (Analyse (vergelijkkeuze, programma 2), programma1)
60) Ja: vervolg; Nee: ga naar nr 63
61) Evaluatie (Analyse (vergelijkkeuze, programma 1), programma2) = (Analyse (vergelijkkeuze, programma 2), programma2)
62) Ja: stop; Nee: vervolg
63) Vergelijk (Analyse (vergelijkkeuze, programma 1), Analyse (vergelijkkeuze, programma2))
64) programma 1 wijkt af: vervolg; programma 2 wijkt af: ga naar nr58
65) Analyse (vergelijkkeuze, programma 1) en ga naar nr 59
66) Analyse (vergelijkkeuze, programma 2)
67) Evaluatie (Analyse (programma1keuze, programma 1), programma1) = (Analyse (vergelijkkeuze, programma 2), programma1)
68) Ja: vervolg; Nee: ga naar nr 71
69) Evaluatie (Analyse (programma1keuze, programma 1), programma2) = (Analyse (vergelijkkeuze, programma 2), programma2)
70) Ja: stop; Nee: vervolg
71) Vergelijk (Analyse (programma1keuze, programma 1), Analyse (vergelijkkeuze, programma2))
72) programma 1 wijkt af: ga naar nr 65; programma 2 wijkt af: ga naar nr66


Het is m.i. perfect mogelijk om hiermee een programma te schrijven maar ik heb het nooit geprobeerd. Niet enkel omdat er flink wat werk zou inkruipen maar ook omdat het manueel doorlopen van het algoritme ervoor zorgt dat je veel beter ziet waar de angels zitten en waar soms toch nog extra analysewerk nodig is. Je onthoudt ook veel beter het werk dan puur te rekenen op de output van de computer. Deze methode levert erg goede partijanalyses op die zeker beter zijn dan de eenvoudige blundercheckfuncties die de meeste schaakprogramma's bezitten.

Een aanrader bij het gebruiken van dit algoritme is minstens 2 processoren en minstens 2 schermen te bezitten. 2 processoren omdat multitasking op 1 processor veelal leidt tot groot verlies van analysesterkte en soms ook de programma's laat bevriezen. Mijn computers zijn altijd singleprocessors dus ik heb er altijd 2 tot mijn beschikking. Ik raad tevens aan om 2 schermen te gebruiken zodat je niet hoeft te klikken tussen de 2 programma's en op elk moment duidelijk kunt zien hoever de analyses gevorderd zijn. Handig is tevens een 3de processor/ computer te hebben om zelf nog wat te kunnen experimenteren met varianten of opzoekwerk te kunnen doen zodat je niet hoeft te wachten op de 2 andere.  Een n-de processor/computer zou tevens nuttig kunnen zijn om specifieke stellingen die soms verder in de analysevarianten te voorschijn komen, eens dieper in infinite mode of correspondentiemode te laten rekenen. Ik kan dus heel goed GM Shipov volgen met het statement dat 3 computers nog niet genoeg zijn. Zelfs al heb je voldoende centen om dit laboratorium volledig te bekostigen dan nog moet je als operator ook voldoende tijd hebben om het allemaal manueel te organiseren. Vroeger gebruikte ik steevast 2 computers maar vandaag gezien mijn drukke familiale situatie, beperk ik mij tot 1 computer. De analyses gaan hierdoor 3 keer trager maar ik speel veel minder dan vroeger zodat computeranalyses minder dringend zijn en bovendien laat het mij toe om geregeld voor lange tijd afwezig te zijn van de computer.

Eindspelanalyses heb ik steeds behandeld met de grootste zorg in tegenstelling tot de meeste amateurs die vandaag vaak nog nauwelijks de moeite doen om zich hierin te verdiepen. In die fase wordt het spel ook heel concreet en is creativiteit veel minder belangrijk dan het haarfijn uitrekenen van varianten. Ondanks er nog steeds smalend wordt gedaan over schaakprogramma's in het eindspel, zijn ze toch heel goede instrumenten om een oordeel te kunnen vellen. Als het materiaal enigszins beperkt is dan tracht ik de positie te analyseren tot een definitief oordeel (winst, remise, verlies) zelfs al zijn de tablebaseshits nog heel ver weg. Ik gebruik hetzelfde algoritme als in het middenspel met dit verschil dat ik de analysevariant niet laat stoppen tot 10 plies maar verder laat gaan tot winst, verlies of remise op het bord staat. Winst beschouw ik als een +5 score of bij een tablebasewinst. Bij lagere scores kan soms nog sprake zijn van een vesting maar bij +5 is dat in 99,9% van de gevallen niet. Verlies is het omgekeerde van winst. Remise kan bestaan uit een tablebasehit, een computerevaluatie met gelijk spel of bij sprake van een vesting. Een vesting wordt geconstateerd wanneer een groot voordeel ondanks 20 extra plies spelen niet meer verder wordt uitgebouwd. Ik link tegenwoordig niet de tablebases met de programma's omdat ik het gevoel heb dat een programma bij het opzoeken in de gigantische tablebases meer tijd verliest dan het gewoon verder te laten rekenen en het geen meerwaarde betekent voor de analyses. Bovendien houden de tablebases geen rekening met de 50-zettenregel waardoor je soms foute resultaten verkrijgt. Als een analysevariant uitmondt in een tablebasestelling dan check ik de evaluatie manueel via Tablebasesite.

Ik heb in het verleden heel weinig tijd gespendeerd aan openingen maar dat is sinds een jaar of 5 serieus veranderd. Nu keer ik veel verder terug dan het punt waar ik afweek van de bekende paden. Zo bekijk ik ook de alternatieven voor zowel wit als zwart waarmee meesters goed hebben gescoord of wat in correspondentie recent nog getest werd. Bijzondere aandacht schenk ik aan de + 2600 partijen of nog beter + 2700 partijen waarin veelal de kritieke openingssystemen worden gespeeld in tegenstelling tot de iets lager gekwoteerde meesters. De output van een programma in een opening is nog vrij beperkt in waarde maar mits gebruik makend van de correspondentiemodus kan je toch interessante zaken ontdekken die je een voorsprong kunnen opleveren t.o.v. de tegenstanders. Ik gebruik normaal diepte 12 plies, 3 hoofdvarianten, 3 1ste zijvarianten, 2 2de zijvarianten met 100 seconden per zet. 1 rondje correspondentiemodus met deze parameters duurt ongeveer een 6 uren = 12*3*3*2*100 seconden dus ideaal om de computer 's nachts te laten doorrekenen terwijl je zelf lekker in bed ligt te slapen. 's Morgens verwijder je dan de vele nutteloze varianten en kan je beslissen om voor een bepaalde kritieke stelling nog een rondje correspondentiemodus volgende nacht te laten uitvoeren.

Ik ben er overtuigd van dat mijn analysemethodes hoogstaande resultaten opleveren. De computer doet het leeuwendeel maar het persoonlijk werk mag je toch ook niet onderschatten want het is geen simpele druk op de knop. Ik ken weinig of niets af van de methodes die andere spelers gebruiken om intensief te analyseren. Personen die meer willen weten over hoe het algoritme nu precies in praktijk werkt en/of raadgevingen hebben i.v.m. optimaliseren van het analyseproces mogen altijd hieronder posten of een mailtje sturen (te vinden o.a. op de Deurnse website).

Brabo 

Geen opmerkingen:

Een reactie plaatsen