Кіріспе
AlphaBeta ойын ағашын іздеуді жақсарту Негізгі вариация іздеу (кейде іс жүзінде бірдей NegaScout-пен теңестіріледі) - бұл альфабета кесуден жылдам болатын негамакс алгоритмі. Альфа-бета кесу сияқты, NegaScout - ағаштағы түйіннің минимакс мәнін есептеу үшін бағыттаушы іздеу алгоритмі. Ол альфа-бета кесуді үстем етеді, өйткені ол альфа-бетамен кесуге болатын түйінді ешқашан қарамайды; дегенмен, ол осы артықшылықты пайдаланбау үшін дәл түйіндерді реттеуге негізделеді. NegaScout жақсы жұмыс істесе, онда жақсы қозғалыс ордерлері болады. Іс жүзінде, жылжыту тәртібі көбінесе алдыңғы терең емес іздеулер арқылы анықталады. Ол бірінші зерттелген түйіннің ең жақсы екенін болжамдау арқылы альфа-бетадан көп кесілімді шығарады. Басқаша айтқанда, ол бірінші түйін негізгі түрлендіруде деп болжайды. Содан кейін ол қалған түйіндерді нөлдік тереземен (алфа және бета тең болған кезде, скаут терезесі деп те аталады) іздеу арқылы оның шынайы екенін тексере алады, бұл әдеттегі альфа-бета терезесімен іздеуден жылдам. Егер дәлелдеу сәтсіз болса, онда бірінші түйін негізгі түрлендіруде болған жоқ және іздеу қалыпты альфа-бета ретінде жалғасады. Сондықтан NegaScout жылжытуды жақсы тапсырған кезде жақсы жұмыс істейді. Кездейсоқ қозғалыс тәртібімен NegaScout әдеттегі alphabeta-ға қарағанда көп уақыт алады; alphabeta-ның кез келген түйінін зерттемегенмен, оған көптеген түйіндерді қайта іздеу керек болады. Александр Рейнфельд NegaScout-ты альфа-бета кесуді ойлап тапқаннан бірнеше онжылдықтан кейін ойлап тапты. Ол өзінің кітабында NegaScout-тың дұрыстығын дәлелдеді. SSS* деп аталатын басқа іздеу алгоритмі теориялық түрде ізделген түйіндердің санын азайта алады. Алайда, оның бастапқы құрастырылуында практикалық мәселелер бар (әсіресе, ол сақтау үшін АЖЫРЫЛЫҚ тізімге қатты сүйенеді) және қазіргі уақытта көптеген шахмат қозғалтқыштары әлі де NegaScout түрін іздеуде қолданады. Шахмат ойындарының көпшілігі іздеу ағашының тиісті бөлігі сақталатын транспозициялық кесте қолданады. Ағаштың бұл бөлігі SSS* АЖЫЛЫСТЫРЫЛҒАН тізіміндегідей өлшемді. MT SSS* деп аталатын қайта құру оны AlphaBeta (немесе NegaScout) дегенге нөлдік терезелік шақырулар сериясы ретінде іске асыруға мүмкіндік берді, ол транспозициялық кестеді қолданады және ойын ойнау бағдарламаларын пайдалана отырып тікелей салыстырулар жасауға болады. Ол NegaScout-тан тәжірибеде артық нәтиже бермеді. НегаСкаут-тан жақсы жұмыс істейтін тағы бір іздеу алгоритмі - MTD ((f) деп аталатын ең жақсы бірінші алгоритм, бірақ бір алгоритм екіншісіне үстемдік етпейді. NegaScout SSS* немесе MTD ((f) -ден аз түйіндерді іздейтін ағаштар бар және керісінше. NegaScout 1980 жылы Judea Pearl ойлап тапқан SCOUT-тан кейін пайда болды, бұл альфа-бетадан жақсы нәтижеге қол жеткізген және асимптотикалық оптималдыққа ие болған алғашқы алгоритм болды. Негамакс параметрінде β=α+1 бар нөлдік терезелерді J.P. Fishburn өз бетінше ойлап тапты және оны Ph.D. қосымшасында SCOUT-қа ұқсас алгоритмде қолданды. D. диссертация, параллель альфа-бета алгоритмімен және іздеу ағашының түпкі түйінінің соңғы кіші ағашы бойынша.
Principal variation search (sometimes equated with the practically identical NegaScout) is a negamax algorithm that can be faster than alpha–beta pruning. Like alpha–beta pruning, NegaScout is a directional search algorithm for computing the minimax value of a node in a tree. It dominates alpha–beta pruning in the sense that it will never examine a node that can be pruned by alpha–beta; however, it relies on accurate node ordering to capitalize on this advantage. NegaScout works best when there is a good move ordering. In practice, the move ordering is often determined by previous shallower searches. It produces more cutoffs than alpha–beta by assuming that the first explored node is the best. In other words, it supposes the first node is in the principal variation. Then, it can check whether that is true by searching the remaining nodes with a null window (also known as a scout window; when alpha and beta are equal), which is faster than searching with the regular alpha–beta window. If the proof fails, then the first node was not in the principal variation, and the search continues as normal alpha–beta. Hence, NegaScout works best when the move ordering is good. With a random move ordering, NegaScout will take more time than regular alpha–beta; although it will not explore any nodes alpha–beta did not, it will have to re search many nodes. Alexander Reinefeld invented NegaScout several decades after the invention of alpha–beta pruning. He gives a proof of correctness of NegaScout in his book. Another search algorithm called SSS* can theoretically result in fewer nodes searched. However, its original formulation has practical issues (in particular, it relies heavily on an OPEN list for storage) and nowadays most chess engines still use a form of NegaScout in their search. Most chess engines use a transposition table in which the relevant part of the search tree is stored. This part of the tree has the same size as SSS*'s OPEN list would have. A reformulation called MT SSS* allowed it to be implemented as a series of null window calls to Alpha–Beta (or NegaScout) that use a transposition table, and direct comparisons using game playing programs could be made. It did not outperform NegaScout in practice. Yet another search algorithm, which does tend to do better than NegaScout in practice, is the best first algorithm called MTD(f), although neither algorithm dominates the other. There are trees in which NegaScout searches fewer nodes than SSS* or MTD(f) and vice versa. NegaScout takes after SCOUT, invented by Judea Pearl in 1980, which was the first algorithm to outperform alpha–beta and to be proven asymptotically optimal. Null windows, with β=α+1 in a negamax setting, were invented independently by J. P. Fishburn and used in an algorithm similar to SCOUT in an appendix to his Ph. D. thesis, in a parallel alpha–beta algorithm, and on the last subtree of a search tree root node.
Бұл идея
Көптеген қимылдар екі ойыншыға да қолайлы емес, сондықтан нақты ұпай алу үшін әр торапты толық іздеудің қажеті жоқ. Нақты ұпай тек негізгі вариациядағы түйіндер үшін қажет (екі ойыншы үшін де қозғалыс тізбектерінің оңтайлы), онда ол тамырға дейін таралады. Итеративті тереңдету іздеуде алдыңғы итерация мұндай реттілікке үміткерді қалыптастырды, оны әдетте негізгі вариация деп те атайды. Осы негізгі вариациядағы кез келген жапырақ емес үшін оның балалары келесі түйін осы негізгі вариациядан бірінші бала болып табылатындай реттеп отырады. Барлық басқа балалар қазіргі ойыншының төмен немесе тең ұпайға ие болады деп есептеледі (бұл болжам қазіргі PV кандидаты нақты PV болып табылады деген болжамнан туындайды). Мұны тексеру үшін біз бірінші қимылды толық тереземен іздестіреміз, басқа балалардың ұпайларының жоғарғы шегін белгілеу үшін, бұл үшін біз нөлдік терезе іздестіруін жүргіземіз, егер қимыл жақсырақ бола алатынын тексеру үшін. Бетті кесу жиілігі жоғары болғандықтан, нөлдік терезе іздеу әлдеқайда арзан болғандықтан, бұл көп күш жұмсай алады. Егер біз бір қимыл альфаны көтере алатынын анықтасақ, біздің болжам осы қимыл үшін дәлелденген болады және біз нақты ұпай алу үшін толық тереземен іздеу жүргіземіз.