Главная Промышленная автоматика.

Они являются идиосинкразией шахматной игры, и их нелегко приспособить к таблично управляемой программе.

4. Тот факт, что предыдущие позиции как таковые не запоминаются, а вместо этого упаковывается информация (надеемся, что минимальная), из которой программа восстанавливает позицию, когда это требуется. Некоторые шахматные программы фактически каждый раз заново запоминают каждую новую позицию, которую может получить игрок. Следовательно, для решения задачи на мат в два хода потребовалось бы 64 (число полей) X 30 (среднее число ходов) X 4 (итерации) =7680 ячейки, не говоря уже о времени, затрачиваемом на их запоминание.

Освоив эти моменты, достаточные для решения шахматных задач, нужно дополнить их другими аспектами шахматной игры. Например, при разыгрывании шахматной партии процедура ОБЗОР ХОДОВ должна выдавать дополнительную информацию, такую как число контролируемых полей и их относительную важность (контроль центральных полей лучше, чем краевых).

Поскольку АЛГОЛ-программы обычно работают в 5-10 раз медленнее, чем эквивалентные им программы в автокоде, то данную программу нужно закодировать на одном из низших языков конкретной машины. Это не так трудно, как кажется, поскольку таблицы вообще не зависят от машины и языка. Перевод данной программы на язык Бэзик Атлас (Atlas Basic) занял около 10 дней.

Данная программа была также успешно проверена с помощью АЛГОЛ-трансля-тора машины CDC 6600, потребовав один день на перфорацию и изменение операторов ввода - вывода.

Наконец, главным образом для демонстрации, данная АЛГОЛ-программа была расширена в лаборатории SRC Atlas для фактической игры в шахматы на одной стороне доски. Больше всего труда было затрачено на разработку соответствующей системы ввода - вывода.

Стратегия была простой. Программа просматривала позицию на три хода вперед и была согласна меняться на равные или более ценные по рангу фигуры, отдавая предпочтение обменам более мощными фигурами (т. е. она всегда меняла ферзя на ферзя); если же не было никакого обмена или никакой возможности взятия фигур, то она пыталась взять под контроль как можно больше полей. Хотя эта программа и была написана на языке АЛГОЛ, она всегда почти мгновенно отвечала на ходы противника, выступавшего на одной стороне доски.

Данная программа сыграла две партии против программы Джона Скотта на машине ICL 1900 г81], результаты приведены в табл. 28. (Поскольку ни одна нз этих

Таблица 28

Номер хода

Партия I

Партия 2

Скотт (белые)

Атлас (черные)

Атлас (белые)

Скотт (чериые)

d2 -d4

КЬ8 - Сб

е2-е4

d7 -d5

е2 -е4

1е7-е6

e4:d5

Фd8:d5

d4~d5

Cf8-Ь4-Ь

d2-d4

Kg8-f6

с2 сЗ

СЬ4 -с5

Ccl-f4

Фd5 -e4-b

Ь2-Ь4

Кс6:Ь4

Cf4 - еЗ

Cc8 -d7

СЗ:Ь4

*d8 -f6

d4 -d5

Фe4:d5

Ь4:с5

Ф!6:а1

Фdl:d5

, Kf6:d5

Cf г - d3

Фа1:а2

СеЗ-c5

e7-e5

Kgl-f3

e6:d5

Cc5:f8

Kpe8:f8

e4:d5

Фa2:d5

Cfl-d3

Kd5 - f 4

КЬ2 -сЗ

Фd5:c5

Cd3 - c4

Kf4:g7--

Ccl - d2

Kpel - d2

h7-h5

КЫ -c3

ЯЪ8 - h6



орограмм не самообучающаяся, то возможны только две партии.) На четвертом ходе первой из этих партий стратегия была видоизменена с целью получения более выгодной позиции, т. е. я смощенничал.

В двух выщепряведенных случаях стратегия обмена фигур на равные или более ценные дает серенькие, но примерно равные партии. Программа Скотта выдает ответные ходы примерно через 1 мян, а составлена она в безик-коде 1900. Отсюда ясно, что поскольку щахматные программы тратят значительную часть времени на расчет вариантов, то описанные в данной работе технические приемы довольно эффективны.

Проблеме организации хорошей игры в шахматы на машине посвящены следующие работы; шах.матная программа Гринблатга [5i], методы игры, описанные Артуром Самюэлем, особенно «Alpha-Beta pruning» iJ7i], и опыт анализа эндшпиля Барбары Хуберман [61].

Благодарности

Автор хотел бы выразить благодарность личному составу вычислительной лаборатории «Атлас» за их помощь в подготовке к изданию данной работы.

Программа к алгоритму 50CJ для решения задач на мат в два хода *

begin integer 1,],к,п,УРОВЕНЬ,Б1,Ч1,Б2,Ч2; Boolean ВОЗМОЖЕН ПАТ;

integer array ТАБЛИЦА КОНЯ, ТАБЛИЦА КОРОЛЯ [1:576], ТАБЛИЦА СЛОНА, ТАБЛИЦА ЛАДЬИ 0:259], ТАБЛИЦА БП, ТАБЛИЦА ЧП [36:227], ПОЛЯ БЕЛЫХ, ПОЛЯ ЧЕРНЫХ [0:16], ДОСКА БЕЛЫХ, ДОСКА ЧЕРНЫХ [l:65],c,q,HOMEP, РУБЕЖ ХОДОВ, ОБРАТНО К,НА ПРОХОДЕ[1:5],СПИСОК1[1:500]; procedure ПЕЧАТЬ ПОЗИЦИИ; СМ ДОПОЛНЕНИЕ 4:;

procedure ОБЗОР ХОДОВ (СВОИ ПОЛЯ.СВОЯ ДОСКА,

ЧУЖАЯ ДОСКА,РУБЕЖ,ПРЕРЫВАНИЕ);

integer РУБЕЖ; label ПРЕРЫВАНИЕ;

integer array СВОИ ПОЛЯ.СВОЯ ДОСКА, ЧУЖАЯ ДОСКА; begin integer c,i,j,k,m,p, ПОЛЕ;

switch К ХОДАМ:=ПЕШКОИ,КОНЕМ,С Л ОНОМ, ЛАДЬЕЙ,

ФЕРЗЕМ,КОРОЛЕМ; procedure ХОДЫ РОКИРОВКИ;

СМ ДОПОЛНЕНИЕ 2:; procedure ХОДЫ КОНЯ И КОРОЛЯ (ТАБЛИЦА КОНЬКОР); integer array ТАБЛИЦА КОНЬКОР; begin ]:=9ХП0ЛЕ; for i:=j-ТАБЛИЦА КОНЬКОРГ]] step 1 until j-1 do if СВОЯ Д0СКА1ТАБЛИЦА кЬньКОР[1]]=0 then begin

if ЧУЖАЯ ДОСКА[ТАБЛИЦА К0НЬК0Рр]]=6 then

go to ПРЕРЫВАНИЕ; c: = c+l; СПИСОЩс]:=ТАБЛИЦА КОНЬКОРЩ end

end ХОДЫ КОНЯ И КОРОЛЯ;

* Границы массивов в начале нижеследующей программы являются значениями следующих выражений: 576 =9 X64; 259=4X64+3; 36=4X9; 227=4X56+3; 5 -число уровней, а 500 - максимальное (предположительно количество ходов, возможных для фигур данной задачи на пяти уровнях. {Прим. ред.)



eiirecedure ходы СЛОНА и ЛАДЬИ (ТАБЛИЦА СЛОНЛАД); Integer array ТАБЛИЦА СЛОНЛАД; begin

for j:=0 step 1 until 3 do

begin к:=ТАБЛИЦА СЛОНЛАДЦ]; т:=ТАБЛИЦА СЛ0НЛАД[4ХП0ЛЕ+Л; -

for 1:=П0ЛЕ+к step к until m do begin

if СВОЯ ДОСКА ЫФО then

go to НОВОЕ НАПРАВЛЕНИЕ; c:=ic-l-.l; CnHCOKfic]:=i; if ЧУЖАЯ ДОСКАИ=#=0 then

go to if ЧУЖАЯ Д0СКА[;]=6 then ПРЕРЫВАНИЕ else НОВОЕ НАПРАВЛЕНИЕ

end i;

ШВОЕ НАПРАВЛЕНИЕ: end j

end ХОДЫ СЛОНА И ЛАДЬИ; procedure ХОДЫ ПЕШЕК (ТАБЛИЦА ПЕШЕК); Integer array ТАБЛИЦА ПЕШЕК; begin

for 1:=4хПОЛЕ,1-Ы do begin ]-:=ТАБЛИЦА ПЕШВКр]; if СВОЯ ДОСКАи]:#0 V ЧУЖАЯ ДОСКА[]]:#0 then

go to ВЗЯТИЕ ПЕШКОЙ; с:=с+1 ;СПИСОКМ: = j end i;

ВЗЯТИЕ ПEШKOЙ:for 1:=4хПОЛЕ+2Л+1 do ер2: if ЧУЖАЯ ДОСКА[ТАБЛИЦА ПЕШЕКИЦА then

begin

if ЧУЖАЯ ДОСКМТАБЛИЦА ПЕШЕКЩ]=6 then

go to ПРЕРЫВАНИЕ; с-.=с+1; СПИСОК[с]:=ТАБЛИЦА ПЕШЕК1] end i

end ХОДЫ ПЕШЕК; с: = РУБЕЖ;

for р: = СВОИ ПОЛЯМ step -1 until 1 do begin ПОЛЕ: = СВОИ ПОЛЯМ;

if СВОЯ ДОСКА[ПОЛЕ]=0 thengo to ПРОДОЛЖЕНИЕ; СПИСОК[с]:=р; СПИС0К[с+1]:=СВ0Я ДОСКАЩОЛЕ]; СПИС0КСс+2]:=П0ЛЕ; с:=с+2; go to К ХОДАМ[СВОЯ Д0СКА[П0ЛЕ]]; ПЕШКОЙ: if ДОСКА БЕЛЫХ[П0ЛЕ] = 1 then ХОДЫ ПЕШЕК (ТАБЛИЦА БП) else ХОДЫ ПЕШЕК (ТАБЛИЦА ЧП); go to ДАЛЕЕ;

КОНЕМ: ХОДЫ КОНЯ И КОРОЛЯ (ТАБЛИЦА КОНЯ); go to ДАЛЕЕ; КОРОЛЕМ: ХОДЫ КОНЯ И КОРОЛЯ (ТАБЛИЦА КОРОЛЯ); go to ДАЛЕЕ; ЛАДЬЕЙ: ХОДЫ СЛОНА И ЛАДЬИ (ТАБЛИЦА ЛАДЬИ); go to ДАЛЕЕ; ФЕРЗЕМ: ХОДЫ СЛОНА И ЛАДЬИ (ТАБЛИЦА ЛАДЬИ); СЛОНОМ: ХОДЫ СЛОНА И ЛАДЬИ (ТАБЛИЦА СЛОНА); ДАЛЕЕ: if СПИСОК[с]=?ПОЛЕ then

begin CnHCOKfc+l]:-ПОЛЕ; с:=с+2 end else

с:=с-2; ПРОДОЛЖЕНИЕ: end р;





0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [31] 32 33 34 35 36 37 38 39 40 41 42 43

0.0018