Оценка мобильности фигур

Тема в разделе "Машинное отделение", создана пользователем WildCat, 10 авг 2006.

  1. NS Нефёдов Сергей

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

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

    WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    4 года назад решил переписать свою прогу заново. Назвал ее Hopeless (забавно, что недавно появилась прога с этим же именем). Ну она и оправдала свое имя (я ее забросил).

    Переборные алгоритмы:
    PVS
    quiscence + delta pruning
    nullmove
    hash
    check extension
    сортировка ходов: хеш, два киллера, превращения, плохие взятия, история

    Вот и вся переборная схема. За счет улучшения перебора легко можно сделать больше 2300.
  4. TopicStarter Overlay

    WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Нашел даже описание того, что было сделано :)

    IMPLEMENTED:

    principal variation search
    quiscence search
    futility cutoff in quiscence
    PST
    support time control "game in x"
    killers heuristic
    history heuristic
    PV line searched first
    check extension
    hash (always replace strategy)
    detect repetitions
    abort search by time limit
    support time control "x / y"
    support incremental time control
    opening book
  5. TopicStarter Overlay

    WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Код:
    int Evaluate()
    {
      int score = ImBalance;
      int i;
      for (i = 0; i < PieceCnt[WHITE_PAWN]; i++)
        score += PST_PAWN[PieceList[WHITE_PAWN][i]];
      for (i = 0; i < PieceCnt[BLACK_PAWN]; i++)
        score -= PST_PAWN[Flip[PieceList[BLACK_PAWN][i]]];
      for (i = 0; i < PieceCnt[WHITE_KNIGHT]; i++)
        score += PST_KNIGHT[PieceList[WHITE_KNIGHT][i]];
      for (i = 0; i < PieceCnt[BLACK_KNIGHT]; i++)
        score -= PST_KNIGHT[Flip[PieceList[BLACK_KNIGHT][i]]];
      for (i = 0; i < PieceCnt[WHITE_BISHOP]; i++)
        score += PST_BISHOP[PieceList[WHITE_BISHOP][i]];
      for (i = 0; i < PieceCnt[BLACK_BISHOP]; i++)
        score -= PST_BISHOP[Flip[PieceList[BLACK_BISHOP][i]]];
      if (BlackPieces > 3 || (BlackPieces == 3 && PieceCnt[BLACK_QUEEN]))
        score += PST_KING[PieceList[WHITE_KING][0]];
      else score += PST_KING_ENDGAME[PieceList[WHITE_KING][0]];
      if (WhitePieces > 3 || (WhitePieces == 3 && PieceCnt[WHITE_QUEEN]))
        score -= PST_KING[Flip[PieceList[BLACK_KING][0]]];
      else score -= PST_KING_ENDGAME[Flip[PieceList[BLACK_KING][0]]];
      return wtm ? score : -score;
    }
    Легко можно было бы сделать менее 20 строчек, если сделать циклы по фигурам.
  6. NS Нефёдов Сергей

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

    Но точно ли такая программа играет на 2300? Может 2000?
  7. TopicStarter Overlay

    WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Это зря :)

    Чуть лучше Бестии. Близко к 2300.
  8. NS Нефёдов Сергей

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

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Мой прогноз что Анечка на 200-300 пунктов (как минимум) сильнее.
    У меня в первых версиях Анечки (и в шахматах на 1С) была такая-же оценка, только Таблицы были разные на разных стадиях (не две стадии, а больше) + оценивалось право рокировки + Оценка фигур зависила от материала на доске (стороне имеющей больший материал выгодней размены, поэтому её фигуры ценятся меньше).
  10. NS Нефёдов Сергей

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

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    По своему. В версии 0.07 нет сортировки по истории, но при этом считается вероятность того что ход опровергающий. (ни одна стандартная схема без сортировки по истории работать не будет)
    Сокращается перебор только при Depth>2, так как при меньших Depth - я считал что достаточно Футилити...
    //
    Контроль интересует 5'+1"
  12. TopicStarter Overlay

    WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    но при этом считается вероятность того что ход опровергающий
    интересно как
  13. NS Нефёдов Сергей

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

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

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

    WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Мы ему портим статистику за то, что он не смог опровергнуть в позиции где это опровержение было. Значит вероятность, что он еще где-нибудь опровергнет меньше. По-моему логично.
  17. TopicStarter Overlay

    WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Вероятность опровержения просто считается: (кол-во опровержений / кол-во раз этот ход пробовали в позициях, где есть опровержение).
    Выглядит правильно. К чему у тебя претензии?
  18. NS Нефёдов Сергей

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

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

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    На самом деле пример - Ход Ке5 - отличный ход, и записывается в киллеры.
    Но в данной позиции ход из хеша d5 (а именно пешка d4 защищала коня) Ход Ke5 станет проигрывать материал.
    Если бы он не был киллером - то он уполз бы дальше в конец списка, а так - он на каждый ответ соперника (на ход d5) Будет опровергаться, но оставаться киллером, и оставаться в начеле списка!!!! пока не будет добит окончательно!
    А позиция допустим подавляющая для Белых, и опровергающий ход всегда достаточно быстро находится...
    В итоге Ход Ke5 Получит ужасную историю. Но он же не виноват что мы его всё время рассматриваем одним из первых!
  21. TopicStarter Overlay

    WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Матмодель может оказаться не адекватной. Лучше уже проверить на шахматной проге.
  22. TopicStarter Overlay

    WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Пример, не совсем понятен. Кто черный, а кто белый? И почему погибает конь, если d5 из хеша?
    Ход не может больше двух раз остаться в киллерах. Так что сильно мы ему репутацию не подпортим :)
  23. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Как это не может? Разве киллер с предыдущего уровня (ply-2) Может быть вытеснен на уровне (ply)?
  24. TopicStarter Overlay

    WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    У меня таких киллеров нет.
    Кроме того, еше одно замечание: статистика не имеет смысла для хороших ходов, а только для плохих, т.к. мы ее используем для ходов оказавшихся не в начале списка.

    Чтоб все разъяснилось просто покажи свой LMR код. А то не очень понятна твоя идея.
  25. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Конкретней - некоторая позиция, ход черных. У белых пешка на d4 и конь на f3.
    На ход черных h6 опровергающий Ke5 - он записался в киллеры.
    h6 ke5(киллер)
    g6 d5 (ход из хеша) Любой ход Ke5(киллер с (ply-2))
    Возможно что 40 раз подрят ход будет одним из первых, но из начала списка, как бы не портилась у него история он не уйдет... Так как он киллер c предыдущей глубины!!
  26. NS Нефёдов Сергей

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

    WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    В шахматном программировании очень часто умозрительные заключения бывают опровергнуты практикой. Так что лучше попробовать:
    - вообще без статистики
    - каноническая статистика
    - статистика штрафов для нерассматривавшихся ходов

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