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

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

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

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

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

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

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

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

    Тестировал на 6, 28 и 100 параметрах в таблице, на 100 и 1000 итераций.
    После каждой итерации вот такой код.
    if ch<k then Dob:=Dob/1.2 Else Dob:=Dob*1.2;
    Лучший вариант k=25.
    Изменяем вот таким образом:
    Код:
          ist:=Random(200)+1;
          for j:=1 to Razm do Gen[i].V[j]:=Gen[ist].V[j]+Random*Dob;
          Norm(Gen[i].V); // приводит вектор к виду - сумма элеметов равна нулю,
                                 // сумма квадратов элементов равна единице.
          Gen[i].Rod:=ist;
  6. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Похоже никому не интересно :(
    Буду сам с собой.
    Нашел статью где авторы утверждают что смогли заставить программу искать экстремум функции Розенброка от 2000 параметров (Гибридными методами) - основное это часть порождений градиентным спуском от сильнейшей особи.
    Мне пока удалось добиться поиска большого числа локальных экстремумов и очень быстрой (по сравнению со старыми алгоритмами) сходимости - пока метод случайных направлением с повторными попытками в направлении наискорейшего спуска и с сложными алгоритмами смерти особей (наиболее отдаленные неприкасаемые + смерть от перенаселения) Попробую добавить градиентный спуск от сильнейшей особи.
  7. Chemer Максим

    • Участник
    Рег.:
    14.09.2006
    Сообщения:
    1.674
    Симпатии:
    13
    Репутация:
    0
    Адрес:
    Запорожье
    Оффлайн
    Блин пропустил - конечно же интересно! Если есть сцылка на эту статью - скинь. Оптимизация моя любимая тема в вышке еще с института.
  8. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    http://paklin.newmail.ru/mater/hybrid.html
    только для настройки Оф это не нужно. Не имеет смысла настолько близко подходить к экстремуму, а вдали от экстремума градиентные методы работают не так хорошо. Главное собирать все экстремумы, а это у меня получилось.
    (прошлая версия программы собрала все особи в практически в одну точку - нашла один локальный экстремум, правда достаточно хороший :) )
    Новая умеет собирать очень большое количество локальных экстремумов + имеет на порядки лучшую сходимость: правильный расчет шага, плюс повторные шаги в направлении наискорейшего спуска, плюс больше порождений от сильнейшей версии, ну и все остальные алгоритмы улучшены - готов считать тысячи параметров (прошлая за пару месяцев хорошо посчитала чуть больше 80-ти).
    Вдобавок почти в 3 раза ускорил (NPS) саму шашечную программу, сделал хорошие сортировки.
    Так что готов сделать нечто весьма сильное.

    вот, если интересно еще ссылка на метод главных осей (на хороших функциях без аналитической производной просто зверь)
    http://alglib.sources.ru/optimization/principalaxis.php
  9. TopicStarter Overlay

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

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Тут буржуи обсуждают нашу тему: http://64.68.157.89/forum/viewtopic.php?t=16919
    Мне понравилась забавная идея от автора Спайка. Может стоит попробовать еще раз? :)
  10. NS Нефёдов Сергей

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

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

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

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

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

    Насчет генетики, что я имею против - допустим у нас два праметра. Разместим особей на плоскости.
    Проведем от каждой особи горизонтальные и вертикальные линии (параллельно оси координат).
    Что такое предложенный алгоритм - это беганье по узлам нарисованной сетки.
    Тяжело придумать вид функции силы движка от этих двух параметров при котором такой метод будет работать.
  14. TopicStarter Overlay

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

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

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

    но лучше конечно делать по-другому...
  16. варяг Учаcтник

    • Участник
    Рег.:
    23.10.2006
    Сообщения:
    98
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Гонду-Раша
    Оффлайн
    Как думаете, какую можно получить прибавку в силе после автоматической настройки весов по сравнению с теми весами, которые вручную подобраны уже неплохо, как в сильнейших программах типа WildCat? Неужели несколько сотен пунктов?
  17. NS Нефёдов Сергей

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

    • Участник
    Рег.:
    23.10.2006
    Сообщения:
    98
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Гонду-Раша
    Оффлайн
    Вероятно, значения весов тестировались многократно. Да и будь они совсем плохими, сильнейшие программы не были бы сильнейшими.
  19. NS Нефёдов Сергей

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

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

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

    1. Создадим EPD-файл, в который сложим довольно большое число позиций из разных стадий игры. Для каждой позиции укажем оценку, которую дает такой позиции кто-то весьма авторитетный - например, Рыбка после некоторого перебора из этой позиции. После этого запустим свой движок, с нашей функцией оценки, и пусть он тоже выполнит перебор, и выдаст оценку каждой позиции. В итоге получаем два столбца чисел: X - наша оценка, Y - оценка авторитета. Вычислим коэффициент корреляции между этими столбцами.
    После этого начинаем варьировать весами своей оценочной функции, а также менять эвристики перебора (продления, сокращения, форсированный вариант и т.д.). После каждого варьирования вычисляем коэффициент корреляции. Из всех возможных вариантов выбираем такой, при котором коэффициент корреляции максимален.
    Замечание: поскольку в этом методе мы сравниваем две аналогичных величины - оценки позиций, то вместо коэффициента корреляции можно вычислять среднее квадратичное отклонение между ними, и пытаться минимизировать это отклонение. Если мы это сделаем, то получим просто близкие оценки двух программ, а добиваться этого совершенно не обязательно. Достаточно того, чтобы более высоким значениям одной оценки соответствовали более высокие значения другой, и наоборот. Поэтому, в этом случае вычисление коэффициента корреляции предпочтительнее.

    2. Возьмем большую базу партий, сыгранных игроками с довольно высоким рейтингом (например, выше 2300). Результат каждой партии известен, поэтому можно вычислять коэффициент корреляции между своими оценками позиций, и процентом выигранных партий. Оптимизируем свою оценку тем же методом, что и в п.1.

    3. Для эндшпилей есть таблицы Налимова, которые точно указывают - выиграна позиция или нет. Здесь тоже можно подбирать такую оценку позиции, которая имеет максимальную корреляцию с величиной, обратно пропорциональной дистанции до выигрыша. В ничейных позициях можно ограничиться вычислением среднего квадратичного отклонения оценки от нуля (если у нас оценка ничьи равна нулю).

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

    5. Есть еще один способ оптимизации, который позволяет обойтись без оценок авторитетов и без больших баз партий. Мы можем вычислить статическую оценку позиций, а затем выполнить перебор из этих позиций, и получить минимаксную оценку. В результате имеем пары чисел: X - статическая оценка, Y - минимаксная оценка. Добиваемся максимальной корреляции между этими величинами. В результате получаем оценочную функцию, которая безо всякого перебора умеет с высокой степенью вероятности угадывать потенциальный минимакс. Такая программа могла бы обладать более глубоким пониманием позиций, даже без глубокого перебора.

    6. Еще один способ - подгонка весов оценочной функции и других параметров программы динамически, прямо по ходу партии. Для этого во время игры вычисляем корреляцию между статикой и минимаксом. Пока корреляция высокая - пользуемся теми параметрами, которые есть. Как только коэффициент корреляции начинает уменьшаться - корректируем параметы оценки и поиска, добиваясь увеличения корреляции.
  21. thenewone Евгений Манев

    • Участник
    • Старожил
    Рег.:
    09.06.2006
    Сообщения:
    3.173
    Симпатии:
    18
    Репутация:
    1
    Адрес:
    Пловдив
    Оффлайн
    5 и 6 — талантливо (чтоб не сказать — гениально :) )
    На мой диллетантский взгляд, конечно.
  22. Fruit Александр

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

    NS (22:03:10 11/07/2007)
    3. После этого началась работа по совершенствованию оценочной функции и алгоритма поиска. Оптимизация оценочной функции выполнялась путем корреляционного анализа. Я добивался максимальной корреляции статической оценки и минимакса.
  23. варяг Учаcтник

    • Участник
    Рег.:
    23.10.2006
    Сообщения:
    98
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Гонду-Раша
    Оффлайн
    ИМХО Слишком просто, чтобы быть похожим на правду. Известны ли достоверные случаи (кроме Стрелки), когда данные методы приводили к реальному результату (повышению силы)?
  24. варяг Учаcтник

    • Участник
    Рег.:
    23.10.2006
    Сообщения:
    98
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Гонду-Раша
    Оффлайн
  25. Fruit Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    2.201
    Симпатии:
    64
    Репутация:
    3
    Оффлайн
    NS и его шашечная программа. В кратчайшие сроки, уже вторая по силе в мире. По видимому, Рыбка также использовала указанные методы....ИМХО описать можно просто, а реализовывать явно сложнее и значительно дольше по времени. Хорошее описание всегда должно быть простым и понятным. Что ещё можно от него тербовать?
  26. варяг Учаcтник

    • Участник
    Рег.:
    23.10.2006
    Сообщения:
    98
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Гонду-Раша
    Оффлайн
    NS использовал один из этих методов?

    А еще? И желательно, чтобы не "по видимому", а какой-нибудь реальный пример

    Кажется Марков что-то делал в этом направлении. Кто-нибудь знает подробности?
  27. Fruit Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    2.201
    Симпатии:
    64
    Репутация:
    3
    Оффлайн
    По рыбке мы точной правды долго не узнаем. Но заявления Сергея Маркова (общался с Райлихом и тот ему говорил о чём-то подобном), NS (о том, что Райлих так сделал и то, что у него получилось в шашках также) и Юрия Осипова (где он говорил о рыбке), позволяют не воспринимать всерьёз моё "по видимому". :)

    Последный раз, когда я общался с С. Марковым (достаточно давно, до Стрелки), он говорил, что интуитивно настроил веса (те, которые уже были давно) в SmarThink очень хорошо и метод подбора весов по базе партий не дал существенных изменений в силе игры
  28. Fruit Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    2.201
    Симпатии:
    64
    Репутация:
    3
    Оффлайн
    Юрий Осипов:В результате имеем пары чисел: X - статическая оценка, Y - минимаксная оценка. Добиваемся максимальной корреляции между этими величинами. В результате получаем оценочную функцию, которая безо всякого перебора умеет с высокой степенью вероятности угадывать потенциальный минимакс

    NS: После этого началась работа по совершенствованию оценочной функции и алгоритма поиска. Оптимизация оценочной функции выполнялась путем корреляционного анализа. Я добивался максимальной корреляции статической оценки и минимакса.
  29. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    Шашечная программа Сергея уже первая в мире :) по последним данным
  30. TopicStarter Overlay

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

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

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

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

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

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

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

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

    • Участник
    Рег.:
    18.06.2007
    Сообщения:
    399
    Симпатии:
    475
    Репутация:
    11
    Адрес:
    Правда
    Оффлайн
    А работающие алгоритмы, как я понимаю - большой секрет ?

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

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