ССС* Алгоритам
SSS* је алгоритам претраге који је изумео Џорџ Стокман 1979. Овај алгоритам проналази стабло игре претрагом по најбољим особинама слично А* алгоритму.
SSS* се заснива на идеји решавања стабала. Информативно, решено стабло може бити формирано од било које произвољне игре стабала одрезивањем грана сваком МАX ћвору до последњег. Такво дрво репрезентује комплетну стратегију за МАX, пошто спецификује тачно једну МАX акцију за сваку могућу секвенцу потеза направљену од стране противника. За дато дрво игре, ССС* претражује кроз простор парцијалних решења стабала, постепено анализирајући све већа и већа постабла, и на крају евентуално ствара јединствено решење стабла са истим кореном и Минимаx вредношносћу оригиналног стабла игре. ССС* никада не испитује чвор који би Алфа-бета претрага откресала, и може откресати неке гране које алфа-бета не би. Стоцкман је спекулисао да је ССС* због тога бољи алгоритам од алфа-бета алгоритма. Ипак, Игор Роизен и Јудеа Пеарл су показали[1] да уштеда у броју позиција које ССС* процењује у односу на афла-бета је ограничена и генерално недовољна да компензује потребу за повећањем других ресурса (складиштење и сортирање листе чворова је неопходно у алгоритму). Ипак, Аске Плаат, Јонатхан Сцхаеффер, Wим Пијлс и Арие де Бруин су показали да је секвенца нулл-wиндоw алфа-бета позива еквивалентна ССС*-у (то проширује исте чворове у истом редоследу) када је алфа-бета искоришцен у транспоситион табле, као што је случај у свим компјутерским играма за шах. Сада складиштење и сортирање отворене листе није више неопходно. Ово је дозволило имплементацију ССС* алгоритма у турнирима програма за игрице. Експеримент је показао да се он уистину има боље перформансе од алфа-бета алгоритма у пракси, али није бољи од НегаСцоут алгоритма.[2]
Алгоритам[уреди | уреди извор]
Овде имамо ред са приоритетом OPEN који складишти или чворове, где је -ћвор идентификатор (Девејева нотација је коришћена за идентификацију чворова, је корен), - стање чвора (L - чвор је 'жив', што значи да није још искоришћен и С - чвор је искоришћен), - вредност искоришћеног чвора. Подаци у реду су сортирани опадајуће по њиховој вредности. Ако више од једног чвора има исту вредност , биће изабран онај чвор који је највише улево.
OPEN := { (e,L,inf) } while (true) // beskonačna petlja koja se prekida ulaskom u if pop an element p=(J,s,h) if J == e and s == S return h//Zaustavi algoritam i vrati h kao rezultat else primeni gama operator za p
оператор за је дефинисан на следећи начин:
if s == L if J je terminalni čvor (1.) dodaj (J,S,min(h,value(J))) u OPEN else if J je MIN cvor (2.) dodaj (J.1,L,h) u OPEN else (3.) for j=1..broj_sinova(J) dodaj (J.j,L,h) u OPEN else if J je MIN čvor (4.) dodaj (otac(J),S,h) u OPEN izbriši iz reda OPEN sve povezane sa decom od otac(J) else if poslednji_sin(J) // ako je J poslednji sin od otac(J) (5.) dodaj (otac(J),S,h) u OPEN else (6.) dodaj(otac(J).(k+1),L,h) u OPEN //dodaj čvor povezan sa sledećim detetom otac(J) u OPEN
Референце[уреди | уреди извор]
- ^ Роизен, Игор; Пеарл, Јудеа (1983). „А минимаx алгоритхм беттер тхан алпха-бета?: Yес анд Но”. Артифициал Интеллигенце. 21 (1-2): 199—220. дои:10.1016/с0004-3702(83)80010-1.
- ^ Плаат, Аске; Сцхаеффер, Јонатхан; Пијлс, Wим; Арие де Бруин (1996). „Бест-фирст Фиxед-дептх Минимаx Алгоритхмс”. Артифициал Интеллигенце. 87 (1-2): 255—293. дои:10.1016/0004-3702(95)00126-3.
Спољашње везе[уреди | уреди извор]
- Цхесс Программинг Wики Архивирано на сајту Wayback Machine (28. септембар 2008)
- Георге Стоцкман'с wебсите