Прежде всего позвольте мне сказать, что мне не хватает опыта с научной математикой или статистикой - так что это может быть очень хорошо известная проблема, но я не знаю с чего начать.Максимизируйте функцию со многими параметрами (python)
У меня есть функция f(x1, x2, ..., xn)
, где мне нужно угадать x'ses и найти самое высокое значение для f
. Функция имеет следующие свойства:
Общее количество или параметры обычно составляют от 40 до 60, поэтому подход грубой силы невозможен.
возможных значения для каждого х диапазона от 0,01 до 2,99
функция устойчива, а это означает, что более высокое значение F означает, что догадка для параметров лучше, и наоборот.
До сих пор я реализовал довольно простой метод в python. Сначала он устанавливает все параметры в 1, случайным образом догадывается о новых значениях и проверяет, превышает ли значение f ранее. Если нет, откат назад к предыдущим значениям. В петле с 10 000 итераций это, похоже, работает как-то, но результат, возможно, далек от совершенства.
Любые предложения по улучшению поиска оптимальных параметров будут оценены. Когда при поиске в этой проблеме возникли проблемы, связанные с MCMC, но это похоже на очень продвинутый метод, и мне нужно много времени, чтобы понять метод. Основные подсказки или концепции помогли бы мне больше, чем разработанные методы и алгоритмы.
Добро пожаловать в SO! Я уверен, что есть формальное решение этой проблемы, но мое первое предположение было бы жадным алгоритмом ... Для каждого 'xn', найдите значение этого' xn', которое максимизирует 'f', и повторите? Это зависит от характера 'f'. Мысли? –
Вы случайно не знаете, имеет ли функция несколько максимумов, или ожидается, что у нее будет много? Если это относительно небольшое количество максимумов, вы можете попробовать [gradient descent] (http://en.wikipedia.org/wiki/Gradient_descent) –
Если вы отправляете неизвестное количество переменных функции, я бы предложил хранить их либо в массив, список или словарь. Вероятно, список для вашего дела. – Josh