Форум » » Что нельзя объяснить шахматной программе? » Ответить

Что нельзя объяснить шахматной программе?

PozitiFF_Chess: Остались ли еще какие-то чисто человеческие привилегии, которые нельзя было бы объяснить программе с помощью алгоритмов? И если да - то почему этого сделать нельзя? Или можно поставить вопрос по-другому: какими чисто шахматными законами обычно пренебрегают разработчики с целью оптимизации своего кода и усиления игры шахматной программы?

Ответов - 94, стр: 1 2 3 4 5 All

immortal223: PozitiFF_Chess Мне вот самому интересно - как программе объяснить что такое «крепость» и как научить программу её избегать?

Кевин: immortal223 пишет: как программе объяснить что такое «крепость» и как научить программу её избегать? Вот это очень хороший вопрос: на Playchess много игроков строили "крепость" и по времени обыгрывали буллет 1+0 движок Deep Fritz 11. Даже Крамник против Фрица смастерил "крепость". Пока этого программы вообще не понимают.

N1mTzo: В коневом эндшпиле, например, движки плохо рубят Сам сталкивался с этим в адвансе несколько раз Еще со стратегией у них плохо, собственно из этого 1-й пункт и вытекает, потому как ферзевые окончания движки играют очень сильно, так как там тактика на тактике. Пешечные цепи и закрытые позиции - движки с этим тоже плохо справляются. Да много еще чего есть если бы уже сегодня движки всё это понимали, то человеческие шахматы бы умерли


Gata: наверное, можно объяснить так - же как и человеку. Но это потребует формализации понятия "крепость", огромному количеству кода, разбуханию ОФ и, в конечном итоге, падению силы игры во всех остальных позициях (за счет кода оф, обследующего участки доски на предмет "крепости")

дуп: PozitiFF_Chess пишет: Остались ли еще какие-то чисто человеческие привилегии, которые нельзя было бы объяснить программе с помощью алгоритмов? И если да - то почему этого сделать нельзя? Я думаю, что осталась всего одна "привилегия". Именно за счет ее человек все еще и может играть почти на равных с прогами. Человек может взглянуть на позицию (или мысленно представить ее) и мгновенно понять, что здесь ловить нечего. И соответственно в своем мысленном "переборе" эту "ветку" он обрезает со 100% точностью. Причем на очень маленькой глубине, большую часть уже в корне перебора Человек рассматривает на порядки меньше узлов, чем движки. Проге же, чтобы что-то "понять" нужно сосчитать. То есть большую часть (точно трудно сказать, но большую) отведенного на поиск времени движки именно этим и занимаются - считают всякий бред. ИМХО

unknow: Эндшпильная крепость программируется типа: [chess]2k5/2p5/3r4/8/8/1Q6/8/4K3 w - - 0 1[/chess] [pre2] static bool probe_KQkrp8(int *score) { int wk_sq = board.king_sq[white]; int bk_sq = board.king_sq[black]; int br_sq = rbit2sq(board.items[brook]); u64 bpawns = board.items[bpawn]; if (sq_rank(bk_sq) >= rank_7 && sq_rank(wk_sq) <= rank_5 && sq_rank(br_sq) == rank_6 && (atk_king[bk_sq] & bpawns) && (atk_fork[white][br_sq] & bpawns)) { *score = 0; return true; } return false; } [/pre2] Насчет общего случая - есть кажется двойной нулевой ход, его пока не кодил, как оно там - врать не буду.

bankuss: отличие крепости от других типов позиций в том, что на большом протяжении ходов оценка не меняется. даже если она +2, т.е. некую формализацию сделать можно, но вот чтобы крепость определялась в процессе перебора... хм, тут все очень не просто.

WildCat: bankuss отличие крепости от других типов позиций в том, что на большом протяжении ходов оценка не меняется. Оценка еще может некоторое время меняться, хотя крепость уже построена. С другой стороны, если оценка не меняется долгое время, то еще не факт, что это крепость.

unknow: bankuss пишет: тут все очень не просто. Со стороны защиты: имею из ОФ эти -2, делаю два нулевых, промежуток между ними по расположению звезд или еще как, материал как параметр, можно еще проверить включенность свох пешек в цепи, по исключению. Если хуже не стало, оценку делю на два. Это типа как при разноцветных слонах.

bankuss: unknow пишет: С другой стороны, если оценка не меняется долгое время, то еще не факт, что это крепость. это понятно, нужно еще проверить пешечные цепи (малоподвижность или полная замкнутость) а также что-то вроде счетчика ходов одной-двумя фигурами, если сделанные ходы принадлежат 1-2 фигурам, пешки не ходят, у соперника тоже самое - ходы одной-двумя фигурами, то итоговую оценку можно занижать. т.е. ввести какие то признаки "тупых маневров" фигурами туды-суды )))) но все это постфактум... а вот как определить переход в такую позу в процессе перебора? ибо варианты длинные, а в статике просто нереально это определить.

PozitiFF_Chess: У Рыбки оценка вообще в миттельшпиле редко меняется. Она там почти всегда 0.00 плюс минус эпсилон. Но о крепости говорить не приходится.

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

Osipov: Можно пробовать использовать то, что уже есть. В оценке позиций используются некоторые понятия, относящиеся к оценке открытости/закрытости позиций - открытые вертикали, пешечное прикрытие короля, пешечная цепь (когда соседние пешки не имеют разрыва по вертикали более чем на одну клетку), мобильность на территории соперника и т.д. В вычислении оценки из весов белых ВЫЧИТАЮТСЯ веса черных, поэтому в итоге можем ничего не увидеть. Но можно параллельно с вычислением обычной оценки, СКЛАДЫВАТЬ веса открытости позиции. Тогда получим два числа - обычная оценка и оценка открытости позиции. А дальше можно экспериментировать, например, давать бонус себе за открытость позиции (т.е. из двух вариантов с близкой общей оценкой на четном уровне дерева перебора отдавать предпочтение тому варианту, который ведет к более открытой позиции). А можно наоборот - штрафовать за открытость. И дальше смотреть - в каком случае движок будет сильнее. Можно вынести эти бонусы/штрафы в настройки движка и менять их. Тогда можно менять стиль игры.

Bison: Насчет крепости. Можно попробовать делить эндшпильную оценку, если у слабейшей стороны все фигуры защищены, ни одна не атакована дважды и вражеский король не может подобраться к королю соперника для матовой атаки. Пример unknow как раз из числа таких позиций.

Кевин: Можно ли объяснить шахматной программе избегать такого: в дебюте (чаще всего) и в других позициях неоднократно наблюдал картину, что движок (я наблюдал за глубоководной), например, ходит конём с f3 на h2 и оценивает как небольшой плюс (около 0.30) у белых, затем ходят чёрные и белые следующим ходом возвращают коня на ф3, давая уже более близкую к 0.00 оценку. Зачем топтаться на месте и давать противнику темп?

Кевин: Ещё интересно, как научить движок правильно оценивать такие ничейные позиции, когда, например, разноцвет слонов и пара лишних пешек у одной стороны (ну, вы поняли, о чём речь: пешки блокирует король, никогда им не прорваться, слон не того цвета, чтобы шахануть короля, а король-то с места не сдвинется), а движки даже с таблицами Налимова дают неправильную оценку. Или же лишняя пешка у одной из сторон в ладейном (у каждой стороны по две ладьи) окончании. Или во всё том же ладейнике сдвоенные две пешки, а Рыбка полагает, что выигрыш, и долго-долго мучает мозг, показывая одну и ту же оценку. Или же ладья за слона и пешку + другие фигуры на доске так, чтобы больше пяти фигур, однако всё равно ничья, но движки так не думают. Вообще в запертых позициях двиги часто неправильно оценивают ситуацию. Можно ли их научить давать правильную оценку? b1R5/5pk1/2p3p1/8/r5PP/5BK1/5P2/8 w - - 0 62 Вот пример мучения: Рыбка даёт оценку 1.06, Роба 0.74. И играют, мучают свой компьютерный мозг далее ходов эдак до ста, пока не будет засчитана закономерная ничья.

bankuss: Кевин пишет: Или во всё том же ладейнике сдвоенные две пешки, а Рыбка полагает, что выигрыш, и долго-долго мучает мозг, показывая одну и ту же оценку. было недавно такое в партии на ЛСС - я намеренно "соскавивал" на такой энд, зная что там ничья, соперник же видел +1 движковое и смело туда шел. после нескольких моих сообщений о том что переход в 6-ти фигурку неизбежен после размена одной пары пешек с 100% ничьей, согласился и принял эту ничью. жаль что нет 7-ми фигурок

WildCat: Хорошо, когда только +1. Рыбка бывает и +2 и +3 в ничейных ладейниках показывает.

Bison: Кевин Насчет слонового разоцвета - в Bison 9.6 была спец. функция для таких случаев. Но потом я ее убрал, все равно толку от нее ноль. Насчет позиции [chess]b1R5/5pk1/2p3p1/8/r5PP/5BK1/5P2/8 w - - 0 62[/chess] b1R5/5pk1/2p3p1/8/r5PP/5BK1/5P2/8 w - - 0 62 посложнее, больно уж там намешано. По мне, максимум, что можно сделать, так это чуть подсократить плюс для такого типа позиций, и то не факт, что это принесет дивиденды.

PozitiFF_Chess: WildCat пишет: Рыбка бывает и +2 и +3 в ничейных ладейниках показывает. А можно примеры, когда Рыбка с включенными базами Налимова показывает +2 или +3?



полная версия страницы