Автоматический подбор параметров движка

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

  1. Orlov Учаcтник

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

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

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    2.201
    Симпатии:
    64
    Репутация:
    3
    Оффлайн
    1. 21.prs 48
    2. 58.prs 47
    3. 28.prs 46
    4. 13.prs 40
    5. 36.prs 39
    6. 0.prs 38
    7. 17.prs 24
    8. 30.prs 18
    9. 54.prs 18
    10. 23.prs 15
    11. 27.prs 15
    12. 50.prs 13
    13. 43.prs 11
    14. 20.prs 3
    15. 11.prs 0
    16. 55.prs -1
    17. 49.prs -1
    18. 24.prs -3
    19. 53.prs -5
    20. 18.prs -6
    21. 31.prs -6
    22. 52.prs -19
    23. 51.prs -22
    24. 42.prs -29
    25. 48.prs -34
    26. 56.prs -34
    27. 57.prs -39
    28. 60.prs -43
    29. 59.prs -60
    30. 47.prs -73

    После третьего турнира на первом месте то, что я настраивал в ручную! Причем, в предыдуших турнирах 21.pst так высоко не забирался.
  4. TopicStarter Overlay

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

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

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.491
    Симпатии:
    3.118
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    См. мой пост #368 от 13/03/2007 11:58:58 :)
  6. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    В шашках у меня нормальная вероятность, достаточная для сходимости.
    У меня сходится (имеет достаточную скорость сходимости) если 5% порождается хороших особей с средней прибавкой 10 пунктов Эло. Рост на текущих алгоритмах с таким процентом порождения где-то 1.5 пункта Эло на 10000 партий. (посчитано на мат. модели)

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

    На модели это выглядит так:
    Код:
       // сначала "крутки"
       for k:=1 to kolOst-1 do
            for l:=k+1 to kolOst do
              Begin
              kolPart:=kolpart+1;
              if rezPart(Rating[k]-Rating[l])=1 then
                Begin
                  rez[1,k]:=rez[1,k]+1;
                  rez[1,l]:=rez[1,l]-1;
                end else
                Begin
                  rez[1,k]:=rez[1,k]-1;
                  rez[1,l]:=rez[1,l]+1;
                end;
                end;
    
           // "теперь новички"
            for k:=1 to kolOst do
            for l:=kolOst+1 to kolO do
              Begin
              kolPart:=kolpart+1;
              if rezPart(Rating[k]-Rating[l])=1 then
                Begin
                  rez[1,l]:=rez[1,l]-1;
                end else
                Begin
                  rez[1,l]:=rez[1,l]+1;
                end;
              end;
    Ну и вдобавок оказалось что свежим особям лучше немного "подпортить" результат, чтоб плохие особи не могли случайно попасть в оставляемые.
  7. Fruit Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    2.201
    Симпатии:
    64
    Репутация:
    3
    Оффлайн
    1. 0.prs 51
    2. 13.prs 50
    3. 28.prs 45
    4. 64.prs 42
    5. 58.prs 36
    6. 67.prs 30
    7. 27.prs 27
    8. 62.prs 24
    9. 63.prs 20
    10. 23.prs 20
    11. 36.prs 20
    12. 17.prs 16
    13. 21.prs 12
    14. 61.prs 12
    15. 50.prs 6
    16. 54.prs 5
    17. 71.prs 1
    18. 43.prs -9
    19. 70.prs -10
    20. 74.prs -10
    21. 66.prs -16
    22. 65.prs -17
    23. 20.prs -19
    24. 75.prs -21
    25. 76.prs -26
    26. 30.prs -38
    27. 72.prs -50
    28. 68.prs -54
    29. 73.prs -68
    30. 69.prs -79

    Думал, вот будет смешно, если победит дефолтная, а она взяла и победила :mad:....Не нравятся мне результаты. Версии меняются местами каждый турнир. Мож приостановить?
  8. TopicStarter Overlay

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

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

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

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    2.201
    Симпатии:
    64
    Репутация:
    3
    Оффлайн
    Выложи, если не трудно. Может быть это как-то поможет.
  11. NS Нефёдов Сергей

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

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Мне понадобился простенький генератор случайных чисел, который бы выбирал случайно число в промежутке 100..150. я тут накатал что-то похожее, вроде бы работает. Гляньте пож.код, на предмет багов. Может быть можно как-нибудь проще сделать? Жалко отдельную ветку создавать, да и не нужно пожалуй.

    int MIN = 100;
    int MAX = 150;
    unsigned int rnd;
    srand( (unsigned)time( NULL ) );
    for (;;) {
    rnd = (((double) rand() / (double) MAX) * MAX + MIN);
    if (rnd >= 100 && rnd <= 150) break;
    }
    printf("rnd - %d\n",rnd);

    Заранее благодарен.
  13. Orlov Учаcтник

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

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    rnd = rand() * (MAX-MIN) + MIN;
  15. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.491
    Симпатии:
    3.118
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    rnd = rand() % (MAX-MIN) + MIN;

    Не знаю как у вас в Дельфи :) а у нас в C функция rand() возвращает целое от 0 до RAND_MAX.
  16. Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    без цикла почему-то не работает :( Выдает 5-6-ти значные числа.
  17. TopicStarter Overlay

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

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

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

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

    Если выдает целое - тогда уж
    (double rand())/(double (RAND_MAX-1)) * (MAX-MIN) + MIN;

    А у тебя выдает только целое - в постановке задачи такого не было :)
    И причем в интервале [MIN,MAX-1] - вроде просили немного в другом интервале :)
  20. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.491
    Симпатии:
    3.118
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Верно подмечено. Надо не забыть прибавить единичку куда следует.
  21. Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    1. 0.prs 50
    2. 128.prs 37
    3. 116.prs 35
    4. 89.prs 35
    5. 72.prs 29
    6. 49.prs 28
    7. 15.prs 24
    8. 48.prs 22
    9. 104.prs 20
    10. 69.prs 17
    11. 111.prs 9
    12. 68.prs 8
    13. 95.prs 7
    14. 99.prs 6
    15. 26.prs 6
    16. 85.prs 2
    17. 119.prs 2
    18. 122.prs -8
    19. 100.prs -9
    20. 124.prs -9
    21. 123.prs -9
    22. 56.prs -10
    23. 117.prs -21
    24. 120.prs -23
    25. 121.prs -27
    26. 125.prs -29
    27. 115.prs -35
    28. 127.prs -49
    29. 126.prs -52
    30. 118.prs -56

    122.prs - died
    129.prs << 116.prs
    100.prs - died
    130.prs << 49.prs
    124.prs - died
    131.prs << 104.prs
    123.prs - died
    132.prs << 72.prs
    56.prs - died
    133.prs << 69.prs
    117.prs - died
    134.prs << 95.prs
    120.prs - died
    135.prs << 116.prs
    121.prs - died
    136.prs << 0.prs
    125.prs - died
    137.prs << 104.prs
    115.prs - died
    138.prs << 104.prs
    127.prs - died
    139.prs << 72.prs
    126.prs - died
    140.prs << 72.prs
    118.prs - died
    141.prs << 116.prs

    это после 8-ми суток на 3 пне 600-м.
  22. TopicStarter Overlay

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

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

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

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

    И проуентов 5-10 новых особей нужно всё-таки генерировать путем усереднения параметров двух хороших особей, это очень сильно увеличивает процент появления хороших особей.
    Случайными направлениями попадает в лучшую точку очень редко (но метко :) ), но случайных направлений (окресность одной точки) должно быть процентов 90, иначе происходит вырождение процесса.
  24. Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    да, смахивает на "заводские настройки" -)))))
  25. TopicStarter Overlay

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

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    У меня - это слишком редко. Надо как-то по другому.
  26. TopicStarter Overlay

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

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Люди попробуйте вручную написать свои настройки с нуля.
    И сравним результаты. Может действительно очень сложно улучшить "заводские" настройки? И случайным тыканием это вообще нереально.
  27. NS Нефёдов Сергей

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

    Обяснение почему плохо работают только случайные направления очень простое.

    Возмем точку на плоскоти - пусть это экстремум. Мы сейчас находимся в некоторой другой точке. Лучшие точки находятся внутри оскружности с центом в экстремуме, и проходящей через текущую точку.
    Генерируем мы особь - так-же рисуя окружность, только с центром в текущей точке.
    В случае плоскости (двух параметров) и малом радиусе окружности с центром в экстемуме - площадь пересечения областей двух окружностей - явно меньше 50%. В случае 30 параметров - площадь пересечения очень мала.

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

    Только нельзя переборщить с усереднением, так как очень быстро произойдет вырождение процесса.

    И нет смысла генерировать методом случайных направлений с маленьким шагом, так как усереднение уменьшает шаг.

    И еще неплохо бы делать контроль - что особь полученная усереднением уникальна.
  28. WinPooh В.М.

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

    Как если бы мы взяли хрестоматийных мартышек за пишущими машинками, но не просто предоставили им сочинять Шекспира наугад, а за каждую верную букву давали бы банан...
  29. TopicStarter Overlay

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

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

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

    И с небольшим процентом усереднений будет сходимость при любом количестве параметров :) хоть 2000, хоть 10000. Если у нас 10% порождений усереднением, то в идеале будем получать эти десять процентов хороших особей при любом количестве параметров.
    Только чем больше параметров - тем больше нужно сохраняемых хороших особей, чтоб было нормальное стягивание пространства.
  31. Chemer Максим

    • Участник
    Рег.:
    14.09.2006
    Сообщения:
    1.674
    Симпатии:
    13
    Репутация:
    0
    Адрес:
    Запорожье
    Оффлайн
    Самое время оптимизнуть Анечку! ;)
  32. NS Нефёдов Сергей

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

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

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Попробую найти автоматикой более-менее приличную таблицу для коня. 64 параметра - вроде не так и страшно.
  34. Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Лучше поиск улучшать. Эвристики какие-нибудь новые придумывать, не забывая по-ходу, что все гениальное просто :)
  35. TopicStarter Overlay

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

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

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