- 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
Читаем, играем, обсираемкомментируем...
LispGovno 09.09.2012 16:27 # +1
bormand 09.09.2012 16:54 # −10
В цикле перебираем все возможные ходы: сначала грубо оцениваем ход, по нескольким характеристикам - съедаем ли мы фигуру противника, ведет ли ход к захвату центра, будет ли шах и т.п (подробности описаны в большом комментарии посреди кода). Затем оценка уточняется путем поиска лучшего ответа противника на данный ход и вычитания его оценки из текущей. Среди всех доступных ходов выбирается ход с наибольшей оценкой.
При переборе ходов противника используется несложное отсечение - если найден ход противника с оценкой, большей чем разность оценок нашего текущего и нашего лучшего ходов - поиск прерывается, т.к. данный ход явно не будет лучше того, который сейчас выбран лучшим.
Остальное детали ;)
vistefan 09.09.2012 16:59 # +3
bormand 09.09.2012 19:23 # −10
Через недельку, ок?
vistefan 09.09.2012 20:19 # +5
LispGovno 09.09.2012 17:16 # −1
То есть почти каждый раз выбор второго по лучшести хода может мешать тактике противника?
>При переборе ходов противника используется несложное отсечение - если найден ход противника с оценкой, большей чем разность оценок нашего текущего и нашего лучшего ходов - поиск прерывается
То есть глубина анализа ходов всего 2 хода?
bormand 09.09.2012 17:22 # −10
Второй по лучшести ход хуже первого по лучшести - так что скорее всего выбрав его можно испортить игру только себе ;)
> То есть глубина анализа ходов всего 2 хода?
Нет, может копаться и глубже, регулируется константой, помеченной как /*ply*/. Но т.к. это js - больше 4 туда писать не стоит.
bormand 09.09.2012 17:38 # −10
vistefan 09.09.2012 20:22 # +3
Это три полухода, то есть полтора хода.
Wikipedia: Полуход — один ход белых или один ход чёрных, единица измерения и минимальная единица изменения позиции на шахматной доске. Два полухода составляют ход, представляющий собой одну строку в записи шахматной партии на бумаге.
bormand 09.09.2012 20:30 # −10
Хм. Спасибо за исправление. Не знал, что это полуходы.
P.S. Надо перечитать шахматную терминологию, дабы не спороть еще какую-нибудь хуйню.
3.14159265 10.09.2012 15:47 # +2
http://ru.wikipedia.org/wiki/Альфа-бета_отсечение
bormand 10.09.2012 16:24 # −10
P.S. Спасибо за линк, придется его прочесть, освежить память ;)
3.14159265 10.09.2012 20:53 # +2
Тактика же это просто глубина счета вариантов и тут мы упираемся в возможности процессора.
Никогда не изучал спец. литературы, но мне всегда интуитивно казалось что в хорошем шахматном алгоритме должна быть нейронная сеть. Просто обязанна.
>сначала грубо оцениваем ход, по нескольким характеристикам - съедаем ли мы фигуру противника, ведет ли ход к захвату центра, будет ли шах и т.п
У нас есть входной набор параметров, но как они сочетаются - обычная сумма этих факторов помноженная на коэффициенты? Это тривиально.
Наверняка если натренировать сеть на различных партиях для оценки ситуации, то думаю это будет неплохой идеей.
bormand 10.09.2012 21:08 # −10
Но я вижу вот такие проблемы:
1) Непонятно как организовать выход сети - в районе 4000 выходов - по одному на каждый допустимый ход?
2) Сеть запросто может выдать недопустимый ход - что делать в этом случае? Видимо нужно ее сразу же за это "наказать", проведя цикл обучения, в котором данный ход помечен как плохой.
P.S. Про 4000 я конечно загнул. Ходов меньше.
3.14159265 11.09.2012 14:50 # 0
Нет, но около того. На вход характеристики позиции, и по оценке каждой позиции судить о варианте.
И я наверное был неточен, когда сказал что это будет не стратегия. Скорее интуитивное понимание позиции - типа сдвоенные пешки - плохо, или слон лучше коня, но когда позиция закрытая, то лучше таки конь.
А стратегия - это план. Например план атаки на короля (типа примерный порядок действий в голове, без расчета) - вот такое как сделать я не представляю, чтобы машина понимала и планировала.
guest 11.09.2012 16:12 # 0
> 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?
3.14159265 11.09.2012 16:22 # +2
Общеизвестный факт. Но с оговоркой:
> но когда позиция закрытая, то лучше таки конь.
Бывает и такое что слон/конь лучше даже чем ладья, из-за своего расположения, конфигурации пешек, итд.
Может из-за специфики движка Toledo с конём играет лучше.
3.14159265 11.09.2012 16:37 # +1
А в целом - сколько полей она способна покрыть. Так вот слон (даже из угла) лучше, потому что в открытой позиции контроллирует больше чем конь или столько же.
Конь даже стоит в центре доски - 8 полей, максимум. А конь в углу - это вообще 2 поля.
Плюс слон имеет в 2-3 раза большую скорость перемещения.
eth0 11.09.2012 17:34 # 0
guest 11.09.2012 18:38 # +1
ага,
конь - 2..8
слонь - 7..13
где тут логика?
3.14159265 11.09.2012 18:42 # +1
Конь не стесен ничем, потому что прыгает.
guest 11.09.2012 18:52 # +2
3.14159265 11.09.2012 18:53 # +2
Сколько раз мне нужно это повторить?
Сила фигур различается радикально, в зависимости от ситуации. Ладьи в самом начале игры вообще нихуя не стоят. Они статисты.
>>Вообще силу фигуры можно грубо определить по количеству полей, которое она атакует
Всё тот же принцип.
guest 11.09.2012 18:58 # +1
OPAHrymaH 06.04.2023 09:24 # −10
OcemuH 08.04.2023 13:37 # 0
guest6 06.04.2023 01:18 # −10
у вас там еще не ссут все кипятком от нейронок?
guest6 06.04.2023 01:51 # −10
guest6 06.04.2023 06:25 # −10
OPAHrymaH 06.04.2023 09:08 # −10
3a_O6e_Horu 06.04.2023 11:43 # −10
j123123 06.04.2023 09:21 # 0