El Raco de C'escacs

Recull de continguts diversos

Publicació en Github pages

Aquest lloc es troba publicat en Github pages, en l'adreça https://cescacs.github.io

Repositori Github

Aquest lloc web, i tot el seu contingut es troba publicat a https://github.com/cescacs/cescacs.github.io. També trobarem el repositori https://github.com/cescacs/cescacs.typescript amb la programació de les regles del joc en typescript; és cert que aquest repositori té alguna dependència de fitxers del repositori principal, però de poca importància, com ara alguns fitxers css.

Hexcaquer per imprimir

Hexcaquer de C'escacs

En aquest enllaç n'hi ha un hexcaquer en format .SVG per a imprimir-lo. Es recomana imprimir-ho en format DINA-1, que pot fer-se dividint-lo en quatre parts DINA-3, per poder plegar-lo. Les DINA-3 es poden retallar deprés d'imprimir, doncs per la proporció llarg-ample de l'hexàgon, es perd una mica de paper; la mida final resultant és en realitat inferior a DINA-1.

Imprimint en la mitad, en cuatro DINA-4, obtenim un hexcaquer per a peces miniatura, molt justa, però una mida encara suficient per jugar una partida dues persones: una mida d'hexcac d'uns 2.4 cm que requereix fitxes petites. També es pot imprimir aquest hexcaquer petit en una alternativa equivalent: imprimir en dues parts DINA-3, com es veu en la foto. Potser és la millor alternativa per a un tauler petit plegable.

Exemple de peces i tauler

One of my sets
Un hexcaquer en una mida manegable (2xDIN-A3), amb el joc de fitxes que es veuen en l'altre imatge en la capsa.

En aquesta foto, com a Drac i Elefants, he fet servir unes peces de bronze comprades a Xina (el Drac en realitat és un incensiari), però m'agraden més que la figura de Posidó i els Atles. Això sí, els Pegasus dels Germans Marinakis són genials!

One of my sets
Aquestes fitxes s'han adquirit per correu als Germans Marinakis , de Grècia.
One of my sets
Aquestes peces de fusta foren les primeres que vaig fer servir. Són per a un hexcaquer més gran, de mida normal, fetes ajuntant troços d'altres peces, i els Elefants, marcant peons amb una moneda d'un cèntim.

La capsa l'he feta per incloure-hi només les fitxes addicionals. Per a cada jugador:

  • Un Drac; en la foto, Posidó.
  • Dos Pegasus.
  • Quatre Elefants; en la foto, Atles.
  • Tres Peons.
  • Un Alfil.

Les figures dels Germans Marinakis són part d'el meus C'escacs de metall de petita mida. Desgraciadament ha canviat el portal de pagament, i ara només veig jocs d'escacs sencers, però abans podies comprar per correu peces per separat, per complementar un joc sencer d'escacs ortodoxes amb les peces necessàries per fer un joc de C'escacs. Tampoc tenien cap peça en forma d'elefant, en realitat un classic dels escacs, tot i haver estat Pèrsia la porta d'entrada a Occident dels escacs, i un dels històrics enemics dels grecs, fent que fins i tot Alexandre n'hi fes servir, d'elefants.

Opinió de Bobby Fischer sobre les obertures i sobre les variants d'escacs

Bobby Fischer on Paul Morphy and how opening theory destroyed chess.

Bé, cal començar dient que estic segur que Bobby Fischer coneix perfectament la variant de Capablanca, tot i que pugui semblar que no en les referències que hi fa, però probablement això ho fa conscientment, doncs la seva pretensió és referir-se en general a les variants dels escacs.

Però sí, és completament cert que, qui coneix la complexitat que poden arribar a tenir els escacs, es pot sentir intimidat per una variant com C'escacs. El consell, si algú se sent intimidat per les variants hexagonals dels escacs, és començar provant el Mini Hexchess, una petita joguina que permet perdre-li la por a la geometria hexagonal.

Mini Hexchess

Mini Hexchess

Els Mini Hexchess són uns escacs hexagonals miniatura, en un hexcaquer de 37 hexcacs, dissenyats per Dave McCooey. Són un gran passatemps, i una manera alternativa d'introduir-se en els Hexcacs Hexagonals, diferent i més frivola a l'alternativa de jugar una partida als escacs de Gliński, o la variant de McCooey.

Aquí podem obtenir un hexcaquer per jugar, i les regles en català, anglès i castellà. El material és mínim, només nou peces per a cada jugador, doncs només fa servir cinc Peons, una Torre, un Cavall, un Alfil i el Rei. No es fa servir la Dama, i es juga només amb un Alfil.

Hexcaquers i coordenades

Els escacs hexagonals van tenir uns inicis incerts: Thomas Hanmer Croughton en 1853, Hexagònia en 1864, Lord Baskerville en 1929... però finalment Władysław Gliński en 1936 inventà els escacs hexagonals, perfectament jugables.

Els hexcaquers, i en general, els taulers de joc fets d'hexàgons, han estat una curiositat matemàtica des de la seva introducció en el món dels jocs, destacant Hex, joc inventat pel matemàtic danès Piet Hein en 1942. En 1950 Claude Shannon construí una màquina analògica que jugava a Hex raonablement. Més tard, el joc va ser comentat per Martin Gardner en la seva columna del Scientific American.

El món dels taulers hexagonals està descrit en el lloc web Hexagonal Grids, de Red Blob Games. Aquí trobarem algorismes per implementar jocs en taulers hexagonals, els sistemes de Coordenades, on podem trobar descrit el sistema que fa servir C'escacs, que ell anomena Doubled coordinates. No parla en concret dels escacs hexagonals; els escacs de Gliński i els escacs de McCooey fan servir un sistema de coordenades que podriem anomenar axial doble, doncs fan servir un sistema de coordenades axial diferent en cada meitat de l'hexcaquer.

També trobarem en el lloc web de Red Blob Games un apartat per a programadors, referent a l'implementació.

Còmput de finals, per Dave McCooey

Finals de joc en hexcaquers de 91 casillas (Gliński/McCooey)

Els finals dels escacs hexagonals varen començar a ser estudiats per Władysław Gliński, i posteriorment han estat estudiats en profunditat per Dave McCooey amb computador. Els resultats s'apliquen tant als escacs de Gliński com als de McCooey.

Ampliació per a finals de joc en hexcaquers de 169 hexcacs (C'escacs)

En general els resultats en hexcaquers de 91 hexcacs són extrapolables als hexcaquers de 169 hexcacs, pero amb una notable excepció:

Per a les noves peces incorporades a C'escacs (Drac, Pegàs)

C'escacs en javascript per jugar

L'apartat més important era recuperar el que en el seu moment va haver en un Applet de Java fet servir tecnologies més modernes, sempre amb execució en el client, sense dependència de servidor.

Principalment permet l'enregistrament de partides, tot i que actualment encara no compta amb un emmagatzematge en línia, però es poden descarregar, tant com a posició, o detallant tots els moviments de la partida. Aquestes partides descarregades posteriorment es poden carregar; aquestes funcionalitats són les mateixes que tenia inicialment el Applet Java.

Els plans de futur consisteixen en incorporar un WebAssembly desenvolupat en Rust per aportar una poda d'arbre minimax amb una proposta de millor jugada per part de la màquina, però sense participar un servidor aquesta opció clàssica és la màxima opció abastable de manera senzilla, i la participació de tècniques d'IA queda de moment fora de l'horitzó d'implementacions immediates.

Variant Grand C'escacs incorporada

El joc permet triar la que es denomina variant Grand C'escacs, i fins i tot, en broma es fa servir el nom Grand Hunigcamb Chess. No es racomana aquesta variant, si no és que sou experimentats en C'escacs i voleu provar noves coses; no és una variant gaire provada, i probablement requereix perfeccionament, però incorpora alguns canvis interessants:

No es poden considerar aquestes regles com a definitives; senzillament és un camp de proves per a algunes regles i per a la peça de l'Almogàver.

De Minimax amb desbroçament Alfa-Beta a la cerca de Montecarlo amb xarxes neuronals

Minimax

Típicament, per a jugar a escacs, els ordinadors han fet servir el teorema de Minimax de John von Neumann. Aquest teorema s'aplica per a jocs d'imformació perfecta entre dos adversaris, amb suma zero, establint que n'hi ha una estratègia que permet a tots dos jugadors minimitzar la pèrdua màxima esperada. El jugador juga, doncs, amb l'estratègia que resulta en la minimització de la seva màxima pèrdua, considerant totes les respostes possibles del jugador adversari i la pèrdua màxima que pot comportar.

Si fos possible estudiar tot l'arbre de jugades, és a dir, totes les possibles jugades futures, es podria determinar una estratègia guanyadora; en la pràctica això és impossible. Va ser Claude Shannon en el seu text sobre escacs de 1950 Programming a Computer for Playing Chess qui proposà limitar la profunditat de la recerca en l'arbre de possibilitats, determinant llavors el seu valor mitjançant una funció heurística.

La funció d'avaluació: heurístic

L'algorisme requereix, doncs, l'ús d'un heurístic, una funció d'avaluació d'una posició, una vegada s'ha fet l'exploració de les diferents jugades possibles, de manera que es pugui determinar quina és la millor. L'heurístic més evident consisteix en considerar el valor de les fitxes de cada jugador, però incorporar conceptes de posició en l'heurístic no és senzill, i requereix traspassar els coneixements d'un expert.

Minimax error propagated
La profunditat de cerca és un límit de visibilitat que s'intenta sobrepassar amb un heurístic, però els errors en aquesta estimació es propaguen cap amunt. En l'imatge d'Evolving Neural Networks to Focus Minimax Search es visualitza l'efecte horitzó provocat per la profunditat de búsqueda, i com l'error provocat per l'aplicació de l'heurístic es propaga. En l'imatge els quadrats fan càlcul del valor màxim, i cercles el mínim.

El gran problema de l'algorisme minimax és la seva dependència de l'heurístic, doncs el valor d'aquest heurístic té un factor d'error que es propaga cap amunt, i pot comportar errors en el resultat final de l'algorisme.

Aquest heurístic és doncs una funció fonamental en l'avaluació minimax, i és difícil establir una funció que no deixi descuidat algún punt; la correcció d'aquests defectes de l'heurístic s'aconsegueix fent un anàlisi amb una profunditat més gran, intentant obtenir una valoració més certera.

Quiescència

A més, aquesta funció d'avaluació (heurístic) és difícil de determinar en situacions poc estables, en situacions d'escac o situacions on existeix una amenaça a una peça. Aquest concepte d'estabilitat es denomina quiescència, i l'algorisme explora en major profunditat fins trobar un estat que compleix la quiescència, per poder avaluar correctament l'heurístic.

Extensió de la búsqueda

Per a certes jugades interessants es pot extendre la búsqueda en més profunditat; és un concepte una mica diferent de la quiescència, però de vegades la pot remplaçar, doncs la funció de l'extensió per a la quiescència és trobar una posició avaluable, sense amenaces que puguin desvirturar el resultat de l'heurístic, però l'extensió de la búsqueda pretèn analitzar en profunditat una posició que sembla interessant. Aquesta tècnica es va fer servir ampliament en Deep Blue, però actualment n'hi ha més interés en retallar les jugades poc interessants que en extèndre l'anàlisi de les interessants.

L'extensió de búsqueda es pot fer servir per analitzar situacions de: escac, situació amb pocs moviments possibles, seguretat del rei crítica, peons que coronen o es troben aprop de fer-ho, anàlisi per a amenaces detectades (generalment amb la tècnica del moviment null, que es detalla més endavant)...

Cost de l'algorisme

El cost de l'algorisme és O(bd), sent b el factor de ramificació, quantes jugades diferents possibles es poden fer en promig, i d la profunditat d'exploració, és a dir, quants nivells en davant s'exploren. Es escacs el valor per a b és lleugerament superior a 30, de vegades estimat fins i tot com a 36; explorant quatre nivells ja es requereixen més d'un milió i mig d'avaluacions, en cinc nivells més de 60 milions, i en sis nivells més de 2_100 milions.

El factor de ramificació b per a C'escacs és quatre vegades superior als escacs, aproximadament 144, fent que quatre nivells d'exploració comportin més de 400 milions d'avaluacions, en comptes d'un milió i mig. L'increment en el nombre d'avaluacions és degut a diversos factors: un escaquer més gran, més fitxes per a cada jugador i moviments addicionals deguts a la geometria hexagonal. En termes de profunditat d'exploració, comporta el cost d'un nivell i mig addicional comparat amb els escacs ortodoxos; és a dir, que per a explorar 5 nivells es requereix avaluar gairebé 62_000 milions de nodes.

Les taules de transposició

La gran quantitat de moviments que s'han d'analitzar comporta que es donin repeticions degudes a l'execució de moviments en diferent ordre; aquest fenòmen és en realitat força freqüent només cal que recordem que s'han d'analitzar tots els moviments possibles, i per a cada moviment possible, tots els moviments possibles, i així successivament degut a la transposició de l'ordre en què es realitzen els moviments. La repetició de posicions és fins i tot un problema, particularment en l'anàlisi de finals, quan queden poques fitxes en joc, doncs l'ànalisi de moviments podria acabar analitzant un cicle de les mateixes posicions si no es detecta la repetició que tanca el cicle.

Aquesta tècnica també es fa servir per aplicar la regla de repetició de posició, que permet a un jugador exigir taules si la mateixa posició es repeteix tres vegades, i en qualsevol cas seran taules quan una mateixa posició es repeteix cinc vegades.

Les posicions ja valorades s'emmagatzemen, i a més de la valoració per no haver de repetir els càlculs, es pot afegir informació com la millor jugada seleccionada, la profunditat on s'ha estudiat la posició... formant les taules de transposició. Aquestes taules s'emmagatzemen com a taules hash, que fan servir una clau, generalment un número de 64 bits en realitat 64 bits encara és un número massa gran per a indexar la taula, i com a índex es fa servir una reducció d'aquest valor, mòdul una potència de dos, que es calcula com a un valor únic o signatura associada a la posició, típicament fent servir tècniques com les fórmules de Zobrist, què faciliten la seva manipulació amb operacions xor.

Profundidad iterativa i control del temps

El gran problema és que la búsqueda minimax és una búsqueda en profunditat, és a dir, que s'explora una branca fins la profunditat establerta, abans de començar a explorar una altra branca. Aquesta estratègia resulta funesta quan el programa ha de tenir control del temps, doncs és molt difícil estimar el temps que pot costar l'anàlisi només fixant la profunditat, i si s'interromp l'anàlisi poden quedar encara alternatives importants per explorar.

La profundidad iterativa crida repetidament a una rutina de cerca augmentant la profunditat, fins a aconseguir el valor desitjat. Per a això, es realitza repetidament una cerca, augmentant la profunditat de manera incremental. D'aquesta manera sempre tindrem una estimació d'un bon moviment per a l'última profunditat aconseguida, i en cas que s'acabi el temps sempre tindrem assegurada una acció a realitzar. Aquest algorisme és possible gràcies a les taules de transposició, que permeten recuperar els càlculs previs, tot i que s'ha de considerar que, sent un algorisme exponencial, el cost de tornar a avaluar un nivell es petit en comparació amb el cost de l'avaluació del següent nivell si el nivell de ramificació b fos només de 2, el cost seria equiparable, el cost del següent nivell serà b-1 vegades el cost de tots els càlculs fets fins llavors, i el valor tant com b creix, un valor que ja hem aproximat en 36 pels escacs, o 144 per a C'escacs.

Els avantatges addicionals són també importants, característiques que una mica més endavant comprovarem que són de gran importància:

Negamax

Sovint les referències, en comptes de referir-se a minimax, es refereixen a negamax, que senzillament és una simplificació de minimax considerant que és un joc de suma zero per a dos jugadors; aquest algorisme fa servir valoracions positives per a les jugades un jugador i negatives per les jugades de l'oponent. En la pràctica és una implementació de minimax.

Poda alfa-beta

La poda alfa-beta és un algorisme de cerca que busca disminuir el nombre de nodes que són avaluats per l'algorisme minimax en el seu arbre de cerca. Deixa d'avaluar una jugada quan s'ha trobat almenys una possibilitat que demostri que la jugada és pitjor que una jugada examinada anteriorment. No és necessari continuar avaluant aquestes jugades. Quan s'aplica a un arbre minimax estàndard, retorna la mateixa jugada que el minimax, però elimina les branques que no poden influir en la decisió final. Això comporta un gran estalvi en la quantitat de càlculs necessaris.

L'algorisme sembla que ha estat reinventat diverses vegades: Arthur Samuel tenia una versió primerenca per a una simulació de dames; posteriorment Richards, Timothy Hart, Michael Levin i Daniel Edwards varen fer servir conceptes de l'algorisme alfa-beta de manera independent en els EUA, i també McCarthy va proposar idees similars durant el taller de Dartmouth en 1956 i el va suggerir a un grup dels seus estudiants. Finalment, Alexander Brudno, informàtic rus, va concebre l'algorisme alfa-beta de manera independent i va publicar la descripció, funcionament i resultats en 1963. Tot i les aproximacions prèvies, fou Alexander Brudno qui va presentar formalitzada i justificada la idea sencera, que Donald Knuth i Ronald W. Moore varen refinar en 1975.

Millora del cost de l'algorisme minimax

L'efectivitat de l'esporgada té una gran dependència de l'ordre en què s'avaluen les diferents opcions (jugades), de manera que si l'ordre és incorrecte pot arribar a donar-se el cas de no tenir cap benefici, però per a un ordre òptim, avaluant la millor jugada primer, el benefici és radical, permetent l'avaluació del doble de profunditat; és a dir, un cost de O(bd/2). La reducció és dràstica, i considerant els escacs amb un factor de ramificació de 36 es pot arribar a reduir el cost d'exploració per a quatre nivells només a 3_000 nodes, en comptes de milió i mig, una reducció del 99.8%.

Heurístics d'ordenació de les jugades

Per obtenir uns resultats òptims en l'algorisme alfa-beta, es requereix un nou heurístic: l'ordenació de les jugades, considerant primer les més favorables.

L'efectivitat de l'algorisme alpha-beta, que pot resultar dràstica, depèn de l'efectivitat d'aquest heurístic, d'una primera estimació de quina és la millor jugada, que es confirmarà amb l'exploració minimax. Aquest heurístic té una afectació directa en el rendiment de l'algorisme, i, per tant, de la profunditat amb què és possible fer l'anàlisi, però un error en l'ordenació pot arribar a eliminar l'aventatge de la poda alpha-beta, resultant una exploració minimax sense cap optimització.

Es fa servir una ordenació dinàmica, on l'ordenació dels nodes no avaluats es canvia quan s'avaluen els nodes anteriors i obtenim noves informacions per millorar l'heurístic d'ordenació. Sense incloure-hi les situacions d'escac, l'ordenació tindrà en consideració:

  1. S'ha de considerar l'últim moviment de l'adversari; verificar si segueix la variació principal estimada.
  2. Si el moviment de l'adversari no ha estat la predicció de la variació principal:
    • Considerar si la peça moguda pot ser capturada.
    • Considerar igualment el moviment ja estudiat com la variació principal, si encara és vàlid.
  3. Les amenaces: una peça amenaçada sense defença, o amenaçada per una peça d'igual o inferior valor.
    • Si existeix una captura de la peça que amenaça, i l'avaluació estàtica de l'intercanvi és favorable.
    • Moviments per evitar aquesta amenaça: moure la peça o cobrir l'amenaça.
    • Provocar una amenaça major al contrincant.
    • Observar que ignorar l'amenaça fent un sacrifici serà un cas fora del comú, que, en general, sempre seran per seguir una línia guanyadora ja estudiada com a línia principal, o una variació de la línia principal.
  4. Les captures s'han de pendre en consideració fent servir una avaluació estàtica d'intercanvi per estimar si s'han de considerar.
  5. L'heurística de l'assassí (killer heuristic), que consisteix en considerar quan s'explora l'arbre de joc que una jugada que era una bona jugada en una posició, és probable que ho segueixi sent en una posició alternativa.
    • assassins de mat diferència jugades que produeixen un tall en la búsqueda degut a que un dels jugadors assoleix el mat.
  6. L'heurística del moviment de resposta, que considera que si existeix un moviment de resposta per a un moviment, sempre que la resposta encara sigui vàlida, molt probablement serà la millor resposta indistintament que s'hagin fet moviments entremitjos.
  7. L'heurística de l'última millor resposta (LBR, Last Best Reply), bàsicament la mateixa idea que l'heurística del moviment resposta, amb subtils diferències d'implementació. S'ha de fer constar, en ambdós heurístics, que moltes vegades aquestes heurístiques funcionen com a resposta al moviment d'una peça a una posició, indistíntament de la seva posició d'origen.
  8. L'Heurística de l'història, que fa una ordenació dinàmica dels moviments considerant el nombre de talls causats per un moviment determinat, independentment de la posició en la qual s'hagi realitzat aquest moviment.

Heurístics de poda en davant

La poda alpha-beta estableix que alguns nodes no requereixen ser avaluats, doncs no són opcions a considerar, però sempre, la creença en aquest fet, depèn de l'heurístic d'avaluació. A més, trobar eficientment els nodes que no requereixen avaluació depèn de la correcta ordenació, avaluant primer els nodes més significatius, que tenen les jugades millors.

La poda alpha-beta, encara que la seva eficiència depén d'un heurístic d'ordenació, no és un heurístic, és un algorisme que permet la simplificació de branques que no aportan informació. Les podes en davant són heurístics que permeten descartar nodes sense motius plenament justificats, només per certes creences. Veiem tècniques que són indicadors de branques de búsqueda que no aportaran nova informació, i poden deixar de considerar-se:

Llibres d'obertures i finals

Els punts més febles dels algorismes minimax són les obertures i els finals, envers dels bons resultats en el joc mig. Es dona el cas que obertures i els finals són punts ja ampliament estudiats per la teoria dels escacs. Les obertures permeten una correcta distibució inicial que difícilment es pot aconseguir amb l'estudi del joc a curt termini, i és per això que els programes d'escacs compten amb un llibre d'obertures.

Anàlogament, els finals comporten dificultats per la profunditat d'anàlisi que requereixen; les taules de transposició combinades amb les consideracions de simetria de l'escaquer són fonamentals per a un anàlisi que pot requerir una gran profunditat d'exploració, doncs, malgrat que el nombre de ramificació sigui més limitat que en la fase mitja del joc, un anàlisi amb gran profunditat d'exploració encara és una opció inabastable sense aquestes eines. Tot i això, el càlcul de finals és molt costòs i les bases de taules (tablebase) de finals de joc permeten tenir els moviments òptims precalculats. Iniciades per Thomas Ströhlein en 1970 amb els finals KQK, KRK, KPK, KQKR, KRKB i KRKN. Ken Thompson i altres les van completar per a tots els finals de quatre i cinc peces, amb els casos particulars KBBKN, KQPKQ i KRPKR. En 2005 s'havien completat tots els finals amb fins a sis peces, en 2018 amb set peces (els dos reis i cinc altres peces), i actualment, en 2023, encara es treballa per obtenir tots els finals amb vuit peces.

Millores a minimax i alfa-beta

L'algorisme minimax amb la poda alfa-beta és l'algorisme que s'ha fet servir per als programes d'escac d'ordinador des dels anys 70 del segle XX fins ja entrat el segle XXI. Els programes van anar incorporant característiques, com la búsqueda de la quiescència o la confirmació de jugades prometerdores, incrementant la profunditat de búsqueda en alguns punts, les taules de transposició, que emmagatzemen posicions ja estudiades per no tornar-les a considerar, els llibres d'obertures, les bases de taules de finals... També la poda alfa-beta ha incorporat millores, pràcticament totes fonamentades en les tècniques d'estretament de la finestra de búsqueda, fixant un valor per a alfa-beta, en comptes de calcular-ho, de manera que tots els nodes amb una avaluació dins d'aquesta finestra alfa-beta establerta no són avaluats. El cas més senzill és la búsqueda por aspiració, on es treu partit de la profunditat iterativa per obtenir una estimació dels valors alpha i beta. Tot i que és una tècnica fonamentada en heurístics, no afecta el resultat final, doncs quan el valor no es troba en la finestra estimada detectarem l'error, i ens veurem obligats a tornar a avaluar per obtenir els valors correctes. Les finestres nul·les són una tècnica semblant, però en aquest cas no es deixa marge entre els valors alpha i beta, quan estimem que el moviment no generarà alteracions d'aquests valors, amb l'intenció de detectar els casos que no compleixin les nostres estimacions. Aquesta tècnica es feia servir tant per anàlisis de quiescència, o per la poda dels moviments tardans, però finalment ha evolucionat en el PVS i finalment en el MTD(f).

La PVS: Principal variation search (NegaScout) estableix una jugada com a millor jugada, i mira de demostrar que la resta de jugades no són millors fent la búsqueda de les altres jugades amb una finestra nul·la; la dependència de l'heurístic d'ordenació de les jugades esdevé encara més fonamental, doncs una incorrecta ordenació resulta en la penalització del cost final de l'algorisme.

PVS es va fer servir des de la seva aparició en l'any 1980, fins l'aparició de MTD(f), Memory-enhanced Test Driver with value f en l'any 1994. Aquest nou algorisme fa servir tota la búsqueda amb una finestra nul·la o molt estreta, partint d'una estimació inicial del valor; la finestra alfa-beta s'estableix en una petita variació d'aquesta estimació final i, considerant que la finestra de búsqueda és molt estreta, moltes branques no requereixen avaluació. Si l'algorisme retorna un valor fora de la finestra establerta s'ha de tornar a fer l'avaluació ampliant la finestra; els nodes ja avaluats es troben a una taula de transposició, per evitar haver de tornar a fer la seva exploració.

Actualment el millor programa per a jugar a escacs amb aquest enfocament d'algorisme clàssic (minimax amb heurístics i algorismes de desbroçament) és el programa Open Source Stockfish, que, en el moment de revissar aquest text ja es troba en la versió 15.1. La versió Stockfish 8 va ser derrotada en desembre de 2017. Havia arribat l'era de la cerca de Montecarlo i les xarxes neuronals en els escacs, i era el final dels tan patits heurístics i desbroçaments alfa-beta.

Búsqueda de Montecarlo

Les tècniques minimax requereixen un heurístic d'avaluació, i les tècniques alfa-beta un haurístic addicional d'ordenació; les tècniques de millora de la poda alfa-beta requereixen a més a més un oracle que faci una estimació del valor de l'heurístic d'avaluació que s'obtindrà per poder estretar la finestra... El problema és que els heurístics són estimacions que intenten formular el coneixement expert, però són difícils d'establir, a més a més considerant que la manera de veure el problema un expert, generalment molt adaptable a diferents situacions, no sempre coincideix amb els requeriments, molt fixes d'un algorisme; resumint: un algorisme amb fortes dependències d'un heurístic té grans debilitats.

L'enfocament més conservador podria ser incorporar un sistema d'aprenentatge per a aquest heurístic, per a provar d'obtenir-ho empíricament, però un joc es resistia a l'enfocament minimax durant anys; aquest joc era el Go, que té un factor de ramificació molt alt, de l'ordre d'entre 150 i 250 moviments diferents possibles per a cada jugador, degut al seu tauler quadrat amb 19 caselles per costat, fent un total de 361 caselles, més del doble en caselles que C'escacs.

El mètode de cerca de Montecarlo consisteix en fer servir un mostreig al·leatori, per a casos on no és possible una altra tècnica. i data dels anys 1940. Però va ser en 1987 que Bruce Abramson va combinar la búsqueda minimax amb continuacions aleatòries fins el final de la partida, en comptes de fer servir una funció heurística d'avaluació.

Aquestes tècniques varen ser també molt útils per millorar els algorismes de demostració automàtica de teoremes, una altra aportació de la teoria de jocs a altres branques que es poden considerar més serioses, de la mateixa manera que minimax s'ha generalitzat al camp de la presa de decisions.

B. Brügmann va fer servir l'algorisme per resoldre el problema del joc del Go en 1992. No va ser fins a 2006 que Rémi Coulom va descriure l'aplicació del mètode de Montecarlo a la búsqueda d'arbres de joc, i el va anomenar com a cerca de Montecarlo. L. Kocsis i Cs. Szepesvári desenvoluparen l'algorisme UCT (Upper Confidence bounds applied to Trees).

Deepmind, adquirida per Google en 2014, en 2015 presentà AlphaGo, el primer programa que derrota un humà al Go en nivell campionat, i en març de 2016 es declarà campió.

L'algorisme consta de quatre fases:

El gran aventatge d'aquest algorisme és que no existeix cap dependència d'heurístics, tot i que es poden fer servir sesgant el comportament aleatori per mirar de millorar-ho.

L'inconvenient més gran és que requereix una gran potència de càlcul per a l'entrenament de la xarxa neuronal. Per a decrementar la potència de càlcul requerida per a l'entrenament es pot començar amb un comportament inicial fonamentat en heurístics, i fer servir la xarxa neuronal únicament per a l'aprenentatge d'un nivell superior de coneixement del joc. Preferiblement aquests heurístics hauran de ser senzills i efectius, per evitar sobrecostos i biaixos.

Deepmind: AlphaZero i MuZero

d'AlphaGo a MuZero
d'AlphaGo a MuZero

AlphaGo fou el primer programa de jugar a Go a nivell de mestre, aconseguint el títol de campió del món en 2016. El programa incorporava coneixement específic per a la incorporació d'heurístics, i havia aprés amb una gran base de dades existent amb partides.

L'experiència d'AlphaGo es va aprofitar per construir AlphaGo Zero, que ara només tenia coneixement de les regles del joc, sense cap altre mena d'heurístic ni coneixement específic del joc. El programa havia aprés jugant partides simulades contra ell mateix, fent servir una tècnica d'aprenentatge per reforç.

AlphaGo Zero es va generalitzar a AlphaZero, que era capaç de jugar a diferents jocs: els escacs i el Shogi, a més del Go, tot només incorporant les regles del joc. Aquest programa aviat va guanyar al millor programa que feia servir les tèniques minimax tradicionals, amb poda alfa-beta i moltes altres tècniques que s'havien desenvolupat al llarg dels anys, però totes elles fortament fonamentades en l'existència d'heurístics.

Aquest programa fa servir una cerca de Montecarlo incorporant aprenentatge del joc per reforç per a programar una xarxa neuronal d'aproximadament vuitanta nivells, sumant un total de centenars de milers de nodes (neurones).

Podem veure com algunes de les tècniques d'escacs d'AlphaZero han sorprés fins i tot els grans experts dels escacs, doncs els moviments, no tan limitats pels heurístics que s'exigeixen als programes d'escacs, sovint són inesperats i sorprenents. En el blog zugzwang podem veure quatre exemples comentats d'aquest desafiament. També podem veure comentada una partida d'un posterior desafiament en desembre de 2018, d'una versió renovada d'AlphaZero contra la mateixa versió Stockfish 8, tot i ja existir la versió 10 del programa. º

És cert que, tot i que inicialment AlphaZero va derrotar el millor programa del moment, Stockfish 8, es critica el desequilibri en el maquinari que han fet servir les dues parts. Stockfish incorpora millores en les seves successives versions, en el moment d'escriure aquest text, la versió 15.1. També AlphaZero ha incorporat millores; la versió d'alpha-zero actual és la 16, però una versió d'un codi que ja no pertany a Deepmind Google, sinó reproduccions implementades per tercers, però ens permet veure algunes partides més, doncs la versió de Deepmind ha deixat d'estar accessible:

En 2019 DeepMind publicà un nou artícle on detalla MuZero, un nou algorisme capaç de generalitzar AlphaZero, per a jugar a jocs de taula i jocs Atari (Arcade) sense conèixer les regles o representacions del joc; el programa MuZero fa servir tres xarxes neuronals, en comptes d'una sola, i no ha millorat a AlphaZero, però l'ha igualat sense tenir informació del joc. Com s'ha comentat, la versió d'AlphaZero ja no és mantinguda per Deepmind Google, però s'han desenvolupat clons des de la informació que es va publicar.

Algunes referències addicionals

  1. How Computers Play Chess, 1990, D.N.L. Levy, Monty Newborn. Ed W.H.Freeman & Co Ltd.
  2. Chess Programming Wiki
  3. Desarrollo de un motor de ajedrez. Algoritmos y heurísticas para la reducción del espacio de búsqueda. Bachelor Thesis. Omar Edgardo, L. S. 2010
  4. https://stockfishchess.org/
  5. Stockfish: configuración, descarga y secretos
  6. Stockfish 15.1: nueva versión todavía más fuerte
  7. AlphaZero: Analizamos sus mejores jugadas de ajedrez en el match contra Stockfish
  8. Minimax and Monte Carlo Tree Search
  9. Wikipedia: Monte Carlo tree search
  10. Monte Carlo Tree Search: An Introduction
  11. AlphaZero Resources (DeepMind)
  12. Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm
  13. AlphaZero Chess: How It Works, What Sets It Apart, and What It Can Tell Us
  14. A Simple Alpha(Go) Zero Tutorial
  15. MuZero: The Walkthrough (Part 1/3)
  16. MuZero: The Walkthrough (Part 2/3)
  17. MuZero: The Walkthrough (Part 3/3)
Free Web Hosting