Anechka

Discussion in 'Машинное отделение' started by krey, 27 Jun 2006.

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

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    02.05.2006
    Message Count:
    6.811
    Likes Received:
    96
    Репутация:
    3
    Location:
    Санкт-Петербург
    Оффлайн
    Code:
    rootScore:=0;
    delta:=50;
    For Depth:=1 to 40 do
    Begin
      if Depth=1 then
      begin
        a:=-inf;
        b:=inf;
      end
      else
       begin
         a:=rootScore-delta;
         b:=rootScore+delta;
       end;
       repeat
          if rootScore>=b Then b:=+inf;
          if rootScore<=a Then a:=-inf; 
          rootScore:=search_root(a,b,depth);
       until (rootScore>a) and (rootScore<b);
    End;
    Вот что я имел в виду.
    Окно расширяем не до (rootScore,+inf), а до (а,+inf) Так как это практически не изменяет время выполнения, но при более узком окне (классическом) можно напороться на неприятности связанные с нестабильностью перебора.
  2. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    02.05.2006
    Message Count:
    6.811
    Likes Received:
    96
    Репутация:
    3
    Location:
    Санкт-Петербург
    Оффлайн
    Соответственно, если первый ход вызовет опровержение по бете - то произойдет выход из search_root, и первый ход будет рассмотрен с более широким окном, а если первый ход будет опровергнут по Альфа - то окно не будет расширено, и с текущим окном будут рассмотрены все остальные ходы, и только если они все будут опровергнуты по Альфа - произойдет изменение нижней границы на -inf;
    При этом может поменяться лучший ход (ход, который с более широкими границами будет рассмотрен первым)
  3. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    02.05.2006
    Message Count:
    6.811
    Likes Received:
    96
    Репутация:
    3
    Location:
    Санкт-Петербург
    Оффлайн
    Или учше вообще сделать практически MTD(f) ???
    Code:
    rootScore:=0;
    delta1:=50;
    delta2:=50;
    // Наилучшие значения найдем опытным путем....
    For Depth:=1 to 40 do
    Begin
      if Depth=1 then
      begin
        a:=-inf;
        b:=inf;
      end
      else
       begin
         a:=rootScore-delta1;
         b:=rootScore+delta1;
       end;
       repeat
          if rootScore>=b Then b:=rootScore+Delta2;
          if rootScore<=a Then a:=rootScore-Delta2; 
          rootScore:=search_root(a,b,depth);
       until (rootScore>a) and (rootScore<b);
    End;
  4. Сергей Марков Учаcтник

    • Участник
    Member Since:
    13.05.2006
    Message Count:
    136
    Likes Received:
    6
    Репутация:
    0
    Оффлайн
    В SmarThink первый ход смотрится вначале с окном от eval-0.01 до eval+0.01. Потом расширяется до +/- 0.30. А затем уже до inf. Но на самом деле это не очень важно. "Узкое" окно помогает там, где оценка определяется либо одними и теми же ходами ФВ, либо отсечениями. В эндшпиле такое особенно часто происходит. Учитывая, что перебор SmarThink fail-hard, то в нем вероятность сохранения той-же оценки на следующей итерации еще выше.
    В свое время я перепробовал несколько разных моделей, начиная от MTD(f) (который очень плох в сочетании с пустым ходом) и кончая разными хитрыми MT-движками. Например, можно учитывать, что если ход единственный, то нам не нужна его точная оценка и т.п. Но сила движка лежит определенно не тут...
  5. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    Это зависит от того какой алгоритм перебора используется. Например, у меня альфа-бета. И за счет разных хитростей с окном в корне можно нарыть сотню пунктов.

    А вот в Фрукте PVS. И там никакие окна не дадут ничего ощутимого.
  6. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    02.05.2006
    Message Count:
    6.811
    Likes Received:
    96
    Репутация:
    3
    Location:
    Санкт-Петербург
    Оффлайн
    То что сила движка лежит не тут - это ясно, я просто пытаюсь избежать провалов Брейчинг-Фактора.
    а чем Fail-Soft отличается от Fail-Hard?
    Я думал что у меня Fail-Soft, но теперь начинаю подозревать что всё-таки Hard :)
    Я возвращаю максимально опровергающую оценку, плюс использую значение из Хеша в PV.
    Что-то я в терминологии запутался :) или Fail-Safe?
  7. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    Fail-Hard это когда возвращаются значения только внутри окна.
    Fail-Soft может вернуть значение вне окна с обоих сторон (Фрукт).
  8. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    02.05.2006
    Message Count:
    6.811
    Likes Received:
    96
    Репутация:
    3
    Location:
    Санкт-Петербург
    Оффлайн
    Значит у меня Fail-Soft....
    Что-то не могу понять, какие преимущества могут быть у Fail-Hard?
    Только большая стабильность перебора?
    (я правильно понял - в случае опровержения Fail-Hard возвращает либо альфу либо бету?)
  9. Сергей Марков Учаcтник

    • Участник
    Member Since:
    13.05.2006
    Message Count:
    136
    Likes Received:
    6
    Репутация:
    0
    Оффлайн
    Не совсем. У меня возвращается значение от alpha до inf.
    В fail soft возвращается не alpha, в случае если не было ни одного значения >alpha, а максимальное из значений, которые были получены.
    Преумущество у моей модели никаких, равно как никаких de facto преимуществ у fail soft. Во всяком случае на моих тестах.
  10. Сергей Марков Учаcтник

    • Участник
    Member Since:
    13.05.2006
    Message Count:
    136
    Likes Received:
    6
    Репутация:
    0
    Оффлайн
    У меня pvs. А что, alpha/beta с хитростями лучше pvs? :)
    Может быть pvs это и есть лучшая хитрость для alpha/beta? :)

    Кстати, в свое время читал много по теории переборных алгоритмов. Есть такая теорема, что mtd(f) с идеальным хэшем эквивалентен best-first :)
  11. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    02.05.2006
    Message Count:
    6.811
    Likes Received:
    96
    Репутация:
    3
    Location:
    Санкт-Петербург
    Оффлайн
    Наверно в этой теореме не учитывалась нестабильность перебора вызванная Пустым ходом и LMR :)
  12. WinPooh В.М.

    • Команда форума
    Member Since:
    13.02.2006
    Message Count:
    9.491
    Likes Received:
    3.120
    Репутация:
    95
    Location:
    Москва
    Оффлайн
    Сферическая альфа-бета в вакууме, с бесконечным количеством ног :)
  13. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    У меня PVS колбасит непадецки. Теряется около 30 пунктов.

    В студию ее! И что такое идеальный хеш? Который все запоминает? Теорема выглялит сомнительно.
  14. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    02.05.2006
    Message Count:
    6.811
    Likes Received:
    96
    Репутация:
    3
    Location:
    Санкт-Петербург
    Оффлайн
    Есть теорема, в ней не учитывается время обращения к хешу (считаются только просмотренные узлы) - сылка есть на странице Plaat-а (вроде так) посвященной mtd(f)
  15. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    02.05.2006
    Message Count:
    6.811
    Likes Received:
    96
    Репутация:
    3
    Location:
    Санкт-Петербург
    Оффлайн
    Насколько я понимаю, что схема с возвратом оценки от Альфа до inf полностью равнозначна схеме с возвратом оценки от Альфа до Бета...
    Так как оценка большая, чем Бета - в предыдущем узле (где она станет меньшей Альфы) Будет приравнена к Альфе :)
    Разница только в значениях в Хеше на последнем Ply (пока идёт запись в хеш...)
  16. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    Запись в хеш происходит на всех уровнях. В этом и разница.
    Все-таки дайте линк на теорему.
  17. NS Нефёдов Сергей

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

    Incidentally, one of the MTD instances is equivalent to SSS*, George Stockman's best-first minimax algorithm that promised to be more efficient than AlphaBeta. (By equivalent I mean that the two algorithms look different, but search the same nodes.) This SSS*-MTD made the first practical tests of SSS* in full-fledged game playing programs feasible, shedding new and unexpected light, after more than 15 years, on the questions posed in Stockman's 1979 article. See our 1996 article in Artificial Intelligence for more on this subject. (And yes, MTD(f) is also better than SSS*, in case you wondered.)

    http://theory.lcs.mit.edu/~plaat/mtdf.html

    http://theory.lcs.mit.edu/~plaat/Papers/aij-final.ps.gz
  18. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    02.05.2006
    Message Count:
    6.811
    Likes Received:
    96
    Репутация:
    3
    Location:
    Санкт-Петербург
    Оффлайн
    Наверно сделаю так -
    При опровержении пустым ходов - возвращается Бета
    В случае Futility и Extended Futility (Статистическая оценка меньше альфа-Margin (при depth=1 или depth=2)), либо LMR (у меня при depth>=3) Возращается в окне (Альфа,+inf) (так как с верификацией)
    В остальных случаях возвращается реальная оценка. (Других отсечений/сокращений у меня пока нет)
    Наверно четкий Fail-Hard и получается... Везде максимально достоверная опровергающая оценка.
  19. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    По первой ссылке теоремы не нашел. А ps-файлы я читать не умею.

    George Stockman's best-first minimax algorithm that promised to be more efficient than AlphaBeta
    Что-то непонятное. Я так думал, что best-first это когда первым рассматривается лучший ход, т.е. это не алгоритм, а просто порядок обхода дерева. И реализовать такой обход можно только зная оценки всех ходов.
  20. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    02.05.2006
    Message Count:
    6.811
    Likes Received:
    96
    Репутация:
    3
    Location:
    Санкт-Петербург
    Оффлайн
    Нет, best-first это SSS* :)
    Там где-то было тоже самое в pdf
    Но при идеальном Хеше он не смотрит лишних узлов...
    Сейчас точно не помню, но вроде тот-же mtd(f), только начинаем с оценки +inf
  21. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    02.05.2006
    Message Count:
    6.811
    Likes Received:
    96
    Репутация:
    3
    Location:
    Санкт-Петербург
    Оффлайн
    http://66.249.93.104/search?q=cache....pdf+best-first+SSS*&hl=ru&gl=ru&ct=clnk&cd=9

    Тут на 55-той странице. Но текст невнятный, вроде равносильно Mtd(f) с начальным значением +inf, с рассмотрением в первую очередь ходов имеющих максимальную оценку (в хеше) после Fail-Soft.
    (то есть в хеше хранится только верхняя оценка, изначально +inf)

    Это ежели я ничего не перепутал.
  22. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    Зачем вообще тогда этот SSS* нужен? Каждый извращается как ему нравится.
  23. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    02.05.2006
    Message Count:
    6.811
    Likes Received:
    96
    Репутация:
    3
    Location:
    Санкт-Петербург
    Оффлайн
    SSS* - один из примеров минимизации количества просмотренных узлов. :)
    С помощью Mtd(f) (с начальным значением +inf, и уменьшением оценки) Вроде был произведен его первый практический тест.
    (как раз и получается, что всё время смотрим ход с максимальной оценкой, остальные отсекаются значением в Хеше)
  24. Сергей Марков Учаcтник

    • Участник
    Member Since:
    13.05.2006
    Message Count:
    136
    Likes Received:
    6
    Репутация:
    0
    Оффлайн
    Так и есть, хотя последним полуход может, например, в силу возникновения мата и т.п. Плюс к этому не стоит забывать про неглубокие вспомогательные переборы, отсечения и т.д.
  25. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    02.05.2006
    Message Count:
    6.811
    Likes Received:
    96
    Репутация:
    3
    Location:
    Санкт-Петербург
    Оффлайн
    А чем схема их 53-го поста хуже? (чем схема с возвратом всегда в интервале (Альфа, +inf)) ?
  26. Сергей Марков Учаcтник

    • Участник
    Member Since:
    13.05.2006
    Message Count:
    136
    Likes Received:
    6
    Репутация:
    0
    Оффлайн
    Я не проводил таких тестов. Я же говорю: сила движка не тут. У меня по тестам fail-soft и fail-hard не отличаются в пределах погрешности.
  27. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    Чтобы отсечь ход знвчением в хеше его нужно просмотреть. И пока оценка будет спускаться мы его просмотрим очень много раз. В Mtd(f) не может идти речи ни о какой минимальности.
  28. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    02.05.2006
    Message Count:
    6.811
    Likes Received:
    96
    Репутация:
    3
    Location:
    Санкт-Петербург
    Оффлайн
    В том то и дело - что считаем хеш идеальным - неограниченный размер, и моментальный доступ.
    Тогда Mtd(f) и его модификации рулят... :) (+еще одно условие: стабильность поиска)
  29. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    Отвлеклись от темы топика :)
    Вот партия чтобы вернулись:
    Code:
    [Event "TCT"]
    [Site "Sempron 3000+; Hash 128 Mb; EGTB 3, 4"]
    [Date "2006.8.12"]
    [Round "1.4"]
    [White "Anechka 0.07"]
    [Black "Anechka 0.08"]
    [Result "1-0"]
    [TimeControl "1920+16"]
    
    1.e4 e5 2.Nf3 Nf6 3.Nxe5 Qe7 4.d4 d6 5.Nc4 Nxe4 6.Be2 Qd8 7.O-O Be7 8.Bf3 Nf6 9.Re1 d5 10.Ne5 O-O 11.Bg5 c6 12.Nd2 Be6 13.c4 dxc4 14.Ndxc4 Nbd7 15.Rc1 Nxe5 16.dxe5 Nd5 17.Bxe7 Nxe7 18.Qe2 Ng6 19.Nd6 Rb8 20.b3 f6 21.Red1 Nxe5 22.Nxb7 Qc8 23.Rxc6 Nxf3+ 24.Qxf3 Qxb7 25.Rxe6 Qxf3 26.gxf3 Kf7 27.Red6 Rfe8 28.Kg2 Re7 29.h4 h5 30.f4 Rb4 31.R6d4 Rxd4 32.Rxd4 f5 33.Rd8 Re8 34.Rd5 Kf6 35.Ra5 Re7 36.Ra6+ Kf7 37.b4 Rb7 38.a3 Ke7 39.Kg3 Kf7 40.a4 Rd7 41.b5 Rb7 42.a5 Ke8 43.Kh3 Kd8 44.Kg2 Kc7 45.Rc6+ Kb8 46.Rc5 g6 47.Re5 Kc8 48.Re8+ Kd7 49.Rg8 Rxb5 50.Rg7+ Kc8 51.Rxa7 Rb4 52.Rg7 Rxf4 53.Rxg6 Rxh4 54.Rg5 Rg4+ 55.Rxg4 fxg4 56.Kg3 Kb7 {jump -7.12} 57.Kh4 {jump +6.49} Ka6 58.Kxh5 Kxa5
    {Black resigns}
    1-0
    Очень много раз замечал, что Анечка замечает свое поражение сразу после перехода в пешечный эндшпиль. Нормальная оценка (плюс, может быть, удлинения) может прибавить более 50 пунктов.
  30. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    02.05.2006
    Message Count:
    6.811
    Likes Received:
    96
    Репутация:
    3
    Location:
    Санкт-Петербург
    Оффлайн
    Можно попробовать сделать +3 Ply (либо гибкое увеличение глубины в зависимости от текущего depth) при переходе в пешечный эндшпиль.
    До оценки со временем доберусь - но наверно после миттельшпиля. То есть в версии 0.09 сильных изменений в эндшпильной оценке не будет. (может добавлю Таблицу для Король и пешка против короля и правило квадрата - это недолго, над остальным нужно думать...)
    Но защищенность короля в первую очередь - а это для меня самое сложное на данный момент, раньше особо не обдумывал.
  31. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Member Since:
    02.05.2006
    Message Count:
    6.811
    Likes Received:
    96
    Репутация:
    3
    Location:
    Санкт-Петербург
    Оффлайн
    Текущий рейтинг в третьей лиге WBEC. Посчитан Bayesian Elo:

    Code:
    Rank Name                Elo    +    - games score oppo. draws 
       1 Djinn 0.925x        115   77   73    56   67%    -3   30% 
       2 Muse 0.899b uci     102   73   70    58   66%     2   34% 
       3 Capture R01          63   76   74    56   58%     7   23% 
       4 Bruja 1.9            51   74   72    60   55%    13   20% 
       5 Ant 2006-F           36   72   71    60   55%    -1   23% 
       6 K9 0.32              34   74   73    56   56%   -11   30% 
       7 Tytan 8.64           33   72   71    56   54%     9   32% 
       8 Resp 0.19            25   71   70    60   55%    -9   30% 
       9 Anechka 0.07         18   70   69    60   53%     4   32% 
      10 Eeyore 1.49i         11   74   73    56   51%     1   27% 
      11 Arion 1.7             8   71   71    60   50%     7   27% 
      12 Diablo 0.4            3   72   72    58   47%    15   29% 
      13 Xpdnt 060602          0   72   72    60   51%    -4   22% 
      14 Thor'sHammer 2.28    -7   71   71    60   49%    -3   28% 
      15 Tornado 0.84.2      -25   73   73    56   48%   -12   29% 
      16 Knightx 1.92        -29   72   72    60   48%    -9   22% 
      17 Gaia 3.5            -33   73   75    56   44%     9   27% 
      18 Hermann 1.72        -41   76   77    56   45%     0   18% 
      19 Butcher 1.57        -43   70   72    60   40%    22   30% 
      20 EXchess 5.01b       -50   73   74    56   44%    -8   27% 
      21 Chispa 4.03         -61   74   76    56   41%    -2   25% 
      22 Scidlet 3.6         -65   76   78    56   43%   -13   18% 
      23 Terra 3.4           -66   76   78    56   42%    -5   20% 
      24 Waster 0.16         -79   73   76    60   40%    -7   17%
    Такое впечатление что мне нехватает совсем немного... :(
  32. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    Ты ж видел, что если малое число игр, то эта прога делает разницу рейтов маленькой. Так что реально может не хватать больше.
  33. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    Code:
       1. Djinn 0.925x                   2426     0.669643   2282      56        
       2. Muse 0.899b uci                2419     0.655172   2287      58        
       3. Capture R01                    2361     0.580357   2292      56        
       4. Bruja 1.9                      2344     0.55       2301      60        
       5. Ant 2006 F                     2327     0.55       2284      60        
       6. K9 0.32                        2327     0.5625     2273      56        
       7. Tytan 8.64                     2325     0.535714   2295      56        
       8. Resp 0.19                      2319     0.55       2276      60        
       9. Anechka 0.07                   2312     0.525      2290      60        
      10. Eeyore 1.49i                   2296     0.508929   2288      56        
      11. Arion 1.7                      2293     0.5        2293      60        
      12. Xpdnt 060602                   2288     0.508333   2281      60        
      13. Diablo 0.4                     2281     0.474138   2303      58        
      14. Thor'sHammer 2.28              2275     0.491667   2282      60        
      15. Tornado 0.84.2                 2257     0.482143   2272      56        
      16. Knightx 1.92                   2254     0.475      2275      60        
      17. Gaia 3.5                       2243     0.4375     2296      56        
      18. Hermann 1.72                   2239     0.446429   2284      56        
      19. Butcher 1.57                   2228     0.4        2313      60        
      20. EXchess 5.01b                  2225     0.4375     2278      56        
      21. Terra 3.4                      2213     0.419643   2281      56        
      22. Chispa 4.03                    2210     0.410714   2286      56        
      23. Scidlet 3.6                    2209     0.428571   2270      56        
      24. Waster 0.16                    2194     0.4        2279      60
  34. WildCat Коршунов Игорь

    • Команда форума
    Member Since:
    04.05.2006
    Message Count:
    3.599
    Likes Received:
    4
    Репутация:
    0
    Location:
    Гомель
    Оффлайн
    В спорте важно не только умение, но и удача.
  35. NS Нефёдов Сергей

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

Share This Page