Кіріспе
Компьютерлік шахматта тақтаның бейнеленуі – шахмат бағдарламасындағы шахмат тақтасындағы позицияны және оған байланысты ойын күйін көрсететін дерек құрылымы. Тақтаның бейнеленуі шахмат бағдарламасының барлық аспектілері үшін негізгі болып табылады, оның ішінде мүмкін болатын қозғалыстарды жасау, бағалау функциясы, қозғалыстарды жасау және кері қайтару (яғни іздеу), сондай-ақ ойын барысындағы ойын күйін сақтау. Әр түрлі тақта бейнелеулері бар. Шахмат бағдарламалары тиімділік үшін әртүрлі уақытта бірнеше тақта бейнелеуін пайдалануы мүмкін. Орындау тиімділігі және жад көлемі – тақта бейнелеуін таңдаудағы басты факторлар; қосымша қарастырылатын мәселелер – қолданбаны кодтауға, сынауға және түзетуге жұмсалатын күш. Алғашқы бағдарламаларда пішін тізімі және шаршы тізімі қолданылды, екеуі де массив негізінде құрылған. Көптеген қазіргі заманғы жүзеге асырулар 64 биттік сөздің немесе қос сөздің биттерін тақтаның шаршыларымен сәйкестендіретін, біттік тақталар деп аталатын күрделірек, бірақ тиімді біттік массивтік тәсілді қолданады.
Board representation in computer chess is a data structure in a chess program representing the position on the chessboard and associated game state. Board representation is fundamental to all aspects of a chess program including move generation, the evaluation function, and making and unmaking moves (i. e. search) as well as maintaining the state of the game during play. Several different board representations exist. Chess programs often utilize more than one board representation at different times, for efficiency. Execution efficiency and memory footprint are the primary factors in choosing a board representation; secondary considerations are effort required to code, test and debug the application. Early programs used piece lists and square lists, both array based. Most modern implementations use a more elaborate but more efficient bit array approach called bitboards which map bits of a 64 bit word or double word to squares of the board.
Бөлшектер тізімі
Ең алғашқы шахмат бағдарламаларының кейбіреулері өте шектеулі жад көлемімен жұмыс істеді, олар шахмат фигураларын үлкенінен кішісіне дейін ыңғайлы іздеуге болатын ретпен тізбекті тізімдерде (массивтерде) сақтады; әр фигураның тақтадағы орны және басқа да ақпарат, мысалы, оның мүмкін қозғалыстарын көрсететін квадраттар оған байланысты болды. Бірнеше тізім болды, олардың бірі ақ фигураларға, екіншісі қара фигураларға арналған. Тізімдер әдетте фигуралар мен пілдерге бөлінетін. Бұл ықшам түрде бейнелеуге мүмкіндік берді, себебі тақтаның көп бөлігі бос болды, бірақ тиімсіздікке алып келді, өйткені фигуралардың тақтаға немесе бір-біріне қатысты ақпаратын алу қиынға соқты. Фигуралар тізімі бүгінгі таңда көптеген бағдарламаларда жеке тақта бейнелеу құрылымымен бірге қолданылады, бұл тақтаны қарастырмай, фигураларға тізбектей қол жеткізуге мүмкіндік береді.
Квадраттық тізім
Тақтаны бейнелеудің ең қарапайым тәсілдерінің бірі – 8x8 екі өлшемді массивті (немесе, балама ретінде, 64 элементті бір өлшемді массивті) құру. Әрбір массив элементі берілген шаршыда қандай фигура тұрғанын көрсетеді, немесе шаршы бос екенін анықтайды. Көп қолданылатын кодтау жүйесінде 0 бос шаршыны, оң сан – ақ фигураларды, ал теріс сан – қара фигураларды білдіреді, мысалы, ақ пион +1, қара пион −1, ақ жылқы +2, қара жылқы −2, ақ піл +3 және т.б. Бұл схема пошта жәшіктерінің адрестеуі деп аталады. Бұл тәсілді пайдалану кезінде қозғалыс жасау барысында қиындықтар туындайды. Әрбір қозғалыс тақта жиегінен шығып кетпеуі үшін тексерілуі керек, бұл процесті айтарлықтай баяулатады. Осы мәселені шешу үшін 12x12 массивті пайдалануға болады, оның сыртқы жиектері, мысалы, 99 санымен толтырылады. Қозғалыс жасау кезінде, мақсатты шаршыда фигура бар екенін тексеру операциясы мақсатты шаршының тақтадан тыс екенін де көрсетеді. Жадты тиімді пайдалану үшін 10x12 массивті қолдануға болады, ол 12x12 массив сияқты бірдей мүмкіндіктерді қамтамасыз етеді, сол және оң жақ шеттік қатарларын (тақтадан тыс деп белгіленген) біріктіру арқылы.
Біт-тақталар
Массивке негізделген құрылымдарға қарағанда тиімді, бірақ күрделірек тақта бейнелеуі – битборд. Битборд – 64 биттен тұратын биттік тізбек (0 немесе 1), ол тақтадағы әрбір ұяшықтың күйін (бар немесе жоқ, нақты немесе жалған) көрсетеді. Тақтаның позициясын бірнеше битбордтар арқылы бейнелеуге болады. Мысалы, әр түрлі фигуралардың әрбір жаққа арналған битбордтар сериясы тақтаның позициясын көрсете алады. Мұндай бейнелеудің артықшылығы – тақтаның күйі туралы ақпаратты өңдеу және алу үшін итерацияны пайдаланудың орнына 64 биттік құрылымдардағы биттік-параллель операцияларды қолдану мүмкіндігі. Бұл қолданыстағы аппараттық құралдарды, әсіресе 64 биттік процессорлар кең таралғандықтан, барынша пайдалануға мүмкіндік береді. Битбордтардың маңызды артықшылығы – тақтаның әрбір ұяшығындағы әр түрлі фигуралардың шабуылдай алатын ұяшықтарының карталарын алдын ала жинап, кестеде сақтауға болады. Осылайша, фигураның мүмкін қозғалыстарын фигура орналасқан ұяшықтың шабуыл картасын бір рет жадтан алу арқылы табуға болады, бұл достық фигуралар тұрған ұяшықтарды ескермей (бір биттік операция арқылы), фигураның заңды қозғалыстарын анықтайды. Бірақ жылғыш фигуралардың (мұнара, піл, патшайым) қозғалысы белгісіз, себебі олардың қозғалысы тақтадағы басқа фигуралардың орналасуына байланысты. Сондықтан олардың қозғалыстарын бейнелеу үшін арнайы және күрделі дерек құрылымдары жасалған.
Айналатын биттiк тақталар
Ротациялық бит-тақталар – жылғышақ фигуралардың қозғалысын жасау әдісі, ол бит-тақтаның айналған көшірмелерін файлдағы немесе диагональдағы бос орындарды (биттерді) қатарды көрсететін биттерге ұқсас жақынғы биттерге орналастыру үшін қолданады. Бұл биттерді алып, кестеге индекс ретінде пайдаланып, осы фигуралардың шабуылдайтын кеңістіктер картасын алуға болады. Файлдарды индекстеу үшін бит-тақта 90°-қа, ал диагональды индекстеу үшін 45°-қа немесе -45°-қа бұрылады. Шахмат тақтасын айналдыру түсінік тұрғысынан қиын, ал бит-тақтаны айналдыру есептеу жағынан тиімсіз, бірақ бұл түрлендіру фигуралардың қозғалысын тізбектеп санаудан немесе тақтаның конфигурациясын ескеру үшін фигураның шабуыл картасының бит-тақтасын жылжыту және маскилеудің ұзақ тізбегінен сақтайды.
Тікелей іздеу
Маскаланған қатарлар, файлдар және жылжымалы фигуралардың диагональдары хэш-функция арқылы маскаланған бөлігіндегі бос орын биттеріне сүйенген, алдын ала есептелген шабуыл векторларының кестесін тікелей индекстеу үшін қолданылуы мүмкін. Мұндай схемалардың бірі, жадта сақталуы тиіс кесте мөлшерін азайту үшін түрлі амалдармен бірге кемел хэш-функциясын пайдаланады және "магиялық бит-тақталар" деп аталады.
Жерге көшіру кестесі
Транспозициялық кесте – компьютерлік ойын бағдарламасы құратын ойын ағашында бұрын кездескен позициялар мен оларға сәйкес бағалаулардың жедел жады (кэш). Кестеде жылдам іздеу үшін, сәйкес келетін ойын тақталарын жылдам табу мақсатында Zobrist хэшингі сияқты хэш функциясы қолданылуы мүмкін.
Басқа әдістер
Басқа әдістер, мысалы, ықшам шахмат тақтасы бейнелеуі (CCR) ұсынылған, бірақ ешқайсысы қабылданбады. CCR тақтаның толығын көрсету үшін әрбір шаршыға 4 бит қолданады, толық қатарды 32 битте, ал шахмат тақтасын 8 регистрде (қалған позиция туралы ақпарат үшін қосымша біреуімен) бейнелеуге болады. Шаршының толығу кодын регистрден алып, бағдарлама санауышқа (program counter) қосу арқылы секіру кестесін (jump table) индекстеуге болады, бұл сол шаршыдағы (бар болса) фигура түріне арналған қозғалыстарды жасау кодын тікелей шақырады. Бағдарлама дәстүрлі қозғалыс жасау әдістеріне қарағанда ұзақ болғанымен, тақта шегараларын тексерудің қажеті жоқ, және тақтадан тыс қозғалыстар жасау мүмкін емес, бұл қозғалыс жасау жылдамдығын арттырады. CCR-дің кемшіліктері: 1) 32 биттік сөз өлшеміне тәуелділік; 2) API-ге кем дегенде 9 бос регистрдің болуы; 3) регистрлерге қол жеткізу үшін CISC архитектурасында ассемблерде бағдарламалау қажеттігі; 4) ассемблерлік қосымшаның портативті еместігі.