- 1
- 2
- 3
- 4
if(h&&c-L<0)return y^=8,G--,L;
// Toledo просрал оптимизацию на 2 байта ;)
if(h&&c<L)return y^=8,G--,L;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+160
if(h&&c-L<0)return y^=8,G--,L;
// Toledo просрал оптимизацию на 2 байта ;)
if(h&&c<L)return y^=8,G--,L;
В общем-то этот пост не про говнокод, а про обещанную попытку привести в понятный вид шахматы,
упомянутые в http://govnokod.ru/11704.
https://github.com/bormand/nanochess
Читаем, играем, обсираемкомментируем...
В цикле перебираем все возможные ходы: сначала грубо оцениваем ход, по нескольким характеристикам - съедаем ли мы фигуру противника, ведет ли ход к захвату центра, будет ли шах и т.п (подробности описаны в большом комментарии посреди кода). Затем оценка уточняется путем поиска лучшего ответа противника на данный ход и вычитания его оценки из текущей. Среди всех доступных ходов выбирается ход с наибольшей оценкой.
При переборе ходов противника используется несложное отсечение - если найден ход противника с оценкой, большей чем разность оценок нашего текущего и нашего лучшего ходов - поиск прерывается, т.к. данный ход явно не будет лучше того, который сейчас выбран лучшим.
Остальное детали ;)
Через недельку, ок?
То есть почти каждый раз выбор второго по лучшести хода может мешать тактике противника?
>При переборе ходов противника используется несложное отсечение - если найден ход противника с оценкой, большей чем разность оценок нашего текущего и нашего лучшего ходов - поиск прерывается
То есть глубина анализа ходов всего 2 хода?
Второй по лучшести ход хуже первого по лучшести - так что скорее всего выбрав его можно испортить игру только себе ;)
> То есть глубина анализа ходов всего 2 хода?
Нет, может копаться и глубже, регулируется константой, помеченной как /*ply*/. Но т.к. это js - больше 4 туда писать не стоит.
Это три полухода, то есть полтора хода.
Wikipedia: Полуход — один ход белых или один ход чёрных, единица измерения и минимальная единица изменения позиции на шахматной доске. Два полухода составляют ход, представляющий собой одну строку в записи шахматной партии на бумаге.
Хм. Спасибо за исправление. Не знал, что это полуходы.
P.S. Надо перечитать шахматную терминологию, дабы не спороть еще какую-нибудь хуйню.
http://ru.wikipedia.org/wiki/Альфа-бета_отсечение
P.S. Спасибо за линк, придется его прочесть, освежить память ;)
Тактика же это просто глубина счета вариантов и тут мы упираемся в возможности процессора.
Никогда не изучал спец. литературы, но мне всегда интуитивно казалось что в хорошем шахматном алгоритме должна быть нейронная сеть. Просто обязанна.
>сначала грубо оцениваем ход, по нескольким характеристикам - съедаем ли мы фигуру противника, ведет ли ход к захвату центра, будет ли шах и т.п
У нас есть входной набор параметров, но как они сочетаются - обычная сумма этих факторов помноженная на коэффициенты? Это тривиально.
Наверняка если натренировать сеть на различных партиях для оценки ситуации, то думаю это будет неплохой идеей.
Но я вижу вот такие проблемы:
1) Непонятно как организовать выход сети - в районе 4000 выходов - по одному на каждый допустимый ход?
2) Сеть запросто может выдать недопустимый ход - что делать в этом случае? Видимо нужно ее сразу же за это "наказать", проведя цикл обучения, в котором данный ход помечен как плохой.
P.S. Про 4000 я конечно загнул. Ходов меньше.
Нет, но около того. На вход характеристики позиции, и по оценке каждой позиции судить о варианте.
И я наверное был неточен, когда сказал что это будет не стратегия. Скорее интуитивное понимание позиции - типа сдвоенные пешки - плохо, или слон лучше коня, но когда позиция закрытая, то лучше таки конь.
А стратегия - это план. Например план атаки на короля (типа примерный порядок действий в голове, без расчета) - вот такое как сделать я не представляю, чтобы машина понимала и планировала.
> piecesCosts = [0,99,0,306,297,495,846], // cost of the pieces (empty,pawn,king,knight,bishop,rook,quee n)
> 306,297 knight,bishop
Оно играет лучше, чем p4wn?
Общеизвестный факт. Но с оговоркой:
> но когда позиция закрытая, то лучше таки конь.
Бывает и такое что слон/конь лучше даже чем ладья, из-за своего расположения, конфигурации пешек, итд.
Может из-за специфики движка Toledo с конём играет лучше.
А в целом - сколько полей она способна покрыть. Так вот слон (даже из угла) лучше, потому что в открытой позиции контроллирует больше чем конь или столько же.
Конь даже стоит в центре доски - 8 полей, максимум. А конь в углу - это вообще 2 поля.
Плюс слон имеет в 2-3 раза большую скорость перемещения.
ага,
конь - 2..8
слонь - 7..13
где тут логика?
Конь не стесен ничем, потому что прыгает.
Сколько раз мне нужно это повторить?
Сила фигур различается радикально, в зависимости от ситуации. Ладьи в самом начале игры вообще нихуя не стоят. Они статисты.
>>Вообще силу фигуры можно грубо определить по количеству полей, которое она атакует
Всё тот же принцип.
у вас там еще не ссут все кипятком от нейронок?