Исходная задача – это создание инструмента для описания «наблюдений». Оно же «подбор модели по экспериментальным данным».
Пользователь должен указать следующее:
1. описание данных (для нашего случая это набор пар
),
2. набор допустимых элементарных функций (например {+,-,*,/,exp.ln }), допустимых типов констант (вещественные, целые), из которых допустимо создавать искомую функцию
3. набор ограничений (обычно это алгебраические ограничения в виде равенств или неравенств).
4. критерий качества описания данных искомой функцией
(обычно это суммарная квадратичная ошибка, но могут быть и исключения; например, в задаче распознавания критерий формулируется с использованием логистической функции без квадратов)
5. общий критерий (обычно это функция от ошибки (из предыдущего пункта), «сложности» и «ресурсоемкости» подбираемой от «функции»; либо значение ошибки на проверочных данных (так называемый crosschecking))
Система работает следующим образом
* Делает интеллектуальный перебор функций
на основе разрешенных элементарных функций констант
* Если функция содержит в себе константы, то они подбираются системой глобальной оптимизации (ограничения и критерий см. в п 3,4)
* Далее делается вычисление качества функции (п.5) – пользователю выдаются наилучшая. Точнее, несколько наилучших функций в порядке убывания сложности (обычно, не более 10).
На данный момент система по сложности – порядка 0.5..1.0 млн. строк исходного кода. «Что-то» в ней сейчас можно получить, в том числе можно подбирать разностные/дифференциальные уравнения.
В этом контексте возникла задача со случайными величинами. Т.к. «любая» функция распределения может быть получена из равномерной [0,1), то роль «элементарной функции» выбрано именно это распределение.
Хотелось бы, чтобы пользователь мог сам сопрячь
* Точность соответствия исходным данным
* Соответствие распределения случайной величины равномерному [0,1)
Но вернемся к примеру первого сообщения. Вот такая постановка.
Минимизировать
где
- переменные в диапазоне [0,1) (ну, в реальности [0,1])
(
- число наблюдений)
Решив эту задачу, найдем
и
.
Затем можно вычислить критерий согласия
и подружить его с
как хотел пользователь.
Есть тут какая-нибудь засада, и если есть, как уменьшить шансы попадания в нею?
Есть запасной вариант, но он нетехнологичен. В принципе, задачу можно решать генетическим алгоритмом или каким-либо еще методом глобальной оптимизации. Например, шаг генетического алгоритма будет выглядеть так:
* В соответствии со стратегией алгоритма «выбрасывать» значение
* Потом найти значения
, минимизирующие ошибку (один из вариантов – через обратную функцию к
, если это возможно)
* Оценить соответствие равномерному распределению [0,1)
* Получить значение, скрестив суммарную квадратичную ошибку с
P. S. Чисто из любопытства, известна ли такая штука. Требуется составить такую
симметричную задачу оптимизации из
переменных
, чтобы оптимум достигался в точках равномерной сетки. Например, если
, то оптимум должен достигаться в точках [0.05, 0.15,…,0.95]. Если удастся сделать «хорошую» постановку такой задачи, то ее можно прямо прицепить к задаче подбора параметра (целиком, или на системе выборок, скажем, по 10 точек). Но, видимо, это уже совсем экзотика.