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

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

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?

WildCat: У меня нет 6-фигурных баз.

WildCat: И тем не менее вот пример: [chess]2r5/2P4R/3k3P/3p3r/8/8/1KR5/8 w[/chess] Рыбка выдает чуть больше +2. Роба Робка еще чуть больше.

WildCat: Вот еще одна позиция, где 6-фигурные базы не должны помогать: [chess]1nk5/Q7/4r2p/PK6/8/8/8/8 w[/chess]

Кевин: А можно ли объяснить шахматной программе, что когда ход единственный, то нужно его сразу делать? Сколько наблюдаю партий на плече, в своих матчах, турнирах - поголовно движки, особенно без пондера, долго раздумывают над единственными (в смысле, хорошими) ходами, например: противник взял моего ферзя своим и если мой движок не заберёт его ферзя, то, конечно, проиграет. Смысл раздумывать, когда ферзя-то надо брать Или же шах королю, три возможных поля: пойдёт на первое - мат получит, на второе - фигуру отдаст, на третье - нормальная позиция будет. Зачем думать? Или же даже когда королю шах и единственное поле отступления, так движок думает да думает, давая противнику больше время для просчитывания вариантов и теряя своё драгоценное время, особенно при игре блиц и буллет.

unknow: Кевин пишет: А можно ли объяснить шахматной программе На самом деле объяснить можно все. Вопрос только во времени на построение логической модели, кодирование и отладку. когда королю шах и единственное поле отступления Это делается еще при старте поиска, типа: [pre2] move_gen_legal(&rtable); if (rtable.count == 1) bestline.pv[0][0] = rtable.moves[0].move; if (rtable.count <= 1) goto finality; [/pre2] шах королю, три возможных поля: пойдёт на первое - мат получит, на второе - фигуру отдаст, на третье - нормальная позиция будет А тут движку уже считать нужно - где самая дальняя жопа :) противник взял моего ферзя своим и если мой движок не заберёт его ферзя, то, конечно, проиграет Не знаю у кого как, сегодня как раз закончил отлаживать свою фишку: [pre2] // exchange booster if (!board.props.in_check) if (cur_depth > 3 && cur_depth < 10 && cur_score + 250 < beta) picker.in_exchange = true; [/pre2] Это кусок для cut-node, picker после этого должет выдавать только взятия и шахи - типа сужение выхода из текущей позиции по аналогии с поиском за горизонтом - в quies. Этот прунинг делает бесполезным futility pruning - сейчас раздумываю что из двух оставлять :)

Osipov: На самом деле, в этом вопросе о "единственных" ходах не всё так просто. Лишнего времени на раздумья не бывает. Даже в случае единственного хода бывает полезно подумать. Дело в том, что программа хэширует свои мысли, и этот хэш помогает сократить перебор после следующего хода. Если мы сделаем ход мгновенно, то информация в хэше станет совсем неактуальной, и на следующих ходах придется думать дольше. З.Ы. Наверно, опять неясно высказался.

Кузьмич: Osipov, но ведь в таком случае возникнет и абсолютно лишний, заведомо ненужный хэш, и его будет гораздо больше, чем полезного. (или я не так понял )

PozitiFF_Chess: Кузьмич пишет: но ведь в таком случае возникнет и абсолютно лишний, заведомо ненужный хэш Предположим создалась такая позиция, что мы вынуждены брать королем черного ферзя на d1 (единственный ход). Если мы сделаем его мгновенно, то хэш будет заполнен устаревшей информацией, в которой помимо размена на d1 будет и всякая левая инфа. "Задумавшись" над единственным ходом, мы заполняем хэш уже актуальной инфой. И уже следующий ход после размена нам будет делать легче... Но тут возникает вопрос - где мы выигрываем, если все равно хэш будет заполняться актуальной информацией на следующем ходу? А единственный ход можно сделать и моментально... (то есть - я тоже вероятно не понял :) )

дуп: // exchange booster if (!board.props.in_check) if (cur_depth > 3 && cur_depth < 10 && cur_score + 250 < beta) picker.in_exchange = true; Это из поиска. Все равно непонятно, как в корне не нарваться на тактику. Если есть всего три легальных хода, один из них уже N-итераций принес оценку, намного лучшую остальных двух ходов. Если отослать этот ход, всегда есть шанс, что здесь была крутейшая комбинация и мы поторопились

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

unknow: дуп пишет: Если есть всего три легальных хода, один из них уже N-итераций принес оценку, намного лучшую остальных двух ходов. Если отослать этот ход, всегда есть шанс, что здесь была крутейшая комбинация и мы поторопились Тут можно использовать exclude probe как в ипполите для увеличения глубины этого хода, по сравнению с остальными. И получить на чуть-чуть более точную оценку, если порция времени еще не израсходована.

Кевин: [chess]6rk/4q2n/p1p1p1pP/PpPpPpP1/1P1P1P2/3N2K1/3Q4/7R b - - 0 60[/chess] 6rk/4q2n/p1p1p1pP/PpPpPpP1/1P1P1P2/3N2K1/3Q4/7R b - - 0 60 Ну вот как заставить движок не мучать мозг в такой позиции? Она получилась в партии Игоррит - Рыбка. Может, можно как-нибудь запрограммировать в движок ничейно оценивать позиции с заблокированными пешками?

immortal223: Ну если б вместо коней были б у белых чернопольный слон, а у чёрных - белопольный, то было б ещё веселее и вообще 100% ничья. А тут - играть и играть

unknow: Кевин пишет: Ну вот как заставить движок не мучать мозг в такой позиции? Написать пробник с двумя нулевыми: - слабейшая сторона - на дельту от текущей позиции до beta, например -125 сантипешек запускает типа dbl_null_probe - признак чего передается например рекурсивно через стек - через полуход противника делается второй нулевой - далее при наличии признака что уже было два своих нулевых, закрытых полуходами противника, берем оценку - если оценка не ухудшилась, с мелкими дельтами можно поэкспериментировать, возвращаем -125 / 2 = -62 без дальнейшего углубления - эти -62 возвращаются наверх туда где было -125 и здесь свои ходы можно не смотреть вернуться еще раз наверх дав противнику его +62 понизив тем самым оценку его хода в который он уже не полезет. На стеке в переменной типа int поместится и признак и оценка short при старте пробника Второй нулевой делается если предыдущий ход противника не взятие, на взятие надо наверное сделать прерывание пробы. Вот такая типа идея. Параметры прунинга подобрать методом тыка, соль-перец по вкусу :)

PozitiFF_Chess: unknow пишет: - слабейшая сторона - на дельту от текущей позиции до beta, например -125 сантипешек запускает типа dbl_null_probe - признак чего передается например рекурсивно через стек - через полуход противника делается второй нулевой - далее при наличии признака что уже было два своих нулевых, закрытых полуходами противника, берем оценку - если оценка не ухудшилась, с мелкими дельтами можно поэкспериментировать, возвращаем -125 / 2 = -62 без дальнейшего углубления - эти -62 возвращаются наверх туда где было -125 и здесь свои ходы можно не смотреть вернуться еще раз наверх дав противнику его +62 понизив тем самым оценку его хода в который он уже не полезет. Ну играют черные Кж5 и Ке4+ своими двумя нулевыми ходами... Какую дельту ставить? ) unknow пишет: а взятие надо наверное сделать прерывание пробы Можно тогда и без взятия: Кф6 и Ке4...

Кевин: [chess]8/3bB3/p2Pk1p1/P1K2p2/1P6/4P1P1/8/8 w - - 0 72[/chess] 8/3bB3/p2Pk1p1/P1K2p2/1P6/4P1P1/8/8 w - - 0 72 Вот ещё один пример мозгомучительной позиции: у белых две лишних пешки, однако слоны на доске разнопольные и чёрный король подобрался близко к проходной белых. Очевидно, что тут ничья, однако двиги продолжают одинаково оценивать позицию и затем, избегая правила 50 ходов, ьелые отдают пешку и оценка снижается у обоих движков. Не люблю, когда на том же плече возникают подобные позиции, а движок соперника на моё предложение ничьи не откликается, видя оценку далёкой от нуля. Вот вся партия: [Event "Capitalists vs Rajlich 3, Блиц:1'+1""] [Site "USER-GZ7TNXNACM"] [Date "2010.01.10"] [Round "2"] [White "Igorrit MP verzione 0.086v6 x"] [Black "Rybka 3"] [Result "1/2-1/2"] [ECO "D38"] [Annotator "0.21;-0.14"] [PlyCount "285"] [TimeControl "60+1"] {} 1. d4 {B 0} Nf6 {B 0} 2. c4 {B 0} e6 {B 0} 3. Nc3 {B 0} d5 {B 0} 4. Nf3 {B 0} Bb4 {B 0} 5. cxd5 {B 0} exd5 {B 0} 6. Bg5 {B 0} Nbd7 {B 0} 7. e3 {B 0} c5 {B 0} 8. Bd3 {B 0} Qa5 {B 0} 9. Qc2 {B 0} c4 {B 0} 10. Bf5 {B 0} O-O {B 0} 11. O-O { B 0} Re8 {B 0} 12. Nd2 {B 0} g6 {B 0 Оба Последний ход в книге} 13. Bxd7 {0.21/ 16 4} Nxd7 {-0.14/11 1} 14. e4 {0.27/17 4 (Rac1)} dxe4 {0.08/12 3} 15. h4 {0. 25/17 1} Bxc3 {0.06/13 2} 16. Nxc4 {0.21/18 3} Qa6 {0.15/14 14} 17. Qxc3 {0.21/ 16 0} Nf6 {0.14/15 5} 18. Ne3 {0.39/18 8} Ng4 {0.15/15 5} 19. Qc7 {0.39/18 4 (Rfc1)} Nxe3 {0.08/11 2 (Bf5)} 20. fxe3 {0.40/19 3} Be6 {0.16/14 2} 21. Bh6 { 0.45/19 2} Bd5 {0.24/14 3} 22. Rac1 {0.36/19 2} Qe6 {0.24/14 2} 23. b3 {0.43/ 18 1} Rac8 {0.24/15 3} 24. Qf4 {0.43/18 2} a6 {0.23/15 4 (Rc6)} 25. Bg5 {0.49/ 17 1 (Rc7)} f5 {0.31/12 2} 26. h5 {0.53/17 2} Qf7 {0.49/13 5} 27. hxg6 {0.74/ 18 4} hxg6 {0.74/14 4} 28. Kf2 {0.81/18 4} Be6 {0.74/13 2 (Qe6)} 29. Rh1 {1.06/ 19 2} Rxc1 {0.73/15 3} 30. Rxc1 {1.06/17 0} Rc8 {0.75/15 3} 31. Rxc8+ {1.02/21 2} Bxc8 {0.75/14 0} 32. Qb8 {1.02/22 5 (Qe5)} Qd7 {0.74/15 2} 33. Qe5 {1.02/22 3} b5 {0.80/14 2} 34. Qf6 {1.02/21 1} Qf7 {0.75/16 2} 35. Qb6 {1.02/21 1 (Qd8+) } Kg7 {0.80/15 2} 36. Qc6 {1.02/20 1 (Qc5)} Bb7 {0.80/14 2 (Qe6)} 37. Qd6 {1. 02/21 2} Bc8 {0.80/16 3} 38. d5 {1.02/20 1 (Qc5)} Bb7 {0.79/15 1} 39. Qe5+ {1. 02/18 0} Kg8 {0.79/15 1} 40. Qb8+ {1.02/19 2} Kg7 {0.79/15 1} 41. d6 {1.02/17 0 } Qd7 {0.80/15 1} 42. Qa7 {1.02/19 1} Bc6 {0.82/15 3 (Kg8)} 43. Qd4+ {1.01/21 3 } Kh7 {0.82/14 1 (Kg8)} 44. Qf6 {1.02/19 2} Qg7 {0.80/16 1} 45. Qd8 {1.03/20 1} Qd7 {0.80/16 1} 46. Qb8 {1.01/19 1} Qg7 {0.81/15 5 (Kg7)} 47. Qb6 {1.01/19 2} Qb2+ {0.81/15 1 (Bd7)} 48. Kg3 {1.01/21 2} Bd7 {0.81/16 1} 49. Qc7 {0.96/21 9} Qe5+ {0.79/15 1} 50. Bf4 {0.86/22 8} Qe6 {0.80/14 1} 51. Kf2 {0.90/21 9 (Qb6)} Kg8 {0.65/12 2} 52. Qb6 {0.90/20 1 (Kf1)} Qf6 {0.62/13 2 (Kf7)} 53. Qb7 {0.75/ 17 1} Qh4+ {0.60/13 1} 54. Bg3 {0.75/19 2} Qd8 {0.59/14 1} 55. Be5 {0.70/19 2 (Kf1)} Qh4+ {0.44/12 2} 56. Ke2 {0.64/20 1} Qg4+ {0.43/14 1} 57. Ke1 {0.64/20 1 } Qh4+ {0.43/13 3 (Qg5)} 58. g3 {0.64/18 1} Qh1+ {0.43/13 3} 59. Kd2 {0.64/16 0 } b4 {0.43/13 2} 60. Qxb4 {1.13/16 2} Qf1 {0.99/12 1} 61. Qd4 {1.03/17 1} Qd3+ {0.94/14 1} 62. Qxd3 {1.03/18 0} exd3 {0.94/13 0} 63. Bf6 {1.10/19 4 (K:d3)} Kf7 {0.89/17 1} 64. Be7 {1.07/19 0} Bb5 {0.89/17 1} 65. a4 {1.12/19 0} Bc6 {0. 90/17 2} 66. Kxd3 {1.12/19 1} Bf3 {1.21/17 1} 67. Kd4 {1.13/18 0 (b4)} Bd1 {1. 04/18 1} 68. Kc4 {1.13/19 1} Ke6 {1.21/18 2} 69. a5 {1.20/19 1} Bc2 {1.21/20 1 (Be2+)} 70. b4 {1.20/19 1} Ba4 {1.21/21 1} 71. Kc5 {1.20/19 1} Bd7 {1.21/21 1 (Kd7)} 72. Kb6 {1.52/21 2} Bb5 {1.21/19 0} 73. Kc7 {1.52/21 1} Bd7 {1.21/21 1 (Be8)} 74. Bf6 {1.52/20 1 (Bg5)} Bb5 {1.21/19 1} 75. Bd4 {1.52/19 0 (Ba1)} Bd7 {1.21/20 1} 76. Ba1 {1.52/19 1} Bb5 {1.21/21 1} 77. Bc3 {1.52/19 0} Bd7 {1.21/ 21 1} 78. Bd4 {1.52/19 0 (Be5)} Bb5 {1.21/22 1} 79. Ba1 {1.52/19 1 (Bb2)} Bd7 { 1.21/22 1} 80. Bc3 {1.51/18 0 (Be5)} Be8 {1.21/22 1 (Bb5)} 81. Bg7 {1.51/19 2 (Bb2)} Bb5 {1.21/23 2 (Bd7)} 82. Bh6 {1.51/20 2 (Bb2)} Bd7 {1.21/19 1} 83. Bg5 {1.51/19 0 (Kb6)} Be8 {1.21/21 1 (Bb5)} 84. Bf4 {1.51/19 2} Bd7 {1.21/21 1} 85. Be5 {1.51/19 1 (Bh6)} Bb5 {1.21/21 2} 86. Bf6 {1.51/19 1 (Bg7)} Bd7 {1.21/18 1} 87. Bb2 {1.16/19 5 (Kb6)} Be8 {1.21/18 1} 88. Ba3 {1.16/19 2 (Kd8)} Bd7 {1.21/ 21 1 (Bb5)} 89. Bc1 {1.16/19 1} Bb5 {1.21/22 0 (Ba4)} 90. Bd2 {1.16/20 2 (Bb2)} Be8 {1.02/20 1} 91. Kb6 {1.16/19 1} Bb5 {1.02/18 0} 92. Kc5 {1.16/18 0} Kd7 { 1.12/21 1} 93. Bc3 {1.16/19 0} Ke6 {1.21/21 2 (Bc6)} 94. Bh8 {1.16/20 1 (Bd4)} g5 {1.21/18 2 (Kd7)} 95. Bb2 {1.24/20 1 (Bc3)} Ba4 {1.21/19 1 (g4)} 96. Bg7 { 1.24/19 1} Bb5 {1.30/18 1} 97. Bh6 {1.37/21 2 (Bf8)} g4 {1.30/19 1} 98. Bf4 { 1.31/21 2} Be8 {1.30/21 1 (Kd7)} 99. Kb6 {1.59/19 1} Bb5 {1.30/19 0} 100. Kc7 { 1.59/21 1} Bd7 {1.30/21 1 (Be8)} 101. Be5 {1.59/21 1 (Bg5)} Be8 {1.30/17 1} 102. Bd4 {1.59/20 0 (Ba1)} Bb5 {1.30/20 1} 103. Bb2 {1.59/20 1 (Bc3)} Be8 {1. 30/20 1 (Bd7)} 104. Ba1 {1.59/20 1 (Bg7)} Bd7 {1.30/20 1 (Bb5)} 105. Bg7 {1.59/ 21 1 (Bc3)} Bb5 {1.30/21 1} 106. Bc3 {1.59/21 1 (Bd4)} Bd7 {1.30/21 1} 107. Bf6 {1.59/21 1 (Ba1)} Bb5 {1.30/20 1} 108. Bd4 {1.59/21 1 (Bd8)} Be8 {1.30/20 1 (Bd7)} 109. Kd8 {1.59/21 3 (Bh8)} Bb5 {1.00/17 3 (Bd7)} 110. Bc5 {1.59/21 0 (Be5)} Bd7 {0.97/20 1 (Bc4)} 111. Kc7 {1.59/21 0} Bb5 {1.07/20 2} 112. Kc8 {1. 59/21 1 (Ba7)} Bc6 {0.76/20 1 (Be8)} 113. b5 {0.79/19 1} Bxb5 {0.76/21 1} 114. Kc7 {0.79/20 0} Bd7 {0.76/22 1} 115. Bd4 {0.79/20 0} Bb5 {0.76/23 1} 116. Bc3 { 0.79/21 1 (Bg7)} Bd7 {0.76/22 1} 117. Ba1 {0.79/21 1 (Bg7)} Ba4 {0.76/23 1 (Bb5)} 118. Bb2 {0.79/21 0} Bb5 {0.76/23 1} 119. Bh8 {0.79/21 0 (Bd4)} Bd7 {0. 76/23 1} 120. Bf6 {0.79/22 1 (Bc3)} Bb5 {0.76/22 1} 121. Bb2 {0.79/22 1 (Bd4)} Bd7 {0.76/22 1} 122. Bh8 {0.79/22 0 (Bc3)} Ba4 {0.76/22 1 (Bb5)} 123. Ba1 {0. 79/22 1} Bd7 {0.76/24 2 (Bb5)} 124. Be5 {0.79/22 1 (Bc3)} Ba4 {0.76/22 1 (Bb5)} 125. Bg7 {0.79/22 1} Bd7 {0.76/23 1 (Be8)} 126. Bc3 {0.79/23 3} Bb5 {0.76/23 1} 127. Be1 {0.79/22 1 (Bb4)} Bd7 {0.76/24 1} 128. Bb4 {0.79/22 0 (Bd2)} Bb5 {0. 76/22 1} 129. Kc8 {0.79/22 1} Bd7+ {0.76/22 1 (Bc6)} 130. Kd8 {0.79/23 1 (Kb7)} Bb5 {0.76/23 1 (Ba4)} 131. Kc7 {0.79/23 1 (Ba3)} Bd7 {0.76/23 1} 132. Bc5 {0. 79/23 1 (Be1)} Bb5 {0.76/24 2} 133. Ba3 {0.79/22 1} Bd7 {0.76/23 2 (Ba4)} 134. Kd8 {0.79/22 0 (Bc1)} Bb5 {0.48/21 1} 135. Bb4 {0.79/23 2 (Kc8)} Bd7 {0.09/20 1 } 136. Bc5 {0.79/21 0} Ba4 {0.09/18 0 (Bc6)} 137. e4 {0.10/22 1} fxe4 {0.09/17 0} 138. Kc7 {0.10/22 0} Bb5 {0.06/22 1} 139. Be3 {0.10/22 1 (Bd4)} Be8 {0.06/ 23 1 (Bd7)} 140. Bf4 {0.10/23 1 (Ba7)} Bd7 {0.06/22 1 (Bb5)} 141. Bc1 {0.10/23 1 (Kb6)} Be8 {0.06/22 1 (Bb5)} 142. Bd2 {0.10/23 1} Bd7 {0.06/24 1} 143. Bf4 { 0.10/23 1 Согласился на ни~~ьo^} 1/2-1/2 В общем, с оценкой движками ничейных позиций далеко не идеально. Примеров позиций, где оценка неправильна, уйма.

immortal223: Кевин Юзай тэг [ chess] - третья кнопочка справа в нижнем ряду - устал уже за тобой исправлять, так визуально приятно и сразу видна позиция

Кевин: immortal223 , Обычно просто для экономии трафика отключаю картинки и, конечно, не вижу доску с фигурами.

immortal223: Кевин пишет: Вот ещё один пример мозгомучительной позиции: [chess]8/2b3k1/6r1/5K2/2B5/2p5/2N5/8 w - - 0[/chess] 8/2b3k1/6r1/5K2/2B5/2p5/2N5/8 w - - 0 159 7-фигурка тоже бы не помешала. В этой позиции у меня жевали сопли оба движка пока я не плюнул и не присудил им ничью. А оценки были у Рыбы -3 у Игоря вообще -4

PozitiFF_Chess: Кевин пишет: Обычно просто для экономии трафика отключаю картинки И почем нынче траффик в 5 килобайт в США? )))

Кевин: PozitiFF_Chess пишет: И почем нынче траффик в 5 килобайт в США? ))) Ну, скажем, не 5 килобайт, а поболее, и не в США. Да и тариф у меня 700 метров в месяц, а за превышение - рубля полтора за метр. Но это уже оффтоп

WildCat: Кевин Откуда: USA, Racoon City

Кевин: WildCat пишет: Откуда: USA, Racoon City Ну, так это ж шутка! Или я - полицейский офицер, работающий в RPD и хотящий поступить в S.T.A.R.S и сбежавший из города зомби - Раккун Сити?

PozitiFF_Chess: До меня только сейчас дошло, что это шутка..

unknow: PozitiFF_Chess пишет: Ну играют черные Кж5 и Ке4+ своими двумя нулевыми ходами... Какую дельту ставить? ) 6rk/4q2n/p1p1p1pP/PpPpPpP1/1P1P1P2/3N2K1/3Q4/7R b - - 0 60 Здесь черные слабейшая сторона - это они пропускают ходы и дают белым время на разрушение крепости - если у белых получилось - крепости нет.

Кевин: [chess]8/6k1/8/6KP/5p2/5B2/7P/8 b - - 0 56[/chess] 8/6k1/8/6KP/5p2/5B2/7P/8 b - - 0 56 Как вам такая позиция: Рыбка с пятифгурками (!!) даёт тут +7 оценку, Игорёк же всё правильно оценивал. Стандартная ничья при слоне не цвета превращения. Вот сама партия: [Event "Capitalists vs Rajlich 4!, Блиц:3'"] [Site "USER-GZ7TNXNACM"] [Date "2010.01.11"] [Round "1"] [White "Rybka 3"] [Black "Igorrit MP verzione 0.086v6 x"] [Result "1/2-1/2"] [ECO "B33"] [Annotator "0.35;0.32"] [PlyCount "136"] [TimeControl "180"] {} 1. e4 {B 0} c5 {B 0} 2. Nf3 {B 0} Nc6 {B 0} 3. d4 {B 0} cxd4 {B 0} 4. Nxd4 {B 0} Nf6 {B 0} 5. Nc3 {B 0} e5 {B 0} 6. Ndb5 {B 0} d6 {B 0} 7. Bg5 {B 0} a6 {B 0} 8. Na3 {B 0} b5 {B 0} 9. Bxf6 {B 0} gxf6 {B 0} 10. Nd5 {B 0} f5 {B 0} 11. Bd3 {B 0} Be6 {B 0} 12. O-O {B 0} Bxd5 {B 0} 13. exd5 {B 0} Ne7 {B 0 Оба Последний ход в книге} 14. Nxb5 {0.35/13 3} Bg7 {0.32/19 5} 15. Nc3 {0.47/14 2} e4 {0.28/19 4} 16. Be2 {0.41/14 2 (Bc4)} Qa5 {0.32/17 3} 17. Rb1 {0.41/13 1 (Qd2)} Bxc3 {0.16/ 17 8} 18. bxc3 {0.39/14 6} Qxc3 {0.20/19 23} 19. Rb7 {0.41/14 6} Rg8 {0.20/18 14} 20. g3 {0.41/13 24 (Rb3)} Kf8 {0.08/16 5 (Rg7)} 21. Qc1 {0.26/11 2} Rg6 { 0.04/15 1} 22. Rd1 {0.52/12 3} Rc8 {0.09/16 3 (h6)} 23. Bxa6 {0.54/13 5} Rc5 { 0.23/17 2} 24. Rb5 {0.61/13 2} h5 {0.16/17 1} 25. Rxc5 {0.49/13 3} Qxc5 {0.16/ 15 0} 26. c4 {0.52/14 10} h4 {0.19/17 3} 27. Kf1 {0.52/14 16} Qa7 {0.32/17 4 (h:g3)} 28. Bb5 {0.77/12 2} Qxa2 {0.67/17 7 (h:g3)} 29. Qa1 {0.85/13 1} Qxa1 { 0.67/15 0} 30. Rxa1 {0.85/12 0} Ng8 {0.80/18 5} 31. gxh4 {0.87/13 1} Rh6 {0.96/ 18 2 (f4)} 32. Ra8+ {1.08/14 2} Kg7 {0.96/16 0} 33. Rd8 {1.00/14 1} f4 {1.32/ 20 12} 34. c5 {1.00/14 1} dxc5 {1.32/19 0} 35. d6 {1.26/15 5} Nf6 {1.32/21 3 (f3)} 36. Re8 {1.42/14 4 (d7)} f3 {0.59/18 3} 37. Ke1 {1.42/14 1} c4 {0.64/17 1 (N:e8)} 38. d7 {1.53/14 1 (h3)} Nxd7 {0.47/18 1} 39. Bxd7 {1.53/15 11} Rb6 { 0.47/17 0} 40. Bf5 {1.53/12 0 (R:e4)} Rb1+ {0.39/15 1 (c3)} 41. Kd2 {1.84/11 0} Rb2+ {0.39/14 0} 42. Ke3 {1.98/13 1 (Kc3)} Re2+ {0.40/17 1} 43. Kf4 {2.10/14 1 (Kd4)} Rxf2 {0.36/14 0} 44. Rxe4 {2.10/12 0} Re2 {0.34/17 0 (R:h2)} 45. Kxf3 { 3.86/13 1 (R:c4)} Rxe4 {0.05/19 2 (R:h2)} 46. Kxe4 {4.44/14 2 (B:e4)} c3 {0.05/ 19 0 (Kh6)} 47. Kd3 {5.14/14 2} c2 {0.05/20 1 (Kf6)} 48. Kxc2 {5.29/14 1} Kf6 { 0.05/21 0} 49. Be4 {5.38/13 1} Kg7 {0.05/21 1} 50. Kd3 {5.33/13 2 (Bg2)} f5 { 0.05/20 4 (Kh8)} 51. Bf3 {6.11/11 1 (Bg2)} Kh7 {0.05/20 2 (Kf6)} 52. Ke3 {6.76/ 12 1 (Ke2)} f4+ {0.05/24 1 (Kg6)} 53. Ke4 {6.93/13 1 (Kd4)} Kg6 {0.05/24 1} 54. h5+ {6.93/12 1 (Kd4)} Kh7 {0.05/23 1 (Kg7)} 55. Kf5 {7.08/13 1 (Kd5)} Kg7 {0. 05/22 1 (Kh6)} 56. Kg5 {7.08/12 1 (h6+)} Kh8 {0.05/22 1} 57. Kg6 {7.07/12 2 (Kh6)} Kg8 {0.05/22 1} 58. h6 {6.95/11 1} Kh8 {0.05/21 0} 59. h3 {6.89/12 1 (Kf5)} Kg8 {0.05/23 1} 60. Bc6 {7.08/9 1} f3 {0.05/23 0 (Kh8)} 61. Bd5+ {7.01/ 10 3 (Bb5)} Kh8 {0.05/25 1} 62. Bc4 {6.98/12 1 (B:f3)} f2 {0.05/26 0} 63. h4 { 7.00/12 1 (Bd3)} f1=Q {0.05/26 0} 64. Bxf1 {0.00/29 0} Kg8 {0.00/0 0} 65. Kh5 { 0.00/0 0} Kh8 {0.00/0 0} 66. Bh3 {0.00/0 0} Kg8 {0.00/0 0} 67. Bg2 {0.00/0 0} Kh7 {0.00/0 0} 68. Bd5 {0.00/0 0} Kh8 {0.00/0 0 Согласился на ни~~ьo^} 1/2-1/2 Была у меня такая позиция, где Рыбка (правда, без таблиц) давала больше десяти баллов. Если не забуду - поищу как-нибудь.

PozitiFF_Chess: unknow пишет: Здесь черные слабейшая сторона - это они пропускают ходы и дают белым время на разрушение крепости - если у белых получилось - крепости нет. Почему не получится, когда целых два хода можно делать? Достаточно забрать любую черную пешку и отпрыгнуть фигурой обратно - будет выиграно. А если ваш алгоритм не учитывает взятия, то тогда сложно представить в каком случае он будет полезен.. Тут действительно простая ничейная стойка.

WildCat: Кевин Была у меня такая позиция, где Рыбка (правда, без таблиц) давала больше десяти баллов. [chess]7k/8/8/8/2B5/1B1B4/B1B1B2P/KB1B1B2 b[/chess] 7k/8/8/8/2B5/1B1B4/B1B1B2P/KB1B1B2 b - - Рыбка почти +12 дает.

immortal223: WildCat пишет: Рыбка почти +12 дает. Шреддера ей не переплюнуть. +37 Кто больше? Хиаркс - позорник, небольшой перевес чёрным даёт -0.07 Самый умный - вяленый 1.5.1 - тот вообще с ошибкой вылетел сразу, чтоб не позориться очевидно потому что в начале +115 пытался давать

WildCat: [chess]QQQRRBn1/PPPPP1P1/8/8/3K1k2/8/8/8 w[/chess] QQQRRBn1/PPPPP1P1/8/8/3K1k2/8/8/8 w - - Рыбка выдала +53.56 и от стыда упала (в обморок). Робка нагло дает +56.20 и не падает.

Ramzes II: WildCat пишет: QQQRRBn1/PPPPP1P1/8/8/3K1k2/8/8/8 w - - Рыбка выдала +53.56 и от стыда упала (в обморок). Робка нагло дает +56.20 и не падает. У меня в этой позиции вот такой бред выдает...

WildCat: Хиаркс вообще пригрозил, что белым мат в 513 ходов и анализировать такую фигню отказался. Глаурунг 2.2 на 21 глубине выдал 0.00 !!! До этого было +67. Стокфиш 1.6s: +68, только на глубине 41 оценка начала падать.

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

PozitiFF_Chess: unknow пишет: Как вариант - при соскоке уйти на форсированный вариант чтобы рассчитать их до конца. Другой соскок - продолжить на текущей глубине ограничив себя на этом полуходе - без простых перемещений, только взятия и шахи. Понятно. Просто я не сразу понял, что значит "прерывание"... Теперь я не понял, что такое "соскок" , но в принципе не так важно. Идея ясна. А как часто эту функцию вызывать? Насколько это замедлит работу движка?

unknow: PozitiFF_Chess пишет: А как часто эту функцию вызывать? Насколько это замедлит работу движка? По идее наоборот должен увеличить - это ведь сокращение. Одинарный нулевой вызовается в cut-node если текущая оценка >= beta и если она подтверждается, то ветка подсекается с возвратом оценки наверх. Двойной же для определения крепости предлагаю вызывать так же до рассмотрения своих ходов, но когда оценка меньше beta на дельту и если возврат получается лучше, то подсекать. А возвращенная оценка будет лучше, ведь если пробник отработал до конца, то вернется половинный минус, или противник полезет на взятия в настоящей крепости, тогда вообще улучшение. Условия для вызова могут влючать блокирование всех пешек, это даже обязательно, и еще что-нибудь для материала - типа осталось всего половина от всех фигур, еще открытых вертикалей не больше одной. Как оно вообще может работать пока неизвестно. Побольше про двойной нулевой вообще, но для другой цели есть: http://www.stmintz.com/ccc/index.php?id=179604

PozitiFF_Chess: unknow пишет: По идее наоборот должен увеличить - это ведь сокращение Ну... Крепости встречаются в практической партии так редко, что вряд ли увеличит. unknow пишет: Условия для вызова могут влючать блокирование всех пешек, это даже обязательно, и еще что-нибудь для материала - типа осталось всего половина от всех фигур, еще открытых вертикалей не больше одной Ну это ведь тоже надо проверять.. Опять же - потеря времени. Мне кажется, что для игровой программы эта фишка лишняя. Вот другое дело - для аналитического движка. Можно даже опционально в настройках поставить "крепость". Если ВКЛ - то программа будет вызывать эту функцию, если ВЫКЛ, то игнорировать.

Кевин: WildCat пишет: 7k/8/8/8/2B5/1B1B4/B1B1B2P/KB1B1B2 b - - Рыбка почти +12 дает. И все другие приведённые позиции - известные по типу позиции, в которых движки абсолютно тупят. А я говорил о другой: об одном пешечнике (4 их, вроде, на доске), где Рыбка абсолютно неправильно оценивает без таблиц.

unknow: PozitiFF_Chess пишет: Ну это ведь тоже надо проверять.. Опять же - потеря времени. Это всегда уже вычислено. В кеше пешечной структуры и в кеше материала. Крепости встречаются в практической партии так редко, что вряд ли увеличит Глобально для движка конечно нет. Но для данного класса позиций наверняка. И потом практичекая итоговая партия и то что там внутри считает движок - большая разница. Он стольно барахла перелопачивает, и лучше ему немножко помочь в определенных позициях.

PozitiFF_Chess: unknow пишет: Это всегда уже вычислено. В кеше пешечной структуры и в кеше материала. Ааа. Ну если только так... Далек я от шахматного программирования, конечно :) Но ведь неспроста сильнейшие движки не понимают, что такое "крепость". Значит-таки все это скорее минус, чем плюс. Или я не прав?

unknow: PozitiFF_Chess пишет: Но ведь неспроста сильнейшие движки не понимают, что такое "крепость". Значит-таки все это скорее минус, чем плюс. Минус - то что они крепость не понимают? Непонятно про минус. Эволюция движков все-таки существует. Не этот, так другой прунинг наконец поможет движку правильно обсчитать крепость.

Кевин: [chess]8/2K5/1p6/1P4k1/5p2/8/6P1/8 w - - 0 1[/chess] 8/2K5/1p6/1P4k1/5p2/8/6P1/8 w - - 0 1 А вот и позиция, о которой я говорил. Правда, тут Рыбка даёт всего 7 баллов, а мне казалось, что больше десяти... Однако в текущем анализе Рыбка уверенно показывает больше тридцати баллов и никак не может переубедиться в этом (видимо, потому мне и думалось, что тут оценка очень высока). Вообще тут не совсем подходит понятие, что Рыбка неправильно оценивает ничью: она наоборот идёт на ничью и даёт слишком высокую оценку варианту, в то время как есть выигрышный путь, который она не видит. Причём идёт Рыбка на заведомо ничейную позицию после взятия пешки в этом этюде. Вот он сам и правильное решение: [Event "?"] [Site "?"] [Date "1926.??.??"] [Round "?"] [White "Dedrle, F."] [Black "?"] [Result "1-0"] [SetUp "1"] [FEN "8/2K5/1p6/1P4k1/5p2/8/6P1/8 w - - 0 1"] [PlyCount "13"] [EventDate "1926.??.??"] 1. Kc6 $3 (1. Kxb6 $2 Kg4 2. Kc6 Kg3 3. b6 Kxg2 4. b7 f3 5. b8=Q f2 $11) (1. Kd7 $2 Kf5 $1 2. Kc7 Ke4 3. Kxb6 Ke3 4. Kc5 Kf2 5. b6 Kxg2 6. b7 f3 7. b8=Q f2 $11) 1... Kg4 2. Kd6 Kg3 3. Ke5 Kg4 4. Kf6 Kh4 5. Kf5 Kg3 6. Kg5 Kxg2 7. Kxf4 1-0

Behovodec: *PRIVAT*

WildCat: Кевин А вот и позиция, о которой я говорил. Это классический пример зачем нужны эндшпильные базы. Причем здесь достаточно 4-ки.

Кевин: WildCat пишет: Это классический пример зачем нужны эндшпильные базы. Причем здесь достаточно 4-ки. А я и не спорю, потому и говорил, что без Налимова анализ проводился. Просто интересно, как движки не могут найти выигрыш в такой позиции, где настолько мало фигур. Как-нибудь если не забуду, то прогоню эту позицию другими движками без таблиц.

NS: Человек без баз (если в школе не рассказали как) за доской не матует конем и слоном - куча гроссовских примеров. Не знаю как последние версиии, а вообще Хиаркс матует двумя конями против пешки без баз (есно не в ничейных позициях).

Behovodec: Но Рыбка даже с пятифигурками не находит правильный ход, а СмартСинк — сразу и без таблиц.

Кевин: NS пишет: Не знаю как последние версиии, а вообще Хиаркс матует двумя конями против пешки без баз (есно не в ничейных позициях). Очень интересно! Рыбка-то у меня не матовала! Интересно, как можно научить другие движки матовать двумя конями против пешки.

NS: Задав правила матования в человеческом виде, а не в виде полных таблиц. Их всего три... 1. Таблица углов в которых матуется при заданном положении пешки. 2. Король может быть перегнан только в противоположный угол, но не в соседний. 3. Когда загнали в матуемый угол можно отпускать пешку. Ну и сделать грамотные PST чтоб умел загонять в угол и перегонять в противоположный.

Behovodec: Похоже, я ошибался, SmarThink без таблиц тоже считает лучшим К:b6. Зато нашёлся другой движок под названием ELGINDY, который отыскал ход Кc6. Analysis by ELGINDY: 1.Kc6 Kg4 2.Kd6 Kf5 3.Kd5 Kf6 4.Ke4 Kg5 5.Ke5 Kg4 6.Kf6 Kg3 7.Kf5 f3 8.gxf3 Kxf3 9.Ke5 Ke3 10.Kd6 Ke2 11.Kc6 Kf2 12.Kxb6 Kf3 13.Ka7 Kg3 14.Ka8 Kh4 15.b6 +- (7.90) 15 00:00:06 3327тП Движок установился вместе со сборкой Фрица 10 от Эссама Эль Гинди. Кто-нибудь знает, что это за программа? Чей-то клон или самостоятельная разработка? Скачать движок можно отсюда: http://slil.ru/28484525

WildCat: Не нашел ни одного движка, который понимал бы эту позу: [chess]8/8/2b1P2B/8/p4K2/P7/4k3/8 w[/chess]

unknow: WildCat пишет: Не нашел ни одного движка, который понимал бы эту позу: 8/8/2b1P2B/8/p4K2/P7/4k3/8 w На днях ковырял мозги по поводу позиции из той же оперы: 8/6k1/8/6KP/5p2/5B2/7P/8 b - - 0 56 Вообщем казалось бы есть накодированный пробник для позиций типа: 8/6kP/8/5BK1/8/7P/8/8 w - - 5 67 [pre2] static bool probe_KBP8k(int *score) { int bk_sq = board.king_sq[black]; int wb_sq = rbit2sq(board.items[wbishop]); int wp_sq = lbit2sq(board.items[wpawn]); // дальняя пешка со стороны белых if (sq_file(wp_sq) % file_h || (~geo_line[wp_sq][path_vert] & board.items[wpawn])) return false; // все пешки на крайней вертикали if (sq_color(sq_make(sq_file(wp_sq), rank_8)) == sq_color(wb_sq)) return false; // поле превращения не цвета слона if (geo_dist[bk_sq][wp_sq] == 1 && sq_rank(bk_sq) == sq_rank(wp_sq)) return *score = 0, true; // король сбоку пешки if (bit_test(geo_pawn_road[white][wp_sq], bk_sq)) return *score = 0, true; // король перед пешкой return false; } [/pre2] Однако движок не хочет забирать черную пешку в первой позиции - тут ему понятно, что ничья по пробнику. Варианты так и крутятся с большим минусом для черных. Ничего другого не придумал кроме как придумывать эвристику по присуждению - когда у слабейшей стороны снимается пешка и проверяется пробником, но ведь пешка может быть самоходной проходной - тут еще надо придумывать всякие другие проверки и т.д. и т.п. Вообщем, похоже, чтобы движки стали что-то понимать, надо ждать выхода 32-фигурных таблиц :)

Кевин: [chess]r5k1/7p/6p1/6P1/7P/5PK1/PR6/8 b - - 0 42[/chess] r5k1/7p/6p1/6P1/7P/5PK1/PR6/8 b - - 0 42 Ещё одна позиция, где у белых две пешки лишних, однако ничья проглядывается невооружённым глазом. И Рыбка даже с таблица Налимова (пятифигурки) даёт примерно полтора балла.

PozitiFF_Chess: Кевин пишет: Ещё одна позиция, где у белых две пешки лишних, однако ничья проглядывается невооружённым глазом Тут вряд ли ничья..

Gata: у меня в опере на диаграмме ладьи не прорисовались. Долго думал - какая тут ничья?

Кевин: PozitiFF_Chess пишет: Тут вряд ли ничья.. И как же белым выиграть? Могу, кстати, привести окончание партии движков.

PozitiFF_Chess: Кевин пишет: И как же белым выиграть? Могу, кстати, привести окончание партии движков. Проблем не видно. Ладья уходит на f2, двигается f4, король по первой горизонтали идет на b2... Дальше просто.

Кевин: А вот как разыграли позицию Рыбки, давая одну и ту же оценку: ... Kf7 43. Rh2 Ra4 44. Re2 Kg7 45. Rb2 Ra7 46. Kg4 Ra3 47. Rd2 Ra4+ 48. Kg3 Kf7 49. Rc2 Kg7 50. Kh3 Ra3 51. Kg2 Ra4 52. Kg3 Ra3 53. Rh2 h6 54. Rb2 hxg5 55. hxg5 Kf7 56. Re2 Ra4 57. f4 Ra3+ 58. Kg4 Ra4 59. Rf2 Ra3 60. Rb2 Kg7 61. Re2 Kf7 62. Rd2 Kg7 63. Rb2 Kf7 64. Rh2 Kg7 65. Rd2 Kf7 66. Rf2 Ra4 67. Rb2 Ra3 68. Rg2 Kg7 69. Rc2 Kf7 70. Kh4 Ra7 71. Kg3 Ra3+ 72. Kg4 Ra4 73. Re2 Ra3 74. Kh4 Ra4 75. Kg4 Ra3 1/2-1/2 Как понимать? Тупость движков?

PozitiFF_Chess: Кевин пишет: Как понимать? Тупость движков? А это можно понимать как-то по другому? :) Единственный план - в активизации белого короля. Победу по очкам никто в шахматах не присуждает :) .. На самом деле выигрывает тупой перевод короля через f4 на ферзевый фланг. Пешкой h придется при этом пожертвовать. Это наверное движок и смущает :)

vitamix: В позиции Кевина 1...Ra4! железно делает ничью, имхо. Дорога в центр перекрыта, по первой горизонтрали королю не пройти, т.к. черные размениваются на g5, цепляются ладьей к пешке f4 и постоянно угрожают переводом короля на f5.

PozitiFF_Chess: vitamix пишет: В позиции Кевина 1...Ra4! железно делает ничью, имхо. Дорога в центр перекрыта, по первой горизонтрали королю не пройти, т.к. черные размениваются на g5, цепляются ладьей к пешке f4 и постоянно угрожают переводом короля на f5. Ну хорошо, по первой горизонтали слишком тонко. Но можно идти и по третьей. 2.f4 - и дальше через f3 топаем к пешке а... Теперь черный король не может покинуть пешку h7 (энд три против одной должен быть выигран), поэтому идем спокойненько королем на ферзевый, ничего не боясь... Черным только искать соскок. О железобетонной ничьей речи нет.

vitamix: PozitiFF_Chess пишет: Ну хорошо, по первой горизонтали слишком тонко. Но можно идти и по третьей. 2.f4 - и дальше через f3 топаем к пешке а... Как только пешка становится на f4, я сразу занимаю ладьей третью горизонталь: 1... Ra4 2. Rf2 Kg7 3. f4 Ra3+ Дальше как обычно: h6, hg, Kf7-e6-f5.

PozitiFF_Chess: vitamix пишет: Как только пешка становится на f4, я сразу занимаю ладьей третью горизонталь: 1... Ra4 2. Rf2 Kg7 3. f4 Ra3+ Дальше как обычно: h6, hg, Kf7-e6-f5. Да, верно. Но черным надо кроме того как съесть пешку g еще и успеть остановить пешку а, которая изо всех сил будет бежать в ферзи... Мало того - за нее скорее всего придется отдать ладью (это если получится) и искать по базам ничью в эндшпиле "пешка против ладьи". Если все сложится идеально, то черные сделают ничью... Но начали-то мы с того, что она видна "невооруженным глазам". Здесь, имхо, Кевин перегнул

PozitiFF_Chess: Кстати, после шаха с а3 есть еще сильная идея - Крж4, и дальше h5... Это так к слову, что белые еще могут перебирать планами.

Кевин: PozitiFF_Chess пишет: Но начали-то мы с того, что она видна "невооруженным глазам". Здесь, имхо, Кевин перегнул Очень уж мне интересно было, как отрегагируют все: я подумал, будет ли кто-то, кто по оценке увидит, так сказать, "невооружённым глазом", что она повторяется, или задумается сам и предложит что-то своё, планы, идеи. Вижу, что предложили и это радует

PozitiFF_Chess: Кевин, прям совсем нас не уважаешь

Кевин: PozitiFF_Chess пишет: Кевин, прям совсем нас не уважаешь Не, я весь форум уважаю Но просто есть люди, которые ориентируются, в основном, на оценку движка. И когда я сказал о ничьей, кстати, то мне самому в то время и правда казалось, что белым не выиграть, да и сейчас не вижу чёткого стопроцентного пути к победе. А позиция, приведённая мной, не так уж и проста, как уже заметили. Всё же чёрным туговато, но и белым надо постараться. Неизвестно ещё, выиграют ли.

WildCat: Кевин А позиция, приведённая мной, не так уж и проста, как уже заметили. Это нормально, если движки оценивают непростые позиции по-своему. Беда, когда движки дают большой плюс в очевидно ничейных окончаниях.

PozitiFF_Chess: Все-таки более, чем в 90% случаев на оценку движка можно положиться. Особенно, если эта оценка на достаточной глубине. Но 10% все равно остается, и это немаленький процент.

Кевин: [chess]r7/2k3P1/2Pp4/1K1Pb3/1P6/8/7p/7R w - - 0 66[/chess] r7/2k3P1/2Pp4/1K1Pb3/1P6/8/7p/7R w - - 0 66 Окончание партии: 66. Rf1 {0} Bxg7 {-3.89/21 1} 67. Rf7+ {4} Kd8 {-4.29/21 1} 68. Rxg7 {1 (Rf7-d7+)} h1=Q {-3.89/19 0} 69. Rg8+ {4} Ke7 {-4.29/20 1} 70. Rxa8 {3} Qxd5+ {-4.50/21 0} 71. Kb6 {3} Qd4+ {-4.50/21 1} 72. Kc7 {0} Qxb4 {-4.70/ 20 5} 73. Rb8 {0} Qa5+ {-4.68/19 1} 74. Kb7 {1} Qb5+ {-4.68/21 0} 75. Kc7 {0} Qa6 {-4.88/21 4} 76. Rb6 {0} Qc4 {-5.08/20 3} 77. Kc8 {0} d5 {-5.08/20 0} 78. c7 {1} d4 {-5.08/20 0} 79. Rh6 {0} Qb5 {-5.08/19 0} 80. Rh7+ {2} Kf8 {-5.08/22 0} 81. Rh8+ {0} Kf7 {-5.08/20 1} 82. Rh7+ {0} Kg6 {-5.08/20 0} 83. Re7 {0} d3 { -5.08/19 1} 84. Re6+ {0} Kf7 {-5.09/19 1} 85. Re7+ {0} Kf6 {-5.09/19 0} 86. Rd7 {3} Ke6 {-5.09/20 0} 87. Rh7 {2} d2 {-5.09/18 0} 88. Rh6+ {0} Ke7 {-5.09/18 2} 89. Rh7+ {1} Ke8 {-5.09/18 1} 90. Rh8+ {0} Kf7 {-5.09/18 1} 91. Rd8 {0} Qb4 { -5.09/18 0} 92. Rxd2 {0 (Rd8-d5)} Qxd2 {0.00/59 0} 93. Kb7 {0} Qb4+ {0.00/59 0} 94. Ka6 {0 (Kb7-a7)} Qg4 {0.00/59 0} 95. Kb7 {0} Qe4+ {0.00/59 0} 96. Kb8 {0} Qe5 {0.00/59 0 1/2-1/2 Вот эта позиция: как оцените? Очевидно, что белым не спастись. Обратите внимание на оценки. 79...Фб5?? И белые спасаются вечным шахом. Правильно 79...д3!. 83. Ле7?? Опть же 79... д3! и выигрыш. 89-ый ход - Кре8? Опять грубая ошибка и тут уже ничья. Вот что значит, что Рыбка не использовала таблицы Налимова. Правильно 89. Крф6! И Фриц 10 показывает мат в 34. Никак не понимает без таблиц Рыбка, что ферзь в такой позиции против пешки, готовой стать ферзм, не выигрывает. Нельзя движок научить понимать такие позиции? Только с Налимовым?

NS: Оценка ферзь против пешки легко пишется програмно, но зачем тратить на это время? Никто такое писать не будет. Качайте Налимова.

Кевин: NS пишет: Качайте Налимова. Кстати: в той партии Налимов у белых был. Именно, что был, но почему тогда их Рыбка ошибалась так, словно его не было? Были ли таблицы у чёрных - не знаю.

NS: В Рыбке3 есть "небольшой" глюк в работе с Налимовым. Точнее - очень большой глюк.

Кевин: NS пишет: В Рыбке3 есть "небольшой" глюк в работе с Налимовым. Точнее - очень большой глюк. Про глюк с PH знаю, а с таблицами-то что?

immortal223: Кевин Именно при работе с таблицами и глюк. Только у МП-версии. 1-ядерная такого глюка не имеет.



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