
Onrust in computerschaakland: het programma Rybka is beschuldigd van plagiaat en de plagiateur Vasik Rajlich veroordeeld tot levenslange schorsing. De wortelbroeken hadden dit natuurlijk al vernomen
via Slashdot, maar voor de musici en andere kunstenaars hiero doe ik
het hier nog even over. Het leest als een spannend jongensboek: na hardnekkige geruchten gaat een team van dertig internationale specialisten in alle geheim aan de slag. Daarbij wordt de disassembler
niet geschuwd. Na een jaar spitten is het bewijs compleet. En
dat varieert van het lenen van tabellen en methodes, tot het regelrecht rippen van stukken (open
source) code. Hoe ernstig is dit nu? Het is natuurlijk onsportief, en strijdig met
de reglementen en statuten. Behalve de geldprijzen heeft ie er zakelijk ook nog financieel geld mee verdiend. Met andermans werk. Alle algoritmes zijn bekend, en de code is (voor een
schaakprogrammeur) dus vrij triviaal. Maar het is moeilijk om het in een keer foutloos in te kloppen. En dat moet je dus wel zelf doen.Een beetje achtergrond.
De eigenlijke methoden en technieken in het computerschaak zijn min of meer publiek domein; en alle schaakengines zullen deze toepassen op de een of andere manier. De basis van een engine is vrijwel altijd alpha-beta-search of een variant daarop. De kern van alpha-beta vormt de evaluatiefunctie. Die probeert een kwantificatie te maken van hoeveel een bepaalde stelling waard is. In het simpelste geval is dat de materiaalwaarde (pion=1, dame=8, koning is oneindig), maar er zijn nog bonuspunten te behalen voor mobiliteit en positie, of strafpunten voor bijvoorbeeld dubbelpionnen. Dat is allemaal prachtig te tunen. Die evaluatie is nodig omdat je de stelling niet veertig zetten diep kunt doorrekenen, daarvoor ontbreekt de rekenkracht. Vrijwel alle engines hebben ook een transpositietabel: een hashtable waarin resultaten van eerdere berekeningen opgeslagen worden.
Geavanceerdere schaakengines hebben ook nog een openingsboek en een eindspelboek aan boord. Dat is handig, omdat je de evaluatie van de openingszetten al precalculated vast hebt liggen, en zodra je in het eindspelenboek terecht komt ligt de evaluatie al vast (winst,verlies of remise). Je hoeft dus minder diep te rekenen.
Het netto effect van het toevoegen van openings en eindspelenboeken is trouwens dat het tunen van de evaluatiefunctie minder belangrijk wordt.
De eigenlijke methoden en technieken in het computerschaak zijn min of meer publiek domein; en alle schaakengines zullen deze toepassen op de een of andere manier. De basis van een engine is vrijwel altijd alpha-beta-search of een variant daarop. De kern van alpha-beta vormt de evaluatiefunctie. Die probeert een kwantificatie te maken van hoeveel een bepaalde stelling waard is. In het simpelste geval is dat de materiaalwaarde (pion=1, dame=8, koning is oneindig), maar er zijn nog bonuspunten te behalen voor mobiliteit en positie, of strafpunten voor bijvoorbeeld dubbelpionnen. Dat is allemaal prachtig te tunen. Die evaluatie is nodig omdat je de stelling niet veertig zetten diep kunt doorrekenen, daarvoor ontbreekt de rekenkracht. Vrijwel alle engines hebben ook een transpositietabel: een hashtable waarin resultaten van eerdere berekeningen opgeslagen worden.
Geavanceerdere schaakengines hebben ook nog een openingsboek en een eindspelboek aan boord. Dat is handig, omdat je de evaluatie van de openingszetten al precalculated vast hebt liggen, en zodra je in het eindspelenboek terecht komt ligt de evaluatie al vast (winst,verlies of remise). Je hoeft dus minder diep te rekenen.
Het netto effect van het toevoegen van openings en eindspelenboeken is trouwens dat het tunen van de evaluatiefunctie minder belangrijk wordt.
Synchronicity: @Ds. Ploppo?
Speak for yourself please met je "gelu...

Totaal aantal: 1883
Waaronder de leden:
zymu grijpstra Jack Random DDWW, Steampimp. Geenszins Joling Weirdoinventor heeft zin teringbibber Frisco DarqSoul wout Jake Ketsman reet Amoron Chiel Nick Name, niet blond MadDieu, 9th son of Cain Gekke Tonnie Sauerkraut Babbelbla koei Roel Zwaar Wildplasser, beroepsweig Tha KinGuiN- arrogante R JayJay Blasfemist, Stapt legaal Draken. Caveman48 Bamibal trekpet biermeester janklaassen barq cspr, drukt van zich af Freshtim Der Webmeister Weerman Rapsel bertje! Ds. Ploppo globalriot
zymu grijpstra Jack Random DDWW, Steampimp. Geenszins Joling Weirdoinventor heeft zin teringbibber Frisco DarqSoul wout Jake Ketsman reet Amoron Chiel Nick Name, niet blond MadDieu, 9th son of Cain Gekke Tonnie Sauerkraut Babbelbla koei Roel Zwaar Wildplasser, beroepsweig Tha KinGuiN- arrogante R JayJay Blasfemist, Stapt legaal Draken. Caveman48 Bamibal trekpet biermeester janklaassen barq cspr, drukt van zich af Freshtim Der Webmeister Weerman Rapsel bertje! Ds. Ploppo globalriot






1) Ja.
2) Nee
Hij heeft in wezen twee wetten overschreden: (1) de toernooireglementen, die vereisen dat het een origineel werk is, en dat alle auteurs credit krijgen (2) de (open-source) licenties van crafty en fruit, die copieren en wijzigen toestaan, mits het open-source blijft, credits gegeven worden, en er geen sprake van geldelijk gewin is.
Ik heb in het vonnis nergens iets kunnen vinden over openingsboeken. Misschien valt dat bij een goede evaluatie allemaal wel binen de search-horizon van ~10 ply? Hij heeft trouwens wel meerdere evaluatieconstanten-tabellen, geschakeld door de fase van het spel. (het aantal stukken dat er nog op het bord is)
/strategie /loop
Ik heb even nagezocht: zowel crafty als fruit blijken een openingsboek te hebben. Waarom ze die niet geverifieerd hebben? Misschien dat AB-searcht en evaluatie het makkelijkt te vinden zij: bij een profile springen ze er uit.
Maar het blijft een monnikenwerk om eea boven tafel te krijgen.
/Reetmodus
#ifndef __HCI_CORE_H
#define __HCI_CORE_H
#include
/* HCI upper protocols */
#define HCI_PROTO_L2CAP 0
#define HCI_PROTO_SCO 1
/* HCI Core structures */
struct inquiry_data {
bdaddr_t bdaddr;
__u8 pscan_rep_mode;
__u8 pscan_period_mode;
__u8 pscan_mode;
__u8 dev_class[3];
__le16 clock_offset;
__s8 rssi;
__u8 ssp_mode;
};
Weet je zeker dat die die _u8 dev_class[3] geen [2] moet zijn?
Toch vraag ik mij het volgende af. Je kopieert de code van programma X en Y en vervolgens wint jouw programma keer op keer van zowel X als Y: The 1st places and World Computer Chess Champion titles awarded to the program Rybka in the 2007, 2008, 2009 and 2010 WCCCs are hereby annulled,.
Dan moet je m.i. toch iets significants verschillend toegevoegd hebben - anders gedragen die algorithmes zich niet meetbaar verschillend.
Of speelden X en Y niet (meer) mee? Waarom niet? Waren ze niet goed genoeg? (Wat de vraag over waarom Rybka dan wel alleen maar interessanter maakt).
Hij heeft het programma gewoon goed getuned, misschien wel mbv bestaande prof-partijen. Hier wordt je wegwijs gemaakt in de zieleroerselen van een tunende schaakprogrammeur.
De meeste diffs in het verslag hebben trouwens betrekking op Rybka-1.0. Dat was kennelijk een regelrechte rip-off, met wat obfuscatie. Of ie daarna nog iets substantieels heeft toegevoegd is mij onduidelijk. Da afstand tussen Rybka en de concurrentie is 100-150 ELO-punten, en dat vind ik veel voor alleen een beetje tunen. ELO rating is aan de bovenkant van het spectrum weinig betrouwbaar, omdat er daar minder tegenstanders zijn. Misschien dat je met wat extra corner cases net voldoende kunt winnen, kweeniet.
Dat dus. Met name omdat je alleen maar in rating kunt stijgen als je wint van een spelert met een hogere ranking. En de hoeveelheid vooruitgang díe je dan boekt schaalt omgekeerd evenredig met de hoogte van je eigen ranking. Het is een beetje als met versnellen tot de lichtsnelheid: hoe dichter je er bij komt hoe onevenredig meer energie je er in moet stoppen om er nóg dichter bij te komen.
Maar het kan goed dat ie ook nog andere dingen heeft geoptimaliseerd hier en daar een cache-prefetch, of een hogere locality-of-reference kan wel 10% meer Nps winst opleveren. Een andere CPU slurpert is trouwens de move-generator; misschien dat daar ook nog iets te besparen valt. (ik ben de move-generator nauwelijks tegengekomen in de verslagen).
En nog een andere mogelijkheid is verbeterd parallelisme.
Men heeft doorgaans de neiging de hashtables na iedere zet te ruimen, omdat de alpha-beta estimates afhangen van de startpositie, en de boekhouding heel tricky wordt (het resico is dat er bij hergebruik teveel gepruned wordt, en er dus varianten verworpen worden). Maar als het lukt levert het bijna 1+1 ply winst op, goed voor 100 ELO.
*wortelbroek in de wasmachine doet*