Search
Write a publication
Pull to refresh
44
0
Дмитрий Шехтман @leanchess

Начинающий пользователь

Send message
Не просто слышал, а использовал документацию в дальнейшей оптимизации.
Попробовал глубину 5. Думает по десять-двадцать секунд, но играет поинтереснее:

1. e4 g7
2. Qg4 h7
Спасибо. Должен признаться, что опыт как в DOSBox, так и в шахматах, у меня нулевой.

Дебют h6 объясняется очень просто: поиск снизу вверх с выбором первого максимума. Если поменять порядок поиска (или критерий выбора), получится дебют Na6, а дальше (если защищаться от коня) ладья начинает тупо метаться в углу.

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

В комментарии выше упомянули asmFish, занимающий около 100K на 64-разрядном процессоре. Скорее всего, его можно было бы портировать на восьмиразрядник, уложившись в 64K. Так что в теории это возможно, да.
Что вы называете современными оптимизациями? Не думаю, что за последние двадцать лет изобрели что-то новое. Подозреваю, что для того, чтобы получить сильные шахматы на слабом процессоре, придётся идти окольными путями — например, запихнуть в картридж огромный ROM с библиотеками дебютов и эндшпилей.
Действительно, с глубиной в три полухода играет слабовато. Но стоит поменять на четыре, и мы получим

3. Qf3 f6

При этом размер программы не меняется, но задумывется она иногда надолго.

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

Это довольно распространённая ошибка; собственно, Alex Garcia сам об этом написал. В любом случае, я добавил код и проголосовал за undelete. Для того, чтобы ответ стал видимым, нужны ещё голоса ;)

Проверку хода можно сделать на основе допустимых ходов компьютера — это должно помочь сэкономить место.

Разумеется. Задача — не просто сэкономить место, а максимально сэкономить место.

Спасибо.


Size-coding и code golfing — немного разные вещи. Я как раз добавил там ответ, но его стёрли (при этом ответ reeagbo оставили) — может, потому что указал ссылку, а не выложил код целиком.

Белые заглавные, чёрные строчные, как у всех.

В общем, надо писать продолжение статьи :)


Будем рассматривать отдельно метаданные (то, что уже в коде) и данные (шахматную доску).


Метаданные заданы в массивах (опять-таки, в самой "тощей" вариации):


  1. init_db — то, из чего формируется доска при инициализации,
  2. moves_db — на каждую фигуру: кол-во векторов, дальность, адрес первого вектора
  3. vec_db (условно) — векторы ходов
  4. eval_db — величина для оценочной функции на каждую фигуру

Данные — стандартные 10x12 плюс дополнительный ряд сверху от верхнего ряда (вместо байта слева).


Вся работа заняла около двух недель (при этом остались наработки для полной реализации).

Благодарю за вопрос, коллега :)


Объём модулей в Barebone DOS edition:


  1. Инициализация — 56
  2. Вывод — 26
  3. Ввод — 24
  4. Логика игры — 204
  5. Управление и прочее — 18

Данное разделение несколько условно, поскольку, вследствие жёсткой оптимизации, рамки между модулями немного размыты. У меня нет точных сведений по размерам отдельных модулей (в какой-то момент перестал отслеживать).


Данные хранятся в виде массива 10+10x12.


Статистика по Barebone DOS edition (в BIOS на процедуру больше):


  • call — 5
  • ret — 2
  • loop/loopz — 5
  • rep — 2
  • jmp — 1 (бесконечный основной цикл)

Последний можно считать управлением, т.о., размер модуля управления — 2.


Оптимизировано всё, алгоритм и код неразделимы. Рекурсия, естественно, применялась — иначе не было бы ИИ.

Stockfish был до недавнего времени лучшим в мире.

Не представляю, как такое портируется на ассемблер. Думаю, проще взять откомпилированный C++ и оптимизировать проблемные участки.

P.S. Говоря о 100Kb, мы, скорее всего, не учитываем объём библиотек дебютов и эндшпилей.
Вы выиграли? Тогда будьте добры, опубликуйте партию.
<francophilia-mode>Не Оливеру Паудади, а Оливье Пудад</francophilia-mode>
Верно, я не упомянул 1K ZX Chess в статье (но не забыл о них, см. описание на английском). LeanChess немного не дотягивают по функционалу, но получились более, чем в два раза легче.

Попробуйте )
Просто смайлики в тексте статьи не разрешают.

Если выбросить из LeanChess всю шахматную логику, она и будет таким (самым маленьким на сегодня) числом. Шашки это слишком просто.

1

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Registered
Activity