Это форум для общения шахматистов и размещения информации, имеющей отношение к шахматам в Воронежской области
Фестиваль "Имени Петра Великого" (Воронеж, июнь 2024)
Предварительная регистрация
Жеребьевки, результаты, списки заявок
Трансляция партий Классика Рапид Блиц
Этап ДКР (Воронеж, май 2024)
Жеребьевки и результаты

Фестиваль Петровский (Воронеж, июнь 2023) Telegram-канал Группа ВКонтакте
Этап Детского Кубка России 7-12 июня Результаты Трансляции Регламент
Этап Рапид Гран-При России 13-14 июня Результаты Трансляции Регламент
Этап Блиц Гран-При России 15 июня Результаты Трансляции Регламент
Этап Кубка России 16-24 июня Результаты Трансляции Регламент
Турнир Б 10-14 ноября Жеребьевки и результаты Положение Актуальная информация
Парус надежды 16-22 июня Результаты Положение
Блицтурнир 12 июня Результаты
Судейский семинар Список участников Регистрация
Фестиваль Петровский (Воронеж, июнь 2022) Анонс на сайте ФШР Telegram-канал Группа ВКонтакте
Форма для регистрации Жеребьевки и результаты Турнир A (10-17 июня) Быстрые шахматы (18 июня) Блицтурнир (19 июня) Турнир B (20-26 июня)
Апрельский Воронеж Универсиада Первенство ОШК Турнир Эло до 2000
Финал чемпионата Воронежской области-2021 Второй дивизион Ветераны Быстрые шахматы Блиц
Юниорские первенства области-2021 Классика Рапид Блиц
Первенство областного шахматного клуба Высшая лига Первая лига
V летняя Спартакиада молодёжи, II этап (ЦФО) 18-23 Первенство Воронежа среди школьников Воронежский областной этап Белой Ладьи-2021
Чемпионат области среди женщин Чемпионат области среди ветеранов Чемпионат области по блицу первая лига высшая лига Мемориал Загоровского быстрые шахматы блиц Чемпионат области по шахматам Чемпионат области по быстрым шахматам высшая лига первая лига
Воронежская шахматная команда (с подтверждёнными никами) на lichess Проект Патиум (PostOrion) ВКонтакте
Воронежский онлайн-турнир в честь начала весны Турнир Voronezh Chess Team на lichess к Международному дню шахмат Онлайн-чемпионат Европы на chess.com Полная информация

Шахматные новости: Telegram-канал о шахматах в Воронежской области Группа ВКонтакте "Воронежский областной шахматный клуб" Спорт-Игрок РИА Воронеж ЦСП СК ВО Борисоглебский шахматный клуб Шахматы в Россоши Шахматы. Новая Усмань Клуб "Дебют" СОШ №101 Клуб "Эндшпиль" Лицея №4 Нововоронежский ДДТ Труд-Черноземье
Шахматные организации: FIDE ФШР МШФ ЦФО Областной шахматный клуб СШОР №13 ICCF РАЗШ: форум сайт
Шахсекция ВКонтакте "Воронеж шахматный" на БВФ Воронежский исторический форум Cтарый форум (только чтение) Старый сайт областной ШФ Старый сайт Воронежского фестиваля
Воронежская область в базе соревнований РШФ: Турниры Шахматисты
Соседи: Липецк Елец Белгород Алексеевка Урюпинск Балашов Тамбов Мичуринск Курск Железногорск

Альтернативно одаренные: Раецкий&Беляев Те же и Яриков

Воронежский шахматный форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Воронежский шахматный форум » Шахматная композиция » Программа решающая задачи на мат в n ходов


Программа решающая задачи на мат в n ходов

Сообщений 1 страница 15 из 15

1

Сегодня закончил тестировать свою программу для решения задач на мат в n ходов.

https://forumupload.ru/uploads/0014/11/ca/633/t408154.gif

Файл из облака

Необходимо запустить с параметром "show", нажать ">>" в правом углу.

Можно подвигать фигуры :)

PS: Не понятно, как написать еще одно сообщение в этой теме. Поэтому дополню этот пост.

Принял замечания xuser и чуть подправил прогу для нахождения всех решений - solution mat

Немного о композиции - Шахматная задача XIX века

Можно поставить дополнение к браузеру и сканировать позицию в fen строку прямо из браузера - Scan & Analyze chess positions

Отредактировано alexlaw1964 (2023-09-10 21:22:20)

0

2

alexlaw1964 написал(а):

Сегодня закончил тестировать свою программу для решения задач на мат в n ходов.

Посмотрел. Быстродействие хорошее, работает весьма шустро.
Но похоже, что выдает только первый ход (а не дерево решения для многоходовок) и только один (т.е. нельзя использовать для проверки на побочные решения)
Непонятно, как использовать пункт меню "Позиция из FEN-строки" - позиция появляется на доске, но не перемещается в строку в правой части экрана, откуда она, видимо, и берется для решения.

0

3

Мне стало интересно добавить возможность делать лучший защитный ход.
Добавил :yep:

Проверил на задаче

https://forumupload.ru/uploads/0014/11/ca/633/t985980.jpg

https://forumupload.ru/uploads/0014/11/ca/633/t445524.jpg
https://forumupload.ru/uploads/0014/11/ca/633/t589229.jpg
https://forumupload.ru/uploads/0014/11/ca/633/t776939.jpg

Ну и решение
https://forumupload.ru/uploads/0014/11/ca/633/t122248.jpg

Теория и практика шахматной композиции

Отредактировано alexlaw1964 (2023-09-27 20:58:01)

0

4

Не совсем понятно, что означает "лучший ход".
По какому критерию это определяется?
Оперирует ли программа понятиями угроз и защит?

У меня когда-то (больше 30 лет назад) была программа для решения шахматных задач, в принципе есть ее вариант, работающий и сейчас.
К сожалению, она не понимает входной формат EPD, входной файл для нее (для той же самой задачи) выглядит вот так:

Код:
Белые:
Крg1
Лd8
Лe2
Сd2
Сg6
Кc3
пb2
пb4
пd5
пf3
пf6
пg3
пg4
Черные:
Крd4
Фc7
Лh3
Сh1
Кd7
пb3
пb5
пc4
пe7
пg2
пh5
Мат в 3 хода

а полученное решение этой задачи вот так:

Код:
1. Сd2-c1 
              2. Лe2-e4 
                     2...Крd4-d3 
                            3. Лe4-f4 
       1... Фc7-a7 
              2. Сg6-b1 
                            3. Лe2-e4 
                     2... Кd7:f6 
                            3. Кc3:b5 
                     2... Кd7-c5 
                            3. Кc3:b5 
       1... Фc7-e5 
              2. Лe2-d2 
                     2...Крd4-e3 
                            3. Лd2-d3 
       1... Фc7-f4 
              2. Сc1:f4 
                            3. Лe2-d2 
                     2... Кd7-e5 
                            3. Сf4:e5 
                            3. Сf4-e3 
                            3. Кc3:b5 
                     2... Кd7-c5 
                            3. Сf4-e5 
                            3. Кc3:b5 
       1... Фc7-c5 
              2. Лe2-e6 
                            3. Сc1-e3 
                     2... Кd7-e5 
                            3. Кc3-e2 
       1... Фc7-b6 
              2. Сc1-f4 
                            3. Лe2-d2 
                     2... Кd7-e5 
                            3. Сf4:e5 
                            3. Сf4-e3 
                     2... Кd7-c5 
                            3. Сf4-e5 
       1... Кd7-f8 
              2. Сg6-b1 
                            3. Кc3:b5 
                            3. Лe2-e4 
              2. Кc3:b5 
              2. Сc1-f4 
                            3. Кc3:b5 
                            3. Лe2-d2 
       1... Кd7:f6 
              2. Кc3:b5 
              2. Лe2-d2 
                     2...Крd4-e5 
                            3.  f3-f4 
                     2...Крd4-e3 
                            3. Лd2-d3 
              2. Сc1-e3 
                     2...Крd4-e5 
                            3.  f3-f4 
       1... Кd7-e5 
              2. Кc3:b5 
              2. Сc1-e3 
       1... Кd7-c5 
              2. Кc3:b5 
       1...  e7:f6 
              2. Сc1-e3 
                     2...Крd4-e5 
                            3. Сe3-c5 
       1...  e7-e5 
              2. Сg6-e4 
                            3. Кc3:b5 
                            3. Сc1-e3 
              2. Сg6-b1 
                            3. Лe2-e4 
                            3. Сc1-e3 
              2. Лe2-d2 
                     2...Крd4-e3 
                            3. Лd2-d3 
              2. Сc1-e3 

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

0

5

xuser написал(а):

Не совсем понятно, что означает "лучший ход".

В моем понимании  "лучший ход" - это ход, однозначно защищающий от мата при неправильном первом ходе матующей стороны.
Как в примере задачи (скриншот 3-х ходовки Александра Феоктистова).

xuser написал(а):

Оперирует ли программа понятиями угроз и защит?

Нет.

Я думал об этом, но пока не реализовывал из за трудности определения цугцванга.

PS
Я пытался создать что-то вроде итерактивной доски, где можно было не только получить готовый ответ, но и подумать над решением задачи, где противник (bot) делал ответные ходы.

Отредактировано alexlaw1964 (2023-09-30 12:14:14)

0

6

xuser написал(а):

У меня когда-то (больше 30 лет назад) была программа для решения шахматных задач

Интересно было бы узнать алгоритм, используемый вами.

Мой алгоритм такой
https://forumupload.ru/uploads/0014/11/ca/633/t448091.jpg

0

7

Выглядело все это примерно так (смотрю код на C, но уже не совсем хорошо его помню):

вызывается рекурсивная процедура искать_мат_за_белых(число_ходов, нет, нет)

сами процедуры на псевдокоде примерно такие

искать_мат_за_белых(число_ходов, угрозы, варианты)
{
  сгенерированные_ходы := генерировать_все_ходы(белые)
  если (сгенерированные_ходы пусто) то возврат мата_нет

  состояние := мат_не_найден
  цикл_по (вариант в (варианты и угрозы))
  {
    ход := первый_ход(вариант);
    если (ход в (сгенерированные_ходы))
    {
      сделать (ход)
      результат := искать_защиту_за_черных(число_ходов-1,
                                           дерево_вариантов[ход].угрозы,
                                           дерево_вариантов[ход].ответы);
      вернуть(ход)
      если (результат = мат_есть)
      {
        удалить(все_варианты)
        состояние :=вариант_проходит;
      }     
      если (результат = мата_нет)
      {
        удалить(текущий_вариант)
      }
      если (результат = мат_есть_с_вариантами)
      {
        добавить_поправки_в_ответ
        состояние := вариант_проходит_с_поправками
      }
    }
    если состояние = вариант_проходит
      выход_из_цикла
  }

  если состояние = вариант_проходит
     возврат мат_есть
  если состояние = вариант_проходит_с_поправками
     возврат мат_есть_с_вариантами

  цикл_по (ход в (сгенерированные_ходы))
  {
    сделать(ход)
    если (число_ходов > 1 и нет_шаха_черным)
    {
      результат := искать_мат_за_белых (число_ходов-1, нет, нет)
      дерево_вариантов[ход].угрозы := результат
    }
    результат := искать_защиту_за_черных(число_ходов-1,
                                         дерево_вариантов[ход].угрозы,
                                         нет);
    вернуть(ход)
    если результат = мата_нет
      удалить(текущий_вариант)
    если результат = мат_есть
    {
      добавить_текущий_вариант_в_дерево
      состояние := мат_найден // может быть, есть и другие ходы, которые приводят к мату
    }
  }

  если состояние = мат_не_найден
    возврат мата_нет
  если состояние = мат_найден
    возврат мат_есть_с_вариантами
}

искать_защиту_за_черных(число_ходов, угрозы, ответы)
{
  если число_ходов = 0
    если мат_на_доске то возврат мат_есть иначе возврат мата_нет
   
  сгенерированные_ходы := генерировать_все_ходы(черные)
  если (сгенерированные_ходы пусто) то если шах возврат мат_есть иначе возврат мата_нет
 
  цикл_по (ход в (сгенерированные_ходы))
  {
    сделать(ход)
    если ход в (ответы)
      результат := искать_мат_за_белых (число_ходов, угрозы, дерево_вариантов[ход].ответы)
    иначе
      результат := искать_мат_за_белых (число_ходов, угрозы, нет)
    вернуть(ход)
    если (результат = мата_нет)
    {
      удалить(все_варианты)
      возврат мата_нет
    }     
    если (результат = мат_есть)
    {
      удалить(текущий_вариант)
    }
    если (результат = мат_есть_с_вариантами)
    {
      добавить_вариант_в_ответ
    }
  }
 
  если были_добавлены_варианты_в_ответ
    возврат мат_есть_с_вариантами
  иначе
    возврат мат_есть

Элемент дерева вариантов имеет следующую структуру:
- с какого поля ход
- на какое поле ход
- если не 0, то во что превращается пешка
- указатель на следующий вариант в списке
- указатель на варианты-угрозы
- указатель на варианты-ответы

0

8

Смысл в целом понятен и он соответствует тому, как выдается обычно решение задачи на мат в N ходов (обычно еще может опускаться матующий ход, но здесь - нет)
Полное дерево содержит первый ход белых, все ответы черных на него и для каждого из них - правильный ответ белых и т.д.
Если решений (на первом ходу или на каком-то последующем) несколько, то указываются они все
Но полученное таким образом дерево было бы явно избыточным - типичным является случай, когда на многие разные ходы черных за белых решают одни и те же варианты
Поэтому если после хода белых нет шаха черным, то ищется угроза - возможность поставить черным мат в N-1 ходов, если они пропустят ход
Угроза в свою очередь может являться деревом или множеством деревьев - с ходами белых, угрозами после этих ходов и ответами черных и т.д.
Если после какого-то ответа черных угроза предыдущего хода белых полностью проходит, то этот вариант не указывается в дереве
Примерно так

0

9

Недавно задался таким вопросом.
Возможно ли сгенерировать случайным образом позицию, которая в итоге будет представлять собой задачу - мат в 2 хода (например).
Спросите, какой в этом смысл? Отвечу - просто интересно))
PS Добавил у себя возможность отменить ход - прога стала более интерактивной так сказать.
Скомпилированный файл заменил в первом посте -

alexlaw1964 написал(а):

solution mat

Почитал алгоритм уважаемого xuser, понял, что я пойду своим путем,.

https://forumupload.ru/uploads/0014/11/ca/633/t175210.gif

Отредактировано alexlaw1964 (2023-10-07 09:27:05)

0

10

Немного задач из Журнала

Код:
8/3N4/2ppp3/4p3/K1k4r/8/PPpRP3/2B5 w - - 0 1 mate 3 moves
5bkr/4ppnr/2N1R1Rp/7Q/5KP1/8/8/8 w - - 0 1 mate 3 moves
8/8/2pK4/8/2pk3P/2R2R2/8/8 w - - 0 1 mate 3 moves 
4QR1n/n3N2K/1q2k3/2p4p/4NP1r/8/1b6/3b4 w - - 0 1 mate 3 moves 
8/8/n2B4/3pP3/3k4/p2p2PB/3Nb3/KQ5R w - - 0 1 mate 3 moves
7Q/4Nnp1/6pp/3NpP2/1Kppk3/3R4/4B3/8 w - - 0 1 mate 3 moves
5B2/1b1Q4/4ppp1/3p1k1p/8/3N4/K1B2N2/2b2R2 w - - 0 1 mate 3 moves
8/2pp4/8/3pBR2/4kbp1/4N3/4Q3/1K6 w - - 0 1 mate 3 moves
8/5K2/B2p4/3R1p2/4k2p/4n2q/4QB2/8 w - - 0 1 mate 3 moves 
8/2RK4/8/3pk1p1/8/8/8/2N2Q2 w - - 0 1 mate 3 moves   
8/4pQ2/8/6k1/2K1P3/6p1/8/R7 w - - 0 1 mate 3 moves 
Q1n5/3K4/1p1nN3/1P2k1p1/8/2pB4/8/b7 w - - 0 1 mate 3 moves
2B2R2/p1N5/2pk4/2p2p2/8/K4p2/3B4/2R5 w - - 0 1 mate 3 moves
8/8/4Rp1K/2k5/r1P5/2Qb3N/PP5N/8 w - - 0 1 mate 3 moves
8/4p3/1K1pn3/3NkP2/4B3/3P2Pp/4PB2/8 w - - 0 1 mate 3 moves
8/3p4/6K1/1N1P2p1/1pN2kP1/1Pr2P2/5Q2/8 w - - 0 1 mate 3 moves
4r3/b2p4/3n4/R7/2P1kpB1/3N4/2N2B2/3R1K2 w - - 0 1 mate 3 moves
3N4/R7/1n1p4/1ppk4/2p1RP2/3P1K2/2B2B1b/8 w - - 0 1 mate 3 moves  
8/2P5/8/3k4/8/8/1Q5K/8 w - - 0 1 mate 3 moves
8/1p1N3Q/6p1/4P1r1/1P3kp1/6N1/3P2K1/8 w - - 0 1 mate 3 moves
3n3N/1n3p2/1NR4K/3PkP2/5R2/6P1/8/8 w - - 0 1 mate 3 moves
1k3b2/1P2p1p1/pK6/8/rp6/BN4n1/8/3b4 w - - 0 1 mate 3 moves
kb2b1r1/3pp3/PP2p1p1/8/R7/7n/2K5/1Q6 w - - 0 1 mate 3 moves
1K2Nbq1/3pp3/5pPp/3k4/1Q4R1/1P6/6b1/8 w - - 0 1 mate 3 moves
6kn/3N1prp/5BP1/K6P/1p2P3/1RP5/Q7/8 w - - 0 1 mate 3 moves
8/8/2R2B2/1B1k4/8/8/5N1K/8 w - - 0 1 mate 3 moves
K4Q2/6p1/2p5/8/Np4r1/NB5R/3P4/k1q3B1 w - - 0 1 mate 3 moves
8/8/p7/K7/1R6/kbP5/7Q/8 w - - 0 1 mate 3 moves 
8/8/8/p7/K7/1R6/kbP5/7Q w - - 0 1 mate 3 moves
6b1/6p1/1Q6/3P2Pk/8/2p5/8/2K3R1 w - - 0 1 mate 3 moves
8/R7/3b4/2pp4/1k3B2/1P3Q2/8/1n5K w - - 0 1 mate 3 moves
r2k4/bp4RK/2p4p/8/1p4p1/8/8/7Q w - - 0 1 mate 3 moves
1k6/2pb4/p2B1N2/8/8/8/6BP/6KQ w - - 0 1 mate 3 moves
4q3/1b6/8/8/2pnp3/B1k1P1Q1/2BN1N1R/7K w - - 0 1 mate 3 moves
8/4K3/7p/2n1k1p1/2Pbp1Q1/BnPb4/2N1p3/8 w - - 0 1 mate 3 moves
7N/1np1kp1b/4B2P/1p6/P1PB2K1/4R3/2r5/8 w - - 0 1 mate 3 moves
8/3pB2K/5p2/r3k3/4P1pp/4Q3/Bb1P2P1/3N4 w - - 0 1 mate 3 moves
1K4NQ/8/4kNp1/8/8/8/8/8 w - - 0 1 mate 3 moves
8/8/3K3Q/B3p3/3Nk3/8/8/8 w - - 0 1 mate 3 moves
1K6/8/5p2/3p4/4k3/6Q1/4B3/2N5 w - - 0 1 mate 3 moves
8/8/5K2/6p1/7p/5k2/Q6B/7N w - - 0 1 mate 3 moves
8/7K/4P3/7k/8/6RN/7r/3R4 w - - 0 1 mate 3 moves
8/5N2/3K1kp1/4NP1p/8/5Q2/8/8 w - - 0 1 mate 3 moves
7Q/8/2nr2p1/3p4/5pN1/2N1pkpK/3bR3/8 w - - 0 1 mate 3 moves
3r4/2b5/n6n/5N2/2Kpkp2/3NpR1Q/3P4/7b w - - 0 1 mate 3 moves
4R3/8/5PK1/3r2pp/Q2p3k/3p2p1/3B2P1/1b5r w - - 0 1 mate 3 moves
8/K1pN4/8/kpR2p2/pr2b3/n1B2n2/8/6Q1 w - - 0 1 mate 3 moves
1n6/5KNP/7p/4p1k1/R7/6r1/4P2N/8 w - - 0 1 mate 3 moves       

Отредактировано alexlaw1964 (2023-10-07 22:46:21)

0

11

alexlaw1964 написал(а):

Недавно задался таким вопросом.
Возможно ли сгенерировать случайным образом позицию, которая в итоге будет представлять собой задачу - мат в 2 хода (например).
Спросите, какой в этом смысл? Отвечу - просто интересно))

Для того, чтобы позиция была задачей на мат в 2 хода, нужно для нее проверить как минимум 1) что мат в 2 хода достигается единственным первым ходом белых (и нет мата в один ход); 2) что есть достаточное число ответов черных, на которые у белых есть мат единственным ходом, причем эти матующие ходы разные.

0

12

alexlaw1964 написал(а):

Почитал алгоритм уважаемого xuser, понял, что я пойду своим путем

Это естественно, у Вас подход интерактивный, у меня пакетный (ввести в каком-то виде описание задачи и вывести в каком-то виде ответ без взаимодействия с пользователем).
Просто разные подходы, Ваш более наглядный.

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

0

13

Кстати, в процессе рассуждений и проверки решений присланных Вами задач нашел значительный недостаток в своей программе (возможно, надо будет вернуться к этому моменту). Если мы в какой-то позиции рассчитываем угрозы за белых, то эти угрозы могут быть поставить мат в 1 .. N-1 ходов. Если есть угроза мата в один ход, нужно ли учитывать угрозы мата в два, три и т.д. хода? Сейчас все эти угрозы включаются в дерево решения, но в этом часто нет большого смысла и только увеличивается размер дерева. Но если искать только угрозы мата в минимальное число ходов, возможно, увеличится число ответов черных, на которых белые дальше должны продолжать одинаково и дерево опять же будет расти? Пока не знаю простого ответа на эти вопросы.

0

14

Интересно было бы сделать настоящую доску на микроконтроллере.
Есть небольшой опыт работы с Atmega368.
Правда он 8 битный.
Наш город Воронеж - город электронщиков и это не преувелечение.
https://forumupload.ru/uploads/0014/11/ca/633/t900515.jpg

0

15

Сделал небольшой прототип интерактивной доски.
Контроллер stm32 и вайфай на esp8266-01
В общем то концепция в голове сложилась.
Реализовать в готовое изделие одному сложно :)
https://forumupload.ru/uploads/0014/11/ca/633/t730693.jpg

+1


Вы здесь » Воронежский шахматный форум » Шахматная композиция » Программа решающая задачи на мат в n ходов