IDEI DE PROGRAMARE
Bucuresti, 1987
IDEI DE PROGRAMARE
Trebuie menționat de la început că nu cunosc detalii despre nici un program de jucat GO și că n-am încercat și - sper - nici nu voi încerca să scriu un asemenea program. Rândurile care urmează trebuie deci interpretate ca o provocare pentru cititorul informatician (posesor eventual al unui calculator personal), ca o primă încercare de a face un pas de la obiectivul super-vag: „programul trebuie să joace GO și, pe cât posibil, să joace bine”, la un set de obiective mai concrete, la probleme particulare, cu șanse de a fi rezolvate (și programate).
Două principii stau la baza ideilor de aici: 1) programul trebuie să evalueze într-o măsură cât mai mare static pozițiile (explorarea dinamică, anticipând mutări, depășește orice posibilitate de calcul și trebuie încheiată tot printr-o evaluare statică a unei formații finale) și 2) programul trebuie să fie cât mai modular, perfectibil deci pe porțiuni.
La baza alegerii mutării de executat poate sta o apreciere a valorii fiecărui punct al tablei în acel moment, mod de lucru uzual în programele pentru jocuri strategice și facilitat în cazul GO-ului de existența punctelor propriu-zise pe care cei doi jucători și le dispută. Trebuie deci plecat de la asocierea de punctaje tuturor intersecțiilor tablei (zero pe margine, câteva puncte pentru linia a doua, mai multe pentru a treia, maxim în jurul punctelor de handicap, descrescător din nou spre centru etc.), pe care să le reevaluăm după fiecare mutare proprie sau a adversarului.
Pentru primele mutări (fuseki), procedura pare a fi simplă și convenabilă (permite și reținerea unor elemente de strategie a deschiderii): punctele care dau formații de colț recomandabile, extinderi potrivite sau joseki-uri de deschidere vor fi apreciate superior, în raport cu valoarea lor (de „teritoriu” schițat, de influență, echilibru etc.).
Lucrurile se complică după intrarea în faza de mijloc. Oricum, calculele pot fi facilitate de reținerea continuă în memorie a următoarelor informații despre grupurile proprii și adverse: 1) numărul curent al grupului; 2) piesele componente (deci și numărul lor); 3) punctele pe care grupul intenționează să le închidă (deci și numărul lor); 4) numărul de libertăți (infinit dacă grupul are deja doi ochi sau dacă structura a fost recunoscută ca viabilă); 5) punctele de extindere (pentru apărarea sau pentru folosirea influenței); 6) grad de stabilizare (maxim pentru grupuri cu doi ochi sau aflate în apropierea unor grupuri prietene cu doi ochi, mic pentru grupuri aflate în zona de influență a grupurilor adverse puternice etc.); 7) grupuri prietene cu care se poate colabora (teritoriu comun, conectare etc.); 8) aji-uri, slăbiciuni evaluate în funcție de urgență.
Toate aceste caracteristici pot fi apreciate destul de bine static (cu limite, desigur); oricum, ele trebuie evaluate după fiecare mutare (grupuri noi, conectări de grupuri vechi). în principiu, recalcularea valorii punctelor trebuie făcută pentru toată tabla (pentru început, 13x13 este de ajuns), pornind totuși dinspre grupul la care tocmai s-a jucat, până acolo unde „iradiază” influența lui; pe baza funcției anterioare se poate recunoaște și sfârșitul partidei: momentul când valoarea tuturor punctelor este nulă. Scara și rețeaua sunt ușor de ,,învățat”; la fel și KO-ul. La colțuri și la margini trebuie folosite cât mai multe joseki-uri.
Bineînțeles, neanticipând mutări, programul va putea fi ușor ,,păcălit" la nivel tactic, iar din punct de vedere tehnic, rămâne a fi rezolvată o serie de probleme importante: cum parcurgem sistematic, piesă cu piesă, un grup? cum numărăm libertățile? cum „baleiem” sistematic (și corect) zona lui de influență? Etc. etc. Ce propune cititorul?
Problemă: Negrul joacă și-și salvează cele trei piese de sus.
Răspuns: Negru B5, alb C5, negru B4.
Gheorghe Păun