Где можно посмотреть на паттерны?

Тема в разделе "Машинное отделение", создана пользователем Orlov, 27 мар 2007.

  1. TopicStarter Overlay

    Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Какую структуру имеют? В чьих открытых исходниках их можно увидеть?
    Благодарю за участие.
  2. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Простейший пример паттернов это табличная оценка фигур по положению - есть в любой программе. Еще пример - пойманный слон в Крафти. Только в виду того что в Крафти таких комбинаций не очень много - они заданы не в виде таблиц, а напрямую прописаны в коде.
    ЭБ так-же можно считать паттернами.

    Структуру могут иметь разную :)
    Например вычисление адреса в таблице по данному сочетанию фигур. (Используется в ЭБ)
  3. TopicStarter Overlay

    Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Благодарю. В крафти пойманный слон белых описан следующим образом:
    if (WhiteBishops&SetMask(A7) && SetMask(B6)&BlackPawns) score-=BISHOP_TRAPPED;
    Тогда вопрос: а имеет ли смысл таким образом и так сильно снижать оценку? Ведь вполне вероятно что следующим ходом белый слон просто забирает пешку? Логичнее выглядит:
    if (WhiteBishops&SetMask(A7) && SetMask(B6)&BlackPawns && SetMask(c7)&BlackPawns)
    score-=BISHOP_TRAPPED; или я въехал во что-то?
  4. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.491
    Симпатии:
    3.120
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Если следующим ходом он её забирает просто, то на это нам укажет ФВ. А если ФВ на это не указал, и возникла необходимость статически оценивать позицию - значит, не всё так просто оказалось.

    В некоторых программах для такой оценки используют SEE.
  5. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Да, то что его съедят покажет ФВ.
    поэтому достаточно Слон a7, пешка b6 и Слон b8, пешка c7.
    Слон h6/пешка g5 - сложнее, и нужно придумывать как описывать.
    Еще в Крафти был признак "пойманная ладья". Могу соврать, но типа белая ладья на g7, черные пешки h7,f7, черная легкая фигура на g6.


    В крафти были еще и другие паттерны (не помню в каких версиях есть) - например за черных - пешки c5,d5, конь c6.
  6. TopicStarter Overlay

    Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Да, логично. Про ФВ не подумал.
  7. TopicStarter Overlay

    Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Таким образом, паттерны это двух-трех фигурные сочетания(описывать всю доску это я так понимаю очень дорого да и бессмысленно) с некоторой оценкой, которая плюсуется к оценочной функции.
    Это ж сколько нужно написать этих самых паттернов, что бы получить экзешник в 5 мегабайт? (как у рыбы)
  8. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Не обязательно двух-трех. Может быть любое сочетание фигур - хоть десяти.
    В Рыбке всего этого очень много. Но если даже брать только все двухфигурные сочетания - уже получается огромный объем.
  9. Vadim Заслуженный

    • Заслуженный
    Рег.:
    24.05.2006
    Сообщения:
    198
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    А вот в Зевсе нет пойманого слона, и из того что я видел, количество очков полученных из-за съеденной пешки, превышало количество очков потерянных из-за пойманного слона
  10. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Я первую-же свою партию сыгранную с Анечкой (версией 0.05) Выиграл поймав черного слона на а2 белыми в разменнике испанки. После этого сразу добавил признак.
    Зевс проигрывал партии и на пойманном слоне, и на ошибке в защищенности короля (Запертая собственная Ладья в углу.)
  11. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.491
    Симпатии:
    3.120
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Ещё в Крафти, кажется, есть такой паттерн - ладья, запертая собственным королём, который не стал делать рокировку, а пешком пришёл на g1.
  12. TopicStarter Overlay

    Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    И все-таки я не догоняю как вот это:
    if (WhiteBishops&SetMask(A7) && SetMask(B6)&BlackPawns) score-=BISHOP_TRAPPED;
    можно представить ввиде таблиц. Поясните плиз.
  13. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Двух-Фигурные сочетания? Для наша Фигура/Фигура соперника.
    Четырех массив. Первое измерение - Номинал Нашей фигуры, Второе - номинал фигуры соперника, Третье Координата нашей фигуры, Четвертое - Координата Фигуры соперника.
    Итого Массив [6,6,64,64] - на 150 тыс. элементов, в каждом элементе храним вес признака. При помощи исключения дублей размер массива можно сократить.
    По адресу [наш_слон,пешка_соперника,a7,b6] храним -150...

    Так-же делается в случае Когда обе фигуры одного цвета.
  14. Vadim Заслуженный

    • Заслуженный
    Рег.:
    24.05.2006
    Сообщения:
    198
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Ладно сделаю коллекцию партий, где слон кушает Анечкины и Грекины пешки на a2 и h2 , переваривает их 5-6 ходов запертый пешкой, а потом уходит :)

    Orlov - там не таблицы , там битовые маски
    WhiteBishops&SetMask
    BlackPawns
    A7
    B6
    - это все маски
  15. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    :)
    А я могу поискать партии где Зевс практически всю партию играет без ладьи
    Запирая её королем в углу :)
    Та-же самая фигня у Анечки, и у молодых Котят.
  16. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.491
    Симпатии:
    3.120
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    А дальше что? У нас чаще всего два слона, а у противника - восемь пешек.

    Как обращаться к этому массиву? Делать вложенный цикл - снаружи по нашим слонам, внутри - по пешкам противника? Неэкономно как-то...
  17. TopicStarter Overlay

    Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    И попутно: массив в зависимости от размерности паттерна создаем по формуле:
    размер массива = кол-во фигур * 2
  18. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Не совсем понял... Мы смотрим все двух-фигурные сочетания. При чем тут слоны и пешки?
    У каждой стороны не больше Шестнадцати Фигур на доске, у противника тоже. Максимально 256 обращений к памяти чтоб получить вес из массива.

    Для а=1 по Количество _наших фигур Цикл
    Для в=1 по Количество_фигур_соперника Цикл
    Score:=Score+Паттерн[Номинал_нашей_Фигуры[а],Номинал_фигуры_Соперника[в],Координата_Нашей_Фигуры[а], Координата_Фигуры_Соперника[в]];
    КонецЦикла;
    КонецЦикла;
  19. TopicStarter Overlay

    Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    т.е. данный паттерн описан в крафти с помощью битовых масок. Для меня представляет интерес как данный паттерн описать с помощью таблицы.
  20. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Так я же выше написал... Если исключаем малозначимые сочетания - то нужна индексированная структура. Если не исключаем - то как описано выше.
  21. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.491
    Симпатии:
    3.120
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    А как эти таблицы заполнить, вручную?
    Или по какой-то большой базе, статистическими методами?
  22. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Можно рассчитать их программой (спусками), потом подправить вручную. В существующих шахматных программах можно считать что все значения в этой таблице равны нулю. Мат. методы в любом случае дадут более хорошую таблицу :) Далекую от идеала, но лучше чем с нулевыми значениями.
  23. TopicStarter Overlay

    Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    я зачем нам все двух-фигурные сочетания? Пример с пойманным слоном понятен. Но зачем нам паттерн из двух фигур стоящих рядом (конь на B1 и слон на C1)? Что это нам дает а если и дает, то чему это будет равно?
  24. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.491
    Симпатии:
    3.120
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Да, и почему бы индексировать не только по парам "своя фигура-чужая фигура", но и по парам своих? Скажем, конь g5 + ферзь h5 = гуд, атакуем короля...
  25. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Конечно нужно и по парам своих. Я пары именно своих в шашках считаю в первую очередь (дает баланс флангов и т.д.) Тем более возможных сочетаний в два раза меньше.
  26. Fruit Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    2.201
    Симпатии:
    64
    Репутация:
    3
    Оффлайн
    А чужие пешки на g7, h6 = гуд, дармовый конь. :)
  27. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.491
    Симпатии:
    3.120
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    См. мой пост #4 в этой ветке.

    Upd. Хотя да, ФВ будет работать только при нашем ходе. Но такие штуки должен отсекать детектор атак, двойных ударов, или что-то подобное.
  28. TopicStarter Overlay

    Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    к разным цветам тоже нужно подходить избирательно. большинство позиций тоже будет не интерестно(белый слон на С1, черный на С8)
  29. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Что значит неинтересно? :)
    Допустим у нас оценка фигуры по координате (Табличная) - тоже многие поля неинтерсны, но никто-же их не исключает :)
    Нет смысла исключать только симметричные комбинации - исключим мы очень мало (Даже если бы и много - что мы на этом приобретем?), а вот в доступе (скорости доступа) потеряем очень сильно. Если исключать - так почти всё, но для этого необходимо отделить значимые сочетания от малозначимых. Сделать это можно. Но непонятно - нужно ли?

    У меня в шашках получается 28*28 Комбинаций разных цветов, и 14*27 (в два раза меньше) комбинаций двух шашек одного цвета.

    Исключать можно в процессе расчета - просто занося 0 в невозможные комбинации (в шашках простая не может находится на последней горизонтали, две шашки не могут находится на одном поле :) и т.д.) и в симметричные комбинации двух шашек разного цвета.
  30. TopicStarter Overlay

    Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    неинтерестные поля в табличной оценке имеют знак "-" (ну или 0) и говорят о том что коню(или другой фигуре там не уютно), а как оценить паттерн с разноцветными слонами разнесенными по разным краям доски мне даже представить трудно. На мой взгляд имеет смысл оценивать только паттерны связанные с угрозами.
  31. Booot Учаcтник

    • Участник
    Рег.:
    05.06.2006
    Сообщения:
    140
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Лично мне паттерны, основанные только на сочетаниях координат фигур кажутся бесперспективными. Что мы хотим ими улучшить? Силу игры? Статистически на ВСЕХ встречающихся типах позиций? Как шахматист (какой-никакой) понимаю, что звучит это немного странно: типов позиций крайне дочерта и находить матмоделями какие-то веса фигур, которые в среднем по больнице будут давать чуть больше, чем дают другие движки, с прописанными от фонаря числами... Ну пунктов до 20, вероятно, и удасться усилить (угробив уйму времени как на подбор, так и измерение разницы). Потому что в "не своей позиции" один черт почему признак "проседает": то ли его от балды подбирали, то ли при поиске экстремума другие типы позиций встретились чаще и на себя одеяло потянули.К тому же: сочетание скольких фигур РЕАЛЬНО можно прописать? Все вроде комбинаторику в школе учили. Те же сочетания 8 фигур (пешечный центр + несколько фигур за него борящихся) сколько памяти скушает под таблицу? А если в это время атака по флангу на короля?
    Мне кажется нужно немного в другом месте паттерны искать (то что они могут много дать - понятно). Вот попробую их сам осилить, если будет получаться - поделюсь идеями :).
  32. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Предлагалось всего несколько параметров для каждого типа центра стоимость фигуры (без привязки к положению на доске, но разделяя чернопольных и белопольных слонов)
    Шахматы - искусство разменов. И я думаю что от таких признаков программа будет играть сильнее. Начал играть в Адванс - могу четко сказать - ни Рыба, ни Фрукт абсолютно не умеют меняться. Они не понимают какая фигура лучше при данном типе центра.

    Для примера - насколько лучше программа будет играть Челябинский зная что чернопольный слон черных плох? Да она просто наконец-то научится его играть!
    А если программа знает насколько плох белопольный во Французской?
    Сочетания Фигур я прежлагаю считать без привязки к центру. Памяти не так много требуется для 2-3 фигурных. Если считать пешки разных видов разными фигурами (Проходная, Слабая, Изолированная) - То получаем хорошую пешечную структуру (Защищенные проходные, пешечные Фаланги и т.д.), Пешечное прикрытие короля, Сильный Конь (ДвухФигурное сочетание) и т.д.

    Если Добавить к типам фигур - Битое определенной фигурой поле, то получаем уже атаку на короля, подвисшие фигуры, Мобильность. То есть ДвухФигурные сочетания это не так уж и мало.

    Я приводил пример. Оценка по материалу - сила программы 1400-1600. Добавляем однофигурные сочетания (Оценка по координате, Табличная оценка фигур) - получаем силу 2300. Что будет если дбавим двухфигурные сочетания?

Поделиться этой страницей