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

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

  1. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Без пешечной структуры, и простейшей оценки защищенности короля - немного сомнительно...
     
  2. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    С турнирным контролем в начальной позиции ~14-15 полуходов, в середине партии поменьше (12-14)
     
  3. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    4 года назад решил переписать свою прогу заново. Назвал ее Hopeless (забавно, что недавно появилась прога с этим же именем). Ну она и оправдала свое имя (я ее забросил).

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

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

    WildCat Коршунов Игорь Команда форума

    Репутация:
    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. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    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
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    У меня это реализовано четыремя строками.... :) У меня не хранятся списки фигур...
    Массив оценок по положению один - Фигура(с учетом цвета), поле
    Цикл по полям, если поле не пустое - приплюсовали оценку.

    Но точно ли такая программа играет на 2300? Может 2000?
     
  7. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Это зря :)

    Чуть лучше Бестии. Близко к 2300.
     
  8. NS
    Оффлайн

    NS Нефёдов Сергей баннер

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

    NS Нефёдов Сергей баннер

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

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Можно не добавлять - пробовал - не сможет :) Разница в силе - чисто материал и материал+Оценка по координате просто чудовищная.
     
  11. NS
    Оффлайн

    NS Нефёдов Сергей баннер

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

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    но при этом считается вероятность того что ход опровергающий
    интересно как
     
  13. NS
    Оффлайн

    NS Нефёдов Сергей баннер

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

    NS Нефёдов Сергей баннер

    Репутация:
    3
    У меня в версии 0.07 - Киллерам, и ходам из хеша не пишется плохая оценка... (наверно не очень логично писать им плохую оценку, даже если они оказались и не опровергающими).
     
  15. NS
    Оффлайн

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Причем не один раз!!! 40 и больше раз киллер может оказаться в начале списка! Если использовать киллеры с предыдущего хода (как делает тот-же фрукт)
     
  16. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Мы ему портим статистику за то, что он не смог опровергнуть в позиции где это опровержение было. Значит вероятность, что он еще где-нибудь опровергнет меньше. По-моему логично.
     
  17. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

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

    NS Нефёдов Сергей баннер

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

    NS Нефёдов Сергей баннер

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

    NS Нефёдов Сергей баннер

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

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    Матмодель может оказаться не адекватной. Лучше уже проверить на шахматной проге.
     
  22. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

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

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Как это не может? Разве киллер с предыдущего уровня (ply-2) Может быть вытеснен на уровне (ply)?
     
  24. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

    Репутация:
    0
    У меня таких киллеров нет.
    Кроме того, еше одно замечание: статистика не имеет смысла для хороших ходов, а только для плохих, т.к. мы ее используем для ходов оказавшихся не в начале списка.

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

    NS Нефёдов Сергей баннер

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

    NS Нефёдов Сергей баннер

    Репутация:
    3
    Для ходов до опровергающего прибавляем двойку к количеству попыток, опровергающему - двойку и в количество попыток и в количество опровежений, остальным единицу к количеству попыток.
    Ходам их Хеша и киллерам в случае если они не опровергающие - не пишем ничего.
     
  27. WildCat
    Оффлайн

    WildCat Коршунов Игорь Команда форума

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