Немного об IT
2 subscribers
6 photos
20 links
Download Telegram
Очередная статья по программированию шахмат - Пешки, вперёд!

Научили ходить пешек. У них самая сложная "бизнес-логика" ходов. Ходят вперёд, бьют наискосок. Могут превратиться в другую фигуру. Могут иногда взять "на проходе".

Пока пешки могут превратиться только в ферзя. Играйте, пробуйте - демо #9
В статье "Ходы слона, ладьи, ферзя, короля" мы научили двигаться по правилам все остальные фигуры.

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

Демо #10 игры- играйте всеми фигурами
Опубликовал 11-ую статью по программированию шахмат: Даём королю инстинкт самосохранения. Теперь короля нельзя оставить под атакой. Ещё теперь можно поставить мат или пат.

Пробуйте, играйте - демо #11
Уже почти полностью соблюдаются шахматные правила. Только пешку пока можно превратить только в ферзя. И не действуют правила 50 и 75 ходов по признанию ничьей.
Наконец-то! После месячного перерыва выкладываю очередную статью по программированию шахмат: Пешка может стать не только ферзём

Очередное обновление/дополнение программы происходит всегда быстро. Проблема - оформить это изменение в статью. Основная работа занимает много времени, на выходных есть ещё домашние дела.

А пока - читайте, играйте: https://dev.initit.ru/chess/v012/
Добавил статью Признание ничьи и отмена хода
В ней добавил возможность отмены хода, прокрутки игры назад на любое количество ходов. Ещё добавлено признание ничьи по правилу 50-и ходов и по правилу троекратного повтора позиции.

Играть в текущей версии игры можно по ссылке - https://dev.initit.ru/chess/v013/

В следующей статье добавим чуть-чуть "интеллекта" компьютеру, чтобы он делал не случайные ходы как сейчас, а чуть более рациональные.
Опубликовал следующую часть из цикла "Программируем шахматы на php и javascript":

Грубый перебор ходов, NegaMax

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

Пробуйте, играйте: https://dev.initit.ru/chess/v014/
Повесил на сайт баннер рекламной сети яндекса, уж простите 🤪
Чтобы сайт приняли в сеть, опубликовал "Политику конфиденциальности", это требование сети.
Встречайте новую часть шахматных публикаций:

Альфа-бета отсечение, сортировка ходов

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

В демо игры я увеличил глубину не на 2 полухода, а на один. Компьютер просматривает ходы на 4 полухода вперёд, но зато за среднее время всего 2 секунды.
Давно не писал. Обычно я быстро, в течении дня, пишу следующую часть шахматной программы, а потом долго пишу статью - описание этого добавленного кода для сайта. Учтите, что у меня ещё основная работа есть, и сайтом я занимаюсь редко, в основном в выходные, да и то не в каждые.

На этот раз я даже следующую часть программы не написал. Были другие важные дела. Плюс ко всему, у меня стал крашится основной SSD-диск на ноутбуке, и в конце концов, я его заменил. Комп чистый, всё нужное програмьё заново устанавливал, настраивал, это та ещё заморочка...

По шахматной программе в следующей части планирую:
1. Усложнить оценочную функцию, добавить туда позиционные факторы. Это конечно сильно снизит скорость перебора и эффективность альфа-бета отсечения. Буду экспериментировать.
2. Сделать "дробную" глубину просмотра
3. Сделать выборочные продления
Пришёл вопрос по "обратной связи": как вывести состояние игры в виде текста?
Если нужен формат json, то есть простое готовое решение - метод serializeState() в классе GameState.
В json попадают поля, перечисленные в константе GameState::PROPERTY_NAMES

Если-же нужно что-то иное, надо уточнить что именно нужно, какие поля, в каком виде, ...
Выложил следующую часть в "шахматной серии" статей:

Выборочные продления, игровые эвристики

В Демо игры базовая глубина перебора - всего лишь 2 полухода. Скорость перебора сильно снизилась из за усложнения оценочной функции, и вследствие этого снизилась и эффективность альфа-бета отсечения. Так что в некоторых моментах алгоритм стал играть хуже.

Но у него есть выборочные продления, некоторые ветки он просчитывает довольно далеко. Так что в каких-то позициях он находит "гениальные" ходы (шутка), а в каких-то играет очень слабо.

В целом играть стало интереснее, алгоритм играет "злее". Играйте, пробуйте внедрять свои игровые эвристики.
Встречайте обновление, следующую итерацию шахматного алгоритма на php.

Оптимизируем, поле 16*16, взятия до конца

Алгоритм выигрывает у сторонней программы на уровне 6, который соответствует примерно ELO=1435. Но проигрывает на уровне 7, который соответствует ELO=1526.

Попробуйте, поиграйте сами с версией 17
Добавил статью с описанием одного случая из моего далёкого прошлого:

Дикая оптимизация (конкурс программистов)

Тема статьи немного связана со следующей будущей статьёй из "шахматного цикла"
Программист критикует хобби-проекты других программистов

Михаил Ларченко в своём телеграмм-канале предложил сбросить ссылки на свои пет-проекты, чтобы их посмотреть и покритиковать.
Я прислал ссылку на мой initit.ru
И вот он выложил видео.

Кто такой Михаил? - спросите вы. Он программист, блогер и эксперт - преподаватель, читает лекции по javascript студентам в компании, где я работаю.
Добавил следующую статью из шахматного цикла, дошли наконец руки.

Битовые доски

В статье описаны идеи и основные "механики" работы с битовыми досками. Скорость перебора оцененных позиций возросла минимум в два с половиной раза в позициях где много вариантов развития событий. А в остальных вариантах ускорение получилось в 8-9 раз.

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

Пробуйте, играйте - Играть с компьютером, v18