Pull to refresh
38
0
Владимир Медведев @WinPooh73

Разработчик, C/C++

Send message
Стоит ещё заметить, что в результате массированного применения этого самого кое-чего данные технологии снова могут оказаться востребованными. Ну, возможно, не сразу, лет 30-50, а то и 100 должно будет пройти…
Интересно, что в английской Википедии сочетание «automated trading» приводит к редиректу на «algorithmic trading». Что тоже, в общем-то, неправильно.
В Zobrist hash для шахматной позиции ещё неплохо добавить XOR-слагаемые, зависящие от прав сторон на рокировку и взятие на проходе. Накладные расходы минимальные, при этом ликвидируется большой класс потенциальных коллизий. Программа реально начинает играть сильнее.
При большом количестве частиц количество вычислений методом «в лоб» будет расти квадратично, что не очень хорошо. Ведь на движение каждой частицы наибольшее влияние оказывают её ближайшие соседи. Если не нужна сверхвысокая точность (а задача многих тел точно не решается даже численно), можно ограничиться только ими.
Попробуйте реализовать модель с меньшей алгоритмической сложностью. В качестве отправной точки рекомендую, например, event driven collision model. Она в общих чертах рассмотрена в книге «Алгоритмы» Седжвика и его же курсе «Algorithms I» на Курсере.
Вы не пробовали реализовать алгоритм UCT (Монте-Карло?) На цуме-го с малым количеством свободных полей должен работать очень неплохо, мне кажется.
Программа Deep Thought (предшественница Deep Blue) училась именно на партиях людей. Это был конец 80-х — компьютеры как раз приближались по рейтингу к людям, но ещё им уступали.
Вот статья о том, как настраивали её оценку: www.tim-mann.org/DT_eval_tune.txt
Думаю, что компьютерам уже поздно учиться у людей, так как они обогнали их в шахматах навсегда — на 600 пунктов Эло и больше. Поэтому вопрос индивидуального стиля в сравнении с людьми не стоит — как не стоит он в игре гроссмейстера с разрядником (более сильный шахматист может выиграть как угодно — хоть в стиле Морфи с лихой атакой, хоть в стиле Карпова с позиционным зажимом).

Персональные стили в основном нужны для развлекательных программ, вроде Чессмастера. Кстати, GreKo тоже участвует в качестве основного движка в одной из таких оболочек: LucasChess.

Вот интересная статья про стили, оценку и поиск, хотя и старинная: http://www.thorstenczub.de/complcss2.html
Пол Морфи — мой любимый шахматист, с его партий я начал. Увы, алгоритм сошелся к абсурдным значениям — с отрицательной стоимостью коня. Думаю, причина в том, что в базе для Морфи было слишком мало партий, он всё-таки недолго играл. Другой причиной может быть большое число партий, где он давал фору.
Уже не в первом комментарии встречаются рассуждения вида «а вот в такой-то позиции оценка материала будет давать сбой, потому что на самом деле там выигрыш/ничья за белых/чёрных...».

Конечно, всё это так! Шахматы — игра очень конкретная, никакого магического рецепта для оценки позиции нет и быть не может. Только счёт, счёт и счёт. Плюс разумная оценка на листьях :)

СТАТЬЯ — О ДРУГОМ.

Нам известно, что в оценку компьютера всегда входит материал — фигурам присваиваются определённые веса. Присваиваются чаще всего по интуиции или по традиционным меркам. Цель статьи — найти эти веса каким-то более определённым методом, чем «с потолка», дать им некоторое математическое обоснование. НЕ ОТКАЗЫВАЯСЬ ОТ ДРУГИХ ЧЛЕНОВ В ОЦЕНКЕ. А дополняя их.
В принципе, код достаточно простой, написан в стиле «C++ как улучшенный C». Попробуйте скачать и поразбираться — начать лучше всего с класса Position. Если возникнут вопросы, всегда готов ответить, пишите тогда в личную переписку…
Пока не пробовал. Теоретически, конечно, она может быть лучше, но потребуется большее количество данных для обучения, и количество коэффициентов сразу резко возрастает — вместо пяти весов фигур надо будет рассматривать 10x10 = 100 коэффициентов (включая линейные и перекрёстные члены в квадратичной форме).
Мне кажется более интересным подход, который был реализован в Рыбке — большая таблица со статистикой для всех возможных соотношений материала. Она занимает несколько мегабайтов, и даёт усиление игры до 50 пунктов Эло, если я правильно помню.
Да, эндшпиль и дебют — это граничные случаи, там очень важна конкретика. В современных программах обычно различают несколько стадий партии, и для каждой пишется своя оценочная функция. Совсем малофигурные окончания, естественно, играются по готовым таблицам.
Да, общее количество пешек — это хороший кандидат на добавление новых элементов в оценку, о котором я пишу в конце статьи. Причём именно пешек, а не фигур.
> Во втором — вероятность выигрыша вроде бы должна быть больше 2 * N > P! Но всем известно, что мат двумя конями одинокому королю поставить нельзя.

Если усреднять не по позициям типа «король и два коня против короля», а по всем позициям, где у белых два лишних коня, вероятность победы будет близка к 100%. Например, «король, два коня и три пешки против короля и трёх пешек», или «король, два коня и ладья против короля и ладьи». Смысл подсчёта баланса — именно в этом.
Естественно, материальная оценка не претендует на абсолютную точность. Я об этом упомянул в статье — это всего лишь первое приближение, и оно работает только в вероятностном смысле:

«Пусть мы видим случайно выбранную позицию, в которой у белых перевес в 2 пешки (ΔM = 2). С вероятностью, близкой к 80%, мы можем утверждать: партия закончится победой белых.»

Более того, никакая статическая оценка в шахматах не будет правильно оценивать все позиции — без процедуры поиска никак не обойтись.
Интересное предложение, но тут маленькая техническая трудность: надо где-то взять 100 (а лучше 1000, можно и больше) стартовых позиций с таким соотношением материала. Потому что движок у меня детерминированный, он будет одни и те же ходы повторять. Впрочем, это всё решаемо, конечно же.
Спасибо, идея с одним измерением за партию интересная. Можно ещё выбирать то сочетание фигур, которое дольше всего за партию находилось на доске. Попробую поэкспериментировать с разными вариантами отбора позиций…
12 ...
22

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity