Strategic Deep                          napisal: Marcin Gardyjan

Jest to engine szachowy zgodny z protokolem CECP (chess engine communication
protocol), czyli takim jaki obsluguje XBoard, WinBoard, czy ostatni
ChessMaster 8000.
Engine czyli AI komputera, bez interfacu graficznego. Mozna grac w trybie
tekstowym, ale jest to troche niewygodne. Polecam sciagniecie interfacu
WinBoard (pod Windows), lub XBoard (pol Linux), ktore sa darmowe i dostepne
na wielu szybkim serwerach np na:

http://www.tim-mann.org/deepthought.html

W niedalekiej przyszlosci planuje napisac do niego interface graficzny.

Moj engine potrafi obslugiwac dodatkowe funkcje, ktorych nie ma w protokole
(ale o tym nizej).
Sila komputera, chociaz nie rowna sie jeszcze profesionalnym enginom szachowym
dostepnym dzisiaj, to jednak jest on na tyle silny, ze stanowi godnego
szachowego przeciwnika. Potrafi on, w przeciwienstiwe do starych enginow z lat
80-tych, oceniac sytuacje na planszy nie tylko przez przewage firur, ale takze
oceniac pozycje strategiczna figur na planszy i kilka innych rzeczy.
Engine potrafi tez wykazywac 3 rodzaje emocji w grze (normalna, agresywna
i spokojna).


Mam 18 lat (1983). Engine zaczolem pisac w 2002 w maju.


Poziom trudnosci (opis dokladny)

Poziom trudnosci mozna ustalac na kilka roznych zasad. Mozna ustalic gorny
limit jak gleboko komputer moze myslec, albo jak dlugo moze myslec, albo i to
i to. Mozna tez wylaczyc zaawansowane msylenie, lub nie.
Wiekszosc funkcji dostepne sa z interfacu szahcowego, ale nie wszystkie,
dlatego razem z enginem w katalogu powinien znajdowac sie plik
strategicdeep.ini, ktory przechowuje liste komend ktora zostanie wczytana przy
starcie enginu. Mozna ustawic poziom trudnosci w tym pliku ini i np zablokowac
dalsza ingerencje przez interface szahcowy (wtedy engine nie slucha juz komend
z interfacu, a gra tak jak kazalismy mu w pliku ini)- ale oczywiscie nie trzeba
zablokowywac.

Oto kilka najwazniejszych komend:
depth      ustala glebie poszukiwan (ile polruchow do przodu komputer
           przewiduje) np depth 4
level      okresla jak dlugo komputer moze myslec np level 40 5 0 oznacza,
           ze komputer ma wykonywac 40 ruchow na 5 minut, a level 0 0:30 10
           oznacza gre z zegarem rosnacym, czyli w tym przypadku co ruch
           przybedzie 10 sekund czasu przy czasie poczatkowym 30 sekund.
           Logiczne jest, ze im wiecej czasu i im szybszy mamy komputer tym
           komputer gra lepiej.
levelmode  ustala tryb:
           0- poziom trudnosci zalezy tylko od glebi
           1- poziom trudnosci zalezy tylko od czasu
           2- poziom trudnosci zalezy od glebi i czasu
           3- to samo co tryb 2, ale nie wylacza nullmove (patrz nizej)
           Standardowo jest ustawione na 1
           Komende ta powinno sie wpisac PO ustawieniech glebi i czasu,
           poniewaz komenda depth i ply powoduje zmiane trybu na 2 jesli
           jest 1.
donullmove Jest to wlaczenie algorytmu "nullmove". Powoduje on, ze w trybie
           gry na czas (levelmode 1) komputer statystycznie gra lepiej
           (szybciej mysli, czyli wiecej przewiduje) jednak jest kilka
           rzadkich sytuacji w ktorych moze popelnic blad.
           W trybach 0 i 2 jest on wylaczony.
docutting  Jest to kolejne ulepszenie algorytmu do gry na czas. KOmputer
           mysli glebiej, ale mniej dokladnie, jednak statystycznie gra
          lepiej.
advacelevel Ustala poziom jakosci oceny sytuacji na planszy przez komputera.
           np advancelevel 2. Standardowo jest 3.
           0- ocenia tylko przewage figur
           1- ocena powierzchowna (przewaga figur i inne proste rzeczy)
           2- ocena pelna, ale bez zaawansowanych mechanizmow oceny 
           3- pelna ocena.
advancedsearchingon
advancedsearchingoff wlacza (-on) i wylacza (-off) zaawansowane szukanie.
           W sytuacjach gdzie cos sie dzieje szuka on glebiej. Standardowo
           wylaczone, poniewaz czesto komputer moglby przegrac o czas.
bookon
bookoff    Ksiazka otwarc (tabeli transpozycyjnej) wlaczona, lub nie.
           Ksiazka ta im jest bogatsza tym szybciej komputer powinien
           znajdowac optymalny ruch. Czasami lekko spowalnia, ale naogol
           przyspiesza. Po zakzdej rozgrywce komputer zapamietuje ksiazke
           na dysku, a podczas gry sie uczy i ja uaktualnia. Ksiazka ta
           zawiera tez numer bedacy iloscia rozgrywek z ktorych komputer
           sie uczyl. Gdy jest wylaczona komputer i tak ja rozwija, ale
           z niej nie korzysta. Ksiazka potrafi pamietac 65536 unikalnych
           pozycji.
bookmake nazwapliku  Powoduje uczenie sie parti arcymistrzow. Plik z zapisem
           partii powinien byc tekstowy i konczyc sie slowem quit. Kazdy
           ruch powinien byc w najprostszej notacji (e2e4, a7a8q), a kazda
           partia powinna zaczynac sie slowem whitewillwin, albo blackwillwin.

Moj engine nie ma pounderingu.

Jesli chcemy grac z komputer z ograniczeniem czasowym to w samym programie
WinBoard mozna te ograniczenia ustalic, ale jesli chemy np dodac ograniczenie
glebi, czy wogole ustawic tylko ograniczenie glebi to musimy sie posluzyc
plikiem ini. Oto przykladowe ustawienia w pliku ini:


Nic nie robi i zdaje sie na ustawienia w interfacie szachowym:

end


Ustawia dodatkowo ograniczenie glebi na 4:

depth 4
end


Ustawia tylko ograniczenie glebi na 6:
(musimy ustawic tryb na 0 bo inaczej dzialalo by tez ograniczenie czasowe)

depth 6
levelmode 0
end



UWAGA: Plik ini musi konczyc sie slowem end



UWAGA: Standardowe ustawienia ini to:
docutting
donullmove
end

Tak powinien wygladac plik ini jesli np engine walczy na turnieju,
lub testujemy jego sile.

Mozesz tez sprobowac tak:

donullmove
docutting
advancedsearchingon
end

ale engine moze wtedy nie wyrobic z czasem!



Inne komendy:
levellock  zablokowuje przyjmowanie dalszych komend dotyczacych ustalania
           poziomu trudnosci
ply        to samo co depth
noclocks   ustawia tryb na 0 (to samo co levelmode 0)
emotion    ustawia emocje w odpowiedni tryb
           -1 gra spokojna
            0 gra normalna
            1 gra agresywna
           Nie zmienia to poziomu trudnosci gry komputera, a widoczne jest
           takze w niektorych tylko sytuacjach.


Poziom trudnosci (w skrucie)

Jesli jestes poczatkujacym, lub srednim graczem w szachy najlepiej bedzie
ustalic gorny limit przewidywanych ruchow przez komputer no i mozna tez
poustawiac jakosc oceny sytuacji komputera. W pliku strategicdeep.ini
wpisz np:

depth 2
advancelevel 2
end

Czyli ustawienie glebi na 2. Komputer bedzie gral troche lepiej od
poczatkujacego zawodnika. Nie przewiduje wiecej niz 2 ruchy do przodu
i nie ocenia sytuacji na planszy bardzo wnikliwie (advalcelevel 2).

depth 4
end

Czyli komputer bedzie gral troche slabiej od sredniego zawodnika.
A ocena sytuacji nie jest podana, czyli domyslnie jest 3 (to samo co
advancelevel 3 - czyli max).

Mozesz ustawic tez tak:

depth 4
advancedsearchingon
end

komputer powinien grac jak sredni zawodnik.


Wiadomo, ze nie pomoze niz zwiekszanie limitu glebokosci w nieskonczonosc.
W pewnym momencie limit bedzie tak duzy, ze komputer juz nie bedzie nim
ograniczony, a czasem. Jesli nie chcesz, aby komputer byl ograniczony
czasem mopzesz dopisac:
levelmode 0


Jesli jestes dobrym zawodnikiem to powinienes sprobowac zmierzyc sie
z komputerem przy standardowych ustawieniach:

end

czyli komputer jest ograniczony tylko czasem (standardowo jest to
ok 7 sekund na ruch- czasem moze to byc sekunda, a czasem np pol minuty
jednak srednio bedzie 7).

Mozesz zmierzyc sie tez z nim w trybie nullmove i docutting, gdzie
komputer statystycznie gra duzo lepiej:

docutting
donullmove
end

Mozesz jeszcze polepszyc poziom trudnosci wpisujac:

docutting
donullmove
advancedsearchingon
end

ale licz sie z tym, ze komputer zacznie sporo wolniej myslec.

Jesli uda Ci sie komputera pokonac to mozesz zwiekszyc jego poziom

docutting
donullmove
(ewentualnie wpisujac tu advancedsearchingon)
level 10 5 0
end

spowoduje wykonywanie 10 ruchow w 5 minut. Komputer bedzie mial wtedy
wiecej czasu na zastanowienie sie. Im wiecej mu dasz czasu i im szybszy
komputer masz tym bedzie gral lepiej (pod warunkiem, ze nie ustalisz
gornego limitu ile ruchow ma przewidywac do przodu).

Oczywiscie mozna tez ustalac te rzeczy bez pliku ini jesli pozwala
na to interface szachowy.



Inne komendy przydatne dla ludzi:

emotion  (patrz wyzej- jest opis)
display  wyswietla szachownice
reverse  odwraca wyswietlanie szachownicy
soundon
soundoff wlacza (-on) i wylacza (-off) dzwiek podczas gdy komputer sie ruszy
         (nie dziala wraz z interfacem)
new      nowa gra
save     zapisuje stan planszy
load     odczytuje stan planszy
force    komputer nie robi nic- np moga grac dwaj gracze ze soba
go       komputer ma wykonac ruch- wpisujemy to jak np chcemy grac czarnymi,
         albo jak chcemy sie zamienic z komputerem
draw     pytamy komputer czy zgadza sie na remis



UWAGA: Gdyby komputer gral zbyt slabo to sprawdz, czy w twoim interfacie
szachowym nie jest ustawione przypadkiem jakis slaby poziom trudnosci,
np czy nie jest ustalony gorny limit przewidywanych (pol)rochow (ply).
Najlepiej mozesz wpisac w takim przypadku levellock przed end w pliku ini
i juz interface nie bedzie wplywal na jakosc gry enginu.

(...)
levellock
end



Instlacja Enginu z interfacem szahcowym takim jak WinBoard.

W przypadku WinBoard wystarczy tylko przygrac program do katalogu z programem
a w pliku winboard.ini dopisac moj engine. Np orginalnie wyglada to tak:

(...)
/firstChessProgramNames={GNUChess
}
/secondChessProgramNames={GNUChess
}

nalezy zmienic na np:

/firstChessProgramNames={strategicdeep
GNUChess
}
/secondChessProgramNames={GNUChess
strategicdeep
}


proste

W przypadku inncyh enginow powinno byc podobnie (modyfikacja ini, albo nawet
prosciej). W kazdym razie powinno to byc juz opisane w interfacie.



Szybkosc:
Na komputerze Athlon 1400Mhz:
ok 170tys nodes per second z algorytmem alpha-beta.



Co nowego:

1.01:
doszedl tryb advancedsearching
1.02:
1.03:
poprawiony wazny blad z nominacja pionka
poprawione bledy- komputer czasem glupial, a teraz juz nie
1.04:
gra troche lepiej
1.05:
poprawiony duzy blad. Komp gra lepiej.
1.07:
Poprawiony jeden blad.
Dodano, ze sa 4 poziomy jakosci oceny sytuacji przez komputera.
1.08:
Poprawiono maly blad.
Save jest teraz lepszy i bardziej czytelny dla czlowieka.
1.10:
Poprawiono blad z nominacja pionka i jednoczesnym biciem.
1.12:
Przyspieszylem troche algorytm glowny i gra duzo lepiej w grze na czas.
1.13:
Poprawione pare bledow.
1.14:
Przyspieszylem troche algorytm glowny i gra duzo lepiej w grze na czas.
1.15:
Doszedl tryb docutting
1.16:
Poprawiony blad.
1.17:
Poprawiony wazny blad, przez co komputer gra teraz lepiej.
1.18:
Doszla ksiazka tabeli transpozycyjnych.
1.19-1.21:
Poprawione troche bledow.
Komputer mysli jeszcze szybciej.
1.22:
Komputer gra jeszcze szybciej, czyli lepiej na czas.


Podziekowania:

Sidorowicz Grzegorz- za pomoc w wytlumaczeniu kilku bardziej skomplikowanych
technik (jak np ruchy mordercow) oraz podtrzymywanie na duchu, ze cos z tego
bedzie:) Dzieki!.



Jesli znajdziesz jakies bledy to pisz!
I konicznie obejrz moja strone www. Znjadziesz tam wiele ciekawych programow.

email: mgkiler@poczta.onet.pl
www  : http://republika.pl/mgkiler