Кіріспе

Ойын ағашында бұрын кездескен позициялардың және оларға байланысты бағалаулардың кэші – компьютерлік ойын бағдарламасы құратын ойын ағашында бұрын кездескен позициялар мен оларға байланысты бағалаулардың жиынтығы. Егер позиция әртүрлі қимылдар тізбегі арқылы қайталанса, оның мәні кестеден алынып, сол позициядан төменгі ойын ағашын қайта іздеудің қажеті болмайды. Транспозициялық кестелер ең алдымен толық ақпаратты ойындарда (ойынның толық күйі барлық ойыншыларға әрдайым белгілі болатын ойындарда) тиімді. Транспозициялық кестелерді қолдану – ағашты іздеу кезіндегі есте сақтау (мемоизация) және динамикалық бағдарламалаудың бір түрі. Транспозициялық кестелер әдетте хэш-кестелер түрінде іске асырылады, онда ағымдағы ойын тақтасының орны хэш-индекс ретінде кодталады. Ойын ағашында кездесуі мүмкін позициялар саны іздеу тереңдігінің экспоненциалдық функциясы болып табылады және мыңнан миллионға, тіпті одан да көп болуы мүмкін. Сондықтан, транспозициялық кестелер жүйелік жадтың көп бөлігін пайдаланады және көбінесе ойын бағдарламаларының жадты пайдалануының басым бөлігін құрайды.

Функционалдылығы

Ойын бағдарламалары ойынның келесі бірнеше ходында пайда болуы мүмкін миллиондаған позицияларды талдау арқылы жұмыс істейді. Әдетте, бұл бағдарламалар тереңдікке бірінші іздеуге ұқсас стратегияларды қолданады, яғни олар осы уақытқа дейін талдалған барлық позицияларды қадағаламайды. Көптеген ойындарда белгілі бір позицияға бірнеше жолмен жету мүмкін. Бұларды транспозициялар деп атайды. Шахматта, мысалы, 1. d4 Nf6 2. c4 g6 (алгебралық шахмат нотациясын қараңыз) ходтарының тізбегі 4 мүмкін транспозицияға ие, өйткені кез келген ойыншы ходтар тәртібін ауыстыра алады. Жалпы, n ходтан кейін мүмкін транспозициялардың жоғарғы шегі (n!)2 болады. Олардың көбісі заңсыз ходтар болса да, бағдарлама бір позицияны бірнеше рет талдаумен аяқталуы мүмкін. Бұл мәселені болдырмау үшін транспозиция кестелері қолданылады. Мұндай кесте – белгілі бір тереңдікке дейін талдалған позициялардың әрқайсысының хэш-кестесі. Жаңа позицияға тап болған кезде, бағдарлама кестеде позицияның талданып үлгергенін тексереді; бұл тез арада, амортизацияланған тұрақты уақытта орындалуы мүмкін. Егер солай болса, кестеде осы позицияға бұрын берілген мән бар; бұл мән тікелей қолданылады. Егер жоқ болса, мән есептеледі және жаңа позиция хэш-кестеге енгізіледі. Компьютер іздеген позициялар саны көбінесе ол жұмыс істейтін жүйенің жад шектеулерінен асып түседі; сондықтан барлық позицияларды сақтау мүмкін емес. Кестені толтырғанда, аз пайдаланылатын позициялар жаңаларына орын жасау үшін алынып тасталады; бұл транспозиция кестесін кэш сияқты етеді. Транспозиция кестесін қарау арқылы сақталатын есептеу тек бір позицияны бағалау ғана емес. Оның орнына, бүкіл кіші ағашты бағалаудан аулақ болады. Осылайша, ойын ағашының тереңдігі аз түйіндер үшін транспозиция кестесі жазбалары құнды (бұл түйінге тамырланған кіші ағаштың көлемі үлкен болғандықтан) және сондықтан кесте толғанда және кейбір жазбаларды тастап кету керек болған кезде көбірек мән беріледі. Транспозиция кестесін іске асыратын хэш-кестеде транспозицияларды табудан басқа да мақсаттар болуы мүмкін. Альфа-бета кесу кезінде іздеу ең жылдам (әрине, оңтайлы) ең жақсы ходыға сәйкес келетін түйіннің баласы әрқашан бірінші болып қарастырылатын кезде. Әрине, алдын ала ең жақсы ходы білудің жолы жоқ, бірақ итеративті тереңдетуді қолданғанда, терең емес іздеуде ең жақсы деп табылған ходы жақсы жуықтама болып табылады. Сондықтан бұл ходы бірінші рет жасауға тырысамыз. Түйіннің ең жақсы баласын сақтау үшін, транспозиция кестесіндегі сол түйінге сәйкес келетін жазба қолданылады. Транспозиция кестелерін қолдану графиктік тарихтың өзара әрекеттесу проблемасын мұқият шешпесе, дұрыс емес нәтижелерге әкелуі мүмкін. Бұл мәселе белгілі бір ойындарда туындайды, өйткені позицияның тарихы маңызды болуы мүмкін. Мысалы, шахматта ойыншы король немесе қоршау ойын барысында қозғалса, қоршауға алмайды. Бұл мәселенің жалпы шешімі – Zobrist хэш-кілтінің бөлігі ретінде қоршау құқықтарын қосу. Тағы бір мысал – тең ойнау: белгілі бір позиция берілген жағдайда, оның бұрыннан болған-болмағанын анықтау мүмкін емес. Жалпы мәселенің шешімі – тарихтық ақпаратты транспозиция кестесіндегі әрбір түйінде сақтау, бірақ бұл тиімді емес және тәжірибеде сирек жасалады.

Ауыстыру стратегиясы

Транспозициялық кесте – жүйелік жады көлемімен шектелген кэш, ол кез келген сәтте толып кетуі мүмкін. Шындығында, оның толуы күтіледі, ал кез келген уақытта кэште сақталанатын позициялардың саны ойын ағашындағы түйіндер санынан әлдеқайда аз (көп есе кіші) болуы мүмкін. Көптеген түйіндер транспозициялық түйіндер емес, яғни қайта пайда болатын позициялар емес, сондықтан потенциалды транспозициялық түйіндерді сақтап, қалғандарын алмастыратын тиімді алмастыру стратегиялары ағаш көлемін айтарлықтай қысқартуға мүмкіндік береді. Алмастыру әдетте ағаш тереңдігі мен ескіру деңгейіне негізделеді: ағаштағы жоғары (тамырға жақын) түйіндерге басымдық беріледі, себебі олардың төменгі тармақтары үлкенірек болып, үлкен үнемдеуге алып келеді; сондай-ақ, жақында пайда болған түйіндерге басымдық беріледі, өйткені ескі түйіндер қазіргі позицияға ұқсамайды, демек оларға транспозиция жасау ықтималдығы төмен. Басқа стратегияларға – негізгі вариациядағы түйіндерді, ағаш тереңдігіне қарамастан үлкен тармақтары бар түйіндерді және кесуді тудырған түйіндерді сақтау кіреді.

Өлшемі мен өнімділігі

Транспозиция болатын түйіндердің үлесі шағын болғанымен, ойын ағашы экспоненциалды құрылым болып табылады, сондықтан мұндай түйіндердің өте аз санын кэштеу үлкен әсер етеді. Шахматта күрделі орта ойын позицияларында іздеу уақыты 0-50% дейін, ал соңғы ойында 5 есеге дейін қысқарғаны хабарланды.

Қатынасты әдістер

Осыған ұқсас әдістер позицияның белгілі бір ерекшеліктерінің бағалауларын кэштеу үшін қолданылуы мүмкін. Мысалы, пешка хэш-кестесі позициядағы пешка құрылымдарының бағалауын сақтау үшін пайдаланылуы мүмкін. Қарастырылған пешка позицияларының саны, ізделген позициялардың жалпы санынан әлдеқайда аз болғандықтан, пешка хэш-кестесінің өте жоғары тиімділігі бар, бұл бағдарламаға күрделі пешка бағалауларына көбірек уақыт жұмсауға мүмкіндік береді, себебі олар көп рет қайта қолданылады. Қарсылық кестесі тамыр түйінінен жапырақ түйіндеріне дейінгі қозғалыстар тізбектерін сақтау үшін қолданылуы мүмкін. Бұл негізгі вариацияны және басқа да нұсқауларға берілген жауаптарды қамтиды, олардың нашар екенін көрсетеді. Компьютерлік шахматтың бастапқы жылдарында, жад шектеулі болған кезде, кейде транспозиция кестелерінің орнына қарсылық кестелері қолданылды. Кейбір қазіргі шахмат бағдарламалары қозғалыстарды реттеу үшін транспозиция кестелерімен қатар қарсылық кестелерін де пайдаланады. Бағдарлама басталып келе жатқанда, әр түрдегі фигуралардың тақтадағы әрбір жаққа жасауға болатын қозғалыстарының статикалық биттік карталары кэштелуі мүмкін, сонда фигураның заңды қозғалыстарын (немесе бірге, қозғалыс жасау үшін барлық заңды қозғалыстарды) бір жадтан жүктеу арқылы алуға болады, оларды тізбектеп санаудың қажеті болмайды. Бұлар көбінесе битбордтарда қолданылады.