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

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

  1. Orlov Учаcтник

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

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

    Шаг тоже можно менять, он подбирается вручную.

    Для подбора используется разновидность спуска - метод случайных направлений (Спуск не наискорейший, то есть найдя направление делаем по нему только один шаг)

    Партии играются начиная с случайных позициях (Для настройки ОФ шашках в данный момент 274 начальных позиции, с учетом разного цвета 548 позиций)

    Такая оболочка под свой движок пишется быстро - у меня ушло на написание несколько часов. Ну и плюс время на настройку алгоритмов для лучшей сходимости.


    За первые два дня счета было получено почти 200 пунктов Эло прибавки на суперкоротких контролях, потом рост силы приостановился - необходимо увеличивать количество параметров в ОФ.
  3. NS Нефёдов Сергей

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

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Направление как я понял это некоторый вес ? И куда делается шаг ? Если, к примеру ладья на седьмой горизонтали стоит 0,2 от стоимости пешки то после шага мы получим 0,19 или 0,21 ?
  5. NS Нефёдов Сергей

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

    Если ладья на седьмой стоит 0.2, то только она изменится только в случае покоординатного спуска.
    А используется не покоординатный спуск, а метод случайных направлений.


    В случае изменения веса только одного признака. Вес изменится на случайную величину от -Шаг до +Шаг (на самом деле это не шаг, а Дельта для вычисления производной)

    Добавлено

    Хотя можно назвать это и шагом :)

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

    Обычно для решения этой задачи используются разный разновидности спусков.
  6. Orlov Учаcтник

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Благодарю за ликбез :) Вечером возьму в руки алгебру :) А вообще тема очень интерестная.
  7. TopicStarter Overlay

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

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

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

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

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

    Я переделаю по-другому - пронумерую все особи (каждая новая особь порождается с новым номером), сохраню базу всех результатов, и по ней (базе результатов) буду считать рейтинг. Хотя в этом случае возможны большие искажения.
  10. TopicStarter Overlay

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

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

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

    А можно исключить из обсчета Только новые (исключить все новые, шесть особей у меня остаются с предыдущей итерации) на данной итерации особи.
    Тогда искажений не будет вообще.
  12. Orlov Учаcтник

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

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

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

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

    У кого какие будут соображения?
  15. NS Нефёдов Сергей

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

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

    У меня 20 персоналий в два круга, Шесть - это зянявшие места с первого по шестое на предыдущей итерации. 14 - порожденные от победителя предыдущей итерации.
    (при сортировке добавляю случайную величину к результату, так как обычно идет дележ очков)

    Победитель меняется меньше чем в 50% случаев.

    Схема с десятью персоналиями, сохранением только одного сильнейшего, и порождением от него - у меня была изначально, сходится она намного хуже.


    И выводимая статистика - я вывожу весь набор весов победителя, его результат, и его номер (чтоб посмотреть не входит ли он в шестерку лучших из предыдущей итерации), а так-же результаты шести победителей предыдущей итерации.
  17. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Я ошибся - у меня не 190 партий на каждой итерации, а 380.
  18. TopicStarter Overlay

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

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

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    2.201
    Симпатии:
    64
    Репутация:
    3
    Оффлайн
    WildCat, опиши, что потребуется.....Мож смогу чем помочь. Правда, мне комп время от времени нужен :)
  20. TopicStarter Overlay

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

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Потребуется просто запускать программу.
    Прерывать ее можно в любой момент.
  21. Fruit Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    2.201
    Симпатии:
    64
    Репутация:
    3
    Оффлайн
    Отправил в личку свой маил. :)
  22. TopicStarter Overlay

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

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

    • Участник
    Рег.:
    27.02.2007
    Сообщения:
    177
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Могу оказать посильную помощь своим офисным компом(ночное тестирование) P4-2800 512RAM
    [email protected]
  24. TopicStarter Overlay

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

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

    Orlov
    Fruit
    Пока попробую настроить систему так, чтобы она давала пользу. А потом вышлю вам программу.
  25. TopicStarter Overlay

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

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

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

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

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

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Я думаю нужно партий 200 - 300.
    Вряд ли локальные укстремумы это проблема.
  29. NS Нефёдов Сергей

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

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Если зависимость силы прожденных от силы родителя вот такая -
    Rating:=Rating[1]+Random(106)-100;
    (максимум растем на 5 пунктов Эло, максимальное падение 100 пунктов Эло), то при 20 персоналиях оптимум - предварительный 25 кругов, сохраняем 6 лучших.
    Сейчас дам более точные цифры.


    Количество кругов и количество сохряняемых зависит от формулы силы порождаемых.
    Оптимум можно посчитать для каждого конкретного случая.
  31. TopicStarter Overlay

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

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

    Решил пока использовать 10 в 10 кругов, т.е. каждая по 90 игр.
  32. NS Нефёдов Сергей

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

    Партий каждого движка 228
    Партий на итерацию 2280,
    прибавка на одной итерации 0.171 пункт.

    Но это взято очень плохое поведение новых особей.
  33. NS Нефёдов Сергей

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

    Прибавка на партию такая-же. (0.000075)
    При хорошем распределении силы порождаемых это конечно не оптимум (в четыре раза падает скорость роста силы по сравнению с оптимумом)


    Rating:=Rating[1]+Random(141)-100; (-100;+40)
    При таком-же алгоритме - прибавка 0.008 пунктов Эло на партию.
    То есть при 5 сек. на партию скорость роста силы около 5 пунктов в час...


    У меня первые два дня (при 20-ти особях) сила расла примерно с этой-же скоростью.
  34. TopicStarter Overlay

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

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

    www.igorkorshunov.narod.ru/WildCatGenetic.rar - вот версия с генетическим алгоритмом (10 персоналитей по 10 кругов).
    Нужно ее запустить и потом набрать "gen".
    Результаты последней итерации сохраняются в файл "table.txt".
    Прерывать работу программы можно в любое время, будет потеряно не боле пары минут вычислений.

    Чем больше она будет считать, тем лучше.
  35. Fruit Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    2.201
    Симпатии:
    64
    Репутация:
    3
    Оффлайн
    Интересно, сколько времени потребуется, чтобы получить хотя бы +10 пунктов.

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