02 Шахматы: человек против робота (гл.2 из 4)
В первой главе мы с вами узнали, как и где создавались первые "шахматные автоматы", которые были всего лишь имитаторами программируемых шахматных роботов. Сегодня знакомство с первыми настоящими шахматными алгоритмами и программами.
© 2025 Константин Оборотов
=== Список всех глав
Глава 2. Как роботы научились играть в шахматы *
===
*** Глава 2. Как роботы научились играть в шахматы ***
Чтение советской и американской прессы 70-х годов прошлого XX-го века оставляет приятное послевкусие.
Конечно, нельзя было говорить о дружбе между СССР и США, но отношения явно улучшились по сравнению с послевоенными годами.
В американской прессе мелькают сообщения о смягчении давления американской бюрократии на Коммунистическую партию США. В частности, в 1973 году федеральный окружной суд в Аризоне постановил, что большая часть закона против американских коммунистов неконституционна, и Аризона должна допустить КП США к участию в голосовании на всеобщих выборах ("Блавис против Болина").
В советской прессе насмешки над убогим мещанским западным (в основном американским) образом жизни продолжались (в духе Михаила Задорнова "ну, тупые"). Но при этом явно начала изменяться эмоциональная окраска этих насмешек. Злая язвительная сатира потихоньку менялась на добродушный юмор с весёлыми приколами.
Вот мы читаем сообщение о нищем, который обитает на богатой парижской помойке. Ничего особо интересного в этом факте нет. Не было никакого секрета в том, что на этом Западе нищих огромное количество, как блох на бродячей собаке. Но именно в этом нищем была интересная изюминка. На своём плакате, ниже стандартного объявления "подайте плиз, кто сколько может жертве холокоста, бюрократии и бездушия", нищий сделал странную и наглую приписку "доллары США не принимаю".
Не знаю, придумал журналист эту хохму, или реально зафиксировал нечто подобное, но эта короткая заметка порождает у читателей множество мыслей, начиная от надежд, что долларовая долговая пирамида скоро рухнет до желания дать нищему полезный совет: "бери, дурачок, что дают, потом ненужное выбросишь".
Учёные экономисты по обе стороны океана начинают осторожно высказывать идеи о возможности "конвергенции" капитализма и социализма. При этом, в США должны усилиться социальные гарантии для трудящихся, а в СССР для "деловых людей" должны быть предоставлены возможности для полезных экономических частных инициатив (типа строительства личных дач и не только).
Самое главное, что в такой атмосфере о прямом военном конфликте не могло быть и речи. Решались вопросы о возможностях сотрудничества в разных областях.
В 1972 году в Москве председатель Совета министров СССР Алексей Косыгин и президент США Ричард Никсон подписывают "Соглашение о сотрудничестве в исследовании и использовании космического пространства в мирных целях". В 1975 году в рамках этого соглашения был реализован совместный полёт советского и американского пилотируемых космических кораблей со стыковкой на орбите (знаменитый проект "Союз - Аполлон").
Вот в таких условиях мирной конкуренции и делового сотрудничества СССР и США с явным желанием обеих сторон уйти от прямых военных столкновений в 1974 году состоялось грандиозное событие для всех любителей шахмат и прикладного программирования: первый в мире чемпионат мира среди шахматных программ.
Состоялось это мероприятие в Стокгольме во время конгресса ИФИП (IFIP, International Federation for Information Processing).
Лидерами в области шахматного программирования были американцы. В США было 50 действующих шахматных программ, во всем остальном мире (Европа + СССР) около 20. Также в США уже был богатый опыт проведения внутренних чемпионатов. Последний чемпионат США стал отборочным к первому чемпионату мира. Лучшими оказались программы: "Чесс-4.0", "Теч-2", "Хаос" и "Острич". Они и представляли США на этом турнире.
Что же касается нашей страны, то у нас в боевом режиме была единственная программа "Каисса" и ещё несколько программ в стадиях подготовки и перспективной разработки. Именно "Каисса" и представляла СССР на этом турнире. По итогам турнира "Каисса" заняла первое место и завоевала золотую медаль весом 110 грамм.
После окончания турнира "Каисса" в виде бонусного трека сыграла дополнительную товарищескую партию с лучшей американской программой "Чесс-4.0". После долгой и упорной борьбы партия завершилась вничью.
Насколько сильно играли лучшие компьютерные программы в 1974 году? Мне представляется, если бы они играли в сегодняшних (2025 год) турнирах для людей, например, на популярном шахматном сайте "ЛиЧесс", то изначально показывали бы рейтинг в диапазоне 1800-2000 в блице с контролем 5+0. Для сравнения сегодняшние лучшие гроссмейстеры показывают здесь рейтинги 3000+ или, как минимум, около того. А если бы обсчитывали рейтинги современных лучших компьютерных программ типа "Стокфиш" и "АльфаЗирро" при их играх с людьми, то мы увидели бы рейтинги 4000+ или даже 5000+. Короче, эти современные роботы били бы всех людей без малейших шансов для последних. Примечание. При условии взаимной честной игры, но это уже совсем другая тема.
После первого чемпионата разработчики упорно работали над усовершенствованием своих программ.
В 1977 году состоялся второй чемпионат мира среди компьютерных программ в канадском городе Торонто.
Наша "Каисса" приняла участие и в этом чемпионате. Уже в первом туре чемпионка преподнесла неожиданный сюрприз для всех, включая зрителей, своих разработчиков и присутствовавших на турнире гроссмейстеров и мастеров.
"Каисса" до этого игравшая неплохо в этой чуть лучшей позиции вдруг делает ряд странных ходов, начиная отсюда: 29. … а5?
30. g4 Фe6
31. Лc6 a4?
32. Ф:а4 Лd6
33. Л:d6 Ф:d6
34. Фа8+
Здесь все ожидали естественного хода 34. … Крg7
Но "Каисса" вдруг ставит под бой ладью 34. … Лe8 и затем постепенно проигрывает без каких-либо шансов.
После партии, когда Каиссу спросили, в чем дело, она объяснила, что ход 34. ... Крg7 гораздо хуже, чем сделанный ею ход 34. ... Лe8.
В доказательство "Каисса" показала такой вариант:
34. ... Крg7 35.Фf8+! Крxf8 36. Сh6+ Сg7 37. Лc8+
37. … Фd8 38. Л:d8+ Лe8 39. Л:e8X.
Специалисты, среди них были гроссмейстеры Ботвинник, Эдуард Ласкер, Ганс Берлинер, канадский международный мастер Леон Пиасетский эту комбинацию не обнаружили и объясняли народу этот заскок Каиссы "несовершенством шахматных программ".
В конечном результате турнира Каисса разделила 2—3 места с программой Duchess. Победила в чемпионате программа "Чесс-4.0".
До сих пор идут диспуты, а увидела бы программа Duchess во время партии этот выигрывающий ход 35.Фf8+
Далеко не факт, учитывая, ограниченность времени на обдумывание в турнирной партии.
В любом случае, если ход 34. ... Лe8 объективно сильнее (т.к. затягивал поражение на много ходов), то никто не будет спорить, что практических шансов больше у скромного хода 34. ... Крg7
Мне стало любопытно, а как бы в критической позиции пошла бы современная программа: 34. ... Лe8 или 34. ... Крg7 - ?
Я задал этот вопрос "Стокфишу" и получил ответ: 34. ... Лe8
Вот так!
Такие тонкие психологические моменты не понимали шахматные программы в 1977-м году, не понимают их они и сейчас, в 2025-м.
Возьмем этот факт на заметку, он нам пригодится для дальнейших рассуждений.
А как вообще роботы научились играть в шахматы? Точнее говоря, кто был их первым учителем?
Вообще говоря, много умнейших людей брались за эту интереснейшую проблему и решали её с разной степенью успеха.
Традиционно считается, что самым первым шахматным программистом в мире был Алан Тьюринг. В 1951 году он написал алгоритм Turochamp, с помощью которого машина могла бы играть в шахматы. Самое забавное, что это был чисто теоретический труд. У Алана не было компьютера, чтобы проверить свою программу на практике.
Тем не менее, его идеи были использованы другими учёными, а идеи тех, в свою очередь, новыми учёными, и вот, что мы имеем в сухом остатке.
Попробуем набросать примерный алгоритм игры в шахматы.
Что нам нужно сделать? Написать программу, которая умеет находить сильнейший ход в любой позиции.
Немного подумав, почитав разных полезных статей, становится ясно, что тут есть 2 принципиальных краеугольных камня.
Функция, которая оценивает позицию (оценочная функция).
Функция, которая как-то умеет определять максимальную глубину просмотра.
Давайте, попробуем набросать функцию, которая оценивает позицию.
Для простоты пока сделаем глубину просмотра равную одному полуходу и анализировать будем начальную позицию.
Опять же для простоты, чтобы не перенапрягать мозг, возьмем для оценки позиции следующие факторы (первые, которые пришли в голову).
Материал.
Количество пробиваемых полей (ударов по свободным полям).
Премия за очередь хода.
Проверка: нет ли кому-то вообще мата (пата) в данной позиции?
Материал Белые = 2Л*4.5+2К*3.0+2С*3.1+1Ф*9.0+8п*1.0=9+6+6.2+9+8=38.2
Материал Черные = 2Л*4.5+2К*3.0+2С*3.1+1Ф*9.0+8п*1.0=9+6+6.2+9+8=38.2
Количество пробиваемых полей Белые = 14 (пешки) + 4 (кони) = 18 (1.8 баллов)
Количество пробиваемых полей Черные = 14 + 4 = 18 (1.8 баллов)
Примечание. Пусть будет 0.1 балл за одно свободное поле под атакой.
Премия за очередь хода. Пусть пока будет 0. Не уверен, что это вообще хорошая идея.
Проверку на мат проводим. Вообще, вряд ли кому-то будет мат в начальной позиции или после первого полухода. Но проверять надо.
Оценка позиции = Белые - Черные = (38.2+18)-(38.2+18) = 56.2-56.2 = 0
Теперь нам надо подобным образом оценить все позиции после всех возможных ходов.
Оценка позиции после 1-го хода белых
Ход Баллы
a3 0.0
a4 0.2
b3 0.2
b4 0.2
c3 0.2
c4 0.3
d3 0.6
d4 0.7
e3 0.9
e4 0.9
f3 0.0
f4 0.1
g3 0.2
g4 0.2
h3 0.0
h4 0.2
Кa3 0.1
Кc3 0.3
Кf3 0.3
Кh3 0.1
Получается следующий результат. Если применять данную оценочную функцию и использовать глубину расчета на 1 полуход, то в данной позиции получаются лучшие ходы: e3 или е4.
Теперь мы можем уточнить оценку начальной позиции. Если изначально она была равна 0, то после первого полухода стала равной 0.9.
Разумеется, если мы посмотрим чуть глубже (т.е. оценим все позиции после всех возможных 2-х полуходов), то оценка начальной позиции опять изменится. Наверное, она опять станет равной 0, например, после 1. e4 e6.
А если посмотреть немного глубже, хотя бы на 20 полуходов? Все это, конечно, можно сделать, посвятив этому процессу месяц или два, но это уже всё сделано до нас.
...
Первоисточник:
===
Делаем почти вечными контакты селектора ГМП в ретро-автобусе ЛиАЗ-677
Привет, Пикабу! Пока ресурс продолжает превращаться в филиал передачи "Пусть говорят", я продолжаю стараться нести в массы разумное-доброе-вечное. Берегитесь, народ: это длиннопост с полным погружением, так сказать, в предмет :)
Есть такой многим известный ретро-автобус с интегрированными бутылками, про который у меня было уже много постов: ЛиАЗ-677 . В частности, впервые в интернетах был подробно разобран принцип работы люминесцентного освещения в нём, которое почти никогда не работало. Как итог, теперь из оставшихся автобусов с работающим освещением - как бы не большинство, что радует :)
Сегодня же мы подробно рассмотрим другую часть его электрики - а именно, систему управления его гидромеханической коробкой передач.
Как либо классифицировать эту коробку вряд ли получится: она одна такая, плод работы сумрачного советского гения, настоящий "аналоговнет" родом из 1960-х. Передач у неё 3... с половиной:
1) пониженная "первая", движение вперёд
2) прямая "вторая", движение вперёд
2.5) прямая "вторая" с заблокированным гидротрансформатором: коробка просто механически соединяет входной и выходной карданы (да, карданов у этого автобуса два, т.к. коробка расположена отдельно от двигателя), движение вперёд
3) задняя пониженная
Блокировка гидротрансформатора происходит чисто механически, электрика в ней не участвует, поэтому в рамках этого поста мы этот механизм рассматривать не будем.
Все эти передачи, кроме упомянутой выше блокировки, переключает электрика (этакий прообраз роботизированной коробки), а управляются переключения с пульта под рулём. Для 60-х годов, в которых среди коробок передач почти безраздельно царствовала механика с "палкой", это был настоящий "космос".
Вся электрика управления коробкой доступна через люк в салоне напротив передней пассажирской двери:
Теперь рассмотрим электрическую схему управления ГМП поподробнее. Хотел вставить сюда схему из официального мануала к автобусу, но в ней куча ошибок, поэтому просто нарисую её заново:
Вся электрика ГМП питается через подрулевой селектор напрямую от замка зажигания (что, кстати, не очень хорошо, т.к. отсутствует предохранитель, и, случись замыкание, гореть будет весело, до полного выгорания целых кос проводки).
Положение "Н" селектора тоже имеет свой контакт и посылает сигнал "разрешения" запуска электростартера, т.е. если селектор стоит "на скорости", автоматика не даст крутить электростартером (это, к сожалению, не касается "кривого" стартера, и были случаи, что автобус давил водителя, который забыл селектор "на скорости" и заводил автобус "с кривого").


Контактная группа селектора ГМП, в положении "ЗХ" замыкаются сразу два контакта.
Основной режим работы ГМП - положение "А", т.е. автомат. В этом положении питание с селектора подаётся на концевик переключения скоростей, расположенный на ГМП:


Концевик переключения и соленоиды 1-й и 2-й передач
Концевик имеет два положения и переключается центробежным регулятором, который давит на его шток. Пока автобус не разогнался или вообще стоит на месте, центробежный регулятор не давит на шток концевика, концевик питает соленоид первой, пониженной передачи. Как только автобус достаточно разогнался, центробежный регулятор начинает давить на шток концевика, переключая его во второе положение. Соленоид второй передачи запитан не напрямую от этого концевика, а через ещё один концевик, "концевик наката", который отключается, если отпустить педаль газа. Таким образом, если отпустить педаль газа на 2-й передаче, то коробка сама переключается в нейтраль, пока педаль газа не будет нажата снова, или пока автобус не замедлится, переключившись на 1-ю передачу. Этот функционал позволяет экономить топливо, но его можно отключить при помощи отдельного тумблера на селекторе ГМП.


Концевик наката, установленный на тяге педали газа, и тумблер на селекторе ГМП, блокирующий его работу
Режим "ПП" (принудительная 1-я передача) реализован просто: соленоид 1-й передачи питается напрямую от этого контакта, в обход концевика переключения скоростей. Таким образом, коробка, что бы не случилось, всегда будет стоять на 1-й передаче, никогда не переключаясь на вторую. Этот режим был реализован для того, чтобы автобусу было легче подниматься в горку.
Ну и осталось разобрать, каким образом заставить автобус ехать назад. С задним ходом тут есть свои особенности: реверс включает чисто механический редуктор, который переключается между положениями вперёд/назад воздухом при помощи поршня, ну а воздух в нужный момент подаёт электроклапан. (Я же сказал, что гений был сумрачным :) Но работало, блин!)
Для того, чтобы начать движение назад, первым делом нужно переключить механку коробки в положение "движение назад". Для этого селектор ГМП переводится в положение "●". В этом положении питание подаётся на соленоид с клапаном, который подаёт воздух из пневмосистемы автобуса в поршень, собственно, втыкающий заднюю передачу.


Электроклапан, подающий воздух в поршень, и сам поршень включения задней передачи
Т.к. процесс "втыкания" реверса далеко не мгновенный (особенно в зимнее время, когда смазка весьма густая) то преждевременное трогание с места грозит тем, что механика не успеет войти в зацепление, и мы её просто перемелем. Чтобы этого избежать, на поршне включения задней передачи установлен концевик, включающий лампу индикации "задний ход включён" на селекторе ГМП, как только поршень будет "вставлен" до конца. Вместе с этой лампой включаются и задние ходовые огни на корме автобуса.
Несмотря на то, что механика у нас переключена в "движение назад", на положении селектора "●" мы никуда поехать не сможем, т.к. перед механикой у нас стоит гидротрансформатор, который всё ещё в нейтрали. Поэтому как только загорается индикатор заднего хода на селекторе ГМП, его нужно перевести в положение "ЗХ", из которого уже можно трогаться назад.
Электрически положение "ЗХ" представляет собой комбинацию положения "●" и положения "ПП". Т.е. гидротрансформатор будет ехать вперёд всегда на 1-й скорости (разгоняться до 2-й при движении назад не рекомендуется :) ), а механика будет крутить колёса "назад".


Концевик включения индикатора заднего хода на селекторе (и задних ходовых огней) и сам этот индикатор
С принципом работы разобрались, это было такое слегка затянувшееся вступление к посту. А теперь к сути дела. Электрически все три соленоида (звать их РС-328, не путать с такими же по виду РС-330) представляют собой нехилую такую индуктивность:
А что это значит? Это значит, что при отключении данного соленоида от питания, в нём возникнет нехилая такая ЭДС в силу явления самоиндукции. Напряжение на коммутирующих данный соленоид контактах в момент их разрыва будет достигать сотен вольт, что неизбежно зажжёт дугу, которая постепенно будет уничтожать контакты. Коммутация в цепях ГМП при движении автобуса происходит часто, что, со временем, изнашивает концевики переключения скоростей, наката и, что самое печальное, контактную группу селектора ГМП, который является весьма дефицитным в наше время изделием.
Стал я думать и гадать, как бы это искрение подавить, при этом внося минимум модификаций в существующую схему. Решено было добавить с каждому соленоиду снаббер в виде мощного импульсного диода:
Данный диод никак не влияет на работу соленоида, когда на него подано питание, но в момент отключения питания он закорачивает обратный импульс напряжения на сам соленоид, гася его, и не позволяя образовываться дуге на размыкаемых контактах.
Дополнительно в схему снаббера добавлены предохранитель (чтобы не случилась КоЗа в цепях ГМП, если диод вдруг выйдет из строя) и светодиодный индикатор включения соленоида.
В итоге вся эта идея оформилась вот в такие симпатичные чОрные коробочки, напечатанные на 3D принтере из пластика PETG:
После установки снабберов искрение на контактах практически отсутствует, а значит, дефицитные запчасти прослужат гораздо дольше, чем предполагал изготовитель :)
Про эту всю эпопею я дополнительно снял два видеоролика:
1) видео про конструкцию снаббера:
2) и видео про испытания опытных образцов на автобусе ЛиАЗ-677МБ компании "МосРетроТранс" по имени "Помидор":
Испытания завершились полностью успешно, и теперь снабберы для цепей ГМП автобуса ЛиАЗ-677 - это уже изделие мелкосерийное.
Всем спасибо за внимание, надеюсь, утомил не сильно.
Пикабу познавательный :)
Продолжение поста «Концепция сайта-десятистраничника с PDF файлами»9
Я обновил сайт https://www.tablepedia.com/
Закончил работу над проектом "Генерация HTML файлов с помощью табличного редактора".
Теперь внутри архива сайта, который можно скачать по адресу https://www.tablepedia.com/tablepedia.com-2025_03_01.zip , есть табличный файл для Excel (XLS), а также ODS, который используется в OpenOffice.org Calc и других программах электронных таблиц.
Объясняю на скриншотах, как создаются HTML файлы внутри tablepedia.xls , который находится внутри ZIP архива:
Рис. 1. Столбцы L-Q внутри файла tablepedia.xls задают ключевые слова, а также теги HTML, которыми оформляются ячейки из столбцов C-J (см. рис. 2).
Рис. 2. В столбцах C-J определяется основной текст HTML файла, в столбце B-кл. слово, а в столбце K - текст, оформленный тегами. Таким образом, для создания файла archive.html , Нужно выделить содержимое столбца K и вставить внутрь файла archive.html
Рис. 3. В красной рамке обведён файл https://www.tablepedia.com/tablepedia.com-2025_03_01.zip , который можно скачать из https://tablepedia.com/archive.html
Если при создании HTML страниц из Excel или ods файла возникли вопросы, напишите их, пожалуйста.
Продолжение поста «Концепция сайта-десятистраничника с PDF файлами»9
Я обновил сайт https://www.tablepedia.com/
Заканчиваю работу над проектом "Генерация HTML файлов с помощью табличного редактора".
До 1 марта будут созданы табличный файлы для Excel (XLS), а также ODS, который используется в OpenOffice.org Calc и других программах электронных таблиц.
Сайт (в архиве) можно скачать по адресу https://www.tablepedia.com/tablepedia.com-2025_02_23.zip
Прилагаю скриншоты трёх страниц сайта:
Главная страница - https://tablepedia.com/
Биографии - https://tablepedia.com/bio.html
Продолжение поста «Концепция сайта-десятистраничника с PDF файлами»9
Важное дополнение к концепции сайта-десятистраничника: Программный комплекс tablepedia2pdf
Его можно скачать по адресу https://tablepedia.com/tablepedia2pdf.zip (и распаковать в ОС Windows)
На всякий случай, прилагаю скриншот страницы https://tablepedia.com/archive.html для скачивания tablepedia2pdf:
Архив - https://tablepedia.com/
Разработка wkhtmltopdf.exe - не моя, я к ней только написал tablepedia2pdf.bat и tablepedia2pdf.txt
Если интересно, получившийся результат можно скачать тут: https://tablepedia.com/tablepedia-2025_01_25.pdf
При запуске tablepedia2pdf.bat антивирус может спрашивать о возможности его запуска. Нужно соглашаться.
Также нужно соглашаться на запуск файлов linksbat.bat и totalpdf.bat
Внутри tablepedia2pdf.txt перечислены страницы для "занесения контента" в PDF файл tablepedia-pages.pdf
Если хотите записать в PDF файл содержимое других страниц - напишите их адреса в файле tablepedia2pdf.txt
Напишите, пожалуйста в комментариях, сайты, на которых можно конвертировать НЕСКОЛЬКО HTML файлов в ОДИН PDF файл.
Продолжение поста «Концепция сайта-десятистраничника с PDF файлами»9
Я обновил концепцию сайта-десятистраничника с PDF файлами.
Адрес сайта: https://tablepedia.com/
Предвижу, что профессиональные дизайнеры будут писать комментарии вроде "я такую ерунду делал в пятом классе". Пожалуйста, поясняйте ваш профессионализм ссылками на неерунду, которую вы делали в десятом классе.
2 дня назад меня спросили про сайт: "Какой вопрос он решает?". Отвечаю:
На этом сайте размещаются фотографии, биографии и воспоминания об СССР. В частности, если НЕКТО говорит, что узкая группа миллиардеров завладела национальным богатством, которая создавалась тремя поколениями советских трудящихся, то милости прошу разместить информацию о родителях, дедушках и бабушках правдоискателя на странице https://tablepedia.com/bio.html
Если интересно, то его можно скачать в ZIP архиве (он занимает всего 2 мегабайта) по адресу https://tablepedia.com/tablepedia.com-2025_01_22.zip
Теперь вернёмся к обновлённой концепции:
1. На сайте-десятистраничнике 10 HTML файлов (то есть страниц), каждый из которых имеет меню в верхней части. Почти на каждой странице есть графические изображения, а на некоторых можно скачать файлы PDF. Графические файлы и документы, относящиеся к HTML файлам, размещены в папках с почти такими же названиями. Фон большей части сайта может быть белым, а меню может быть жёлтым.
2. При обновлении сайта допускается оставлять "старые" страницы в формате HTML (и переносить в папку archive), но доступ к ним возможен только со страницы "Архив". Желательно, чтобы количество "старых" страниц было не больше 100.
3. Каждая страница сайта напоминает блог, где каждый "пост" имеет дату, заголовок и текст. Возможны ссылки на PDF файлы и публикации в социальных сетях. Также возможно размещение картинки (фотографии).
4. На странице "Архив" можно не только посмотреть "старые" страницы, но и скачать ZIP архивы сайта, размещённые в разные дни.
5. HTML и PDF файлы предназначены главным образом для просмотра на смартфоне. Рекомендуемый шрифт - Arial 16.
Ответ на пост «Я решил делать игру про СССР»1
Сделайте, пожалуйста, PDF файл с тëплыми и беззаботными воспоминаниями об СССР, а также фотографиями советских товаров (например, продуктов питания).