2013-07-23 3 views
10

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

У меня есть функция f(x1, x2, ..., xn), где мне нужно угадать x'ses и найти самое высокое значение для f. Функция имеет следующие свойства:

  • Общее количество или параметры обычно составляют от 40 до 60, поэтому подход грубой силы невозможен.

  • возможных значения для каждого х диапазона от 0,01 до 2,99

  • функция устойчива, а это означает, что более высокое значение F означает, что догадка для параметров лучше, и наоборот.

До сих пор я реализовал довольно простой метод в python. Сначала он устанавливает все параметры в 1, случайным образом догадывается о новых значениях и проверяет, превышает ли значение f ранее. Если нет, откат назад к предыдущим значениям. В петле с 10 000 итераций это, похоже, работает как-то, но результат, возможно, далек от совершенства.

Любые предложения по улучшению поиска оптимальных параметров будут оценены. Когда при поиске в этой проблеме возникли проблемы, связанные с MCMC, но это похоже на очень продвинутый метод, и мне нужно много времени, чтобы понять метод. Основные подсказки или концепции помогли бы мне больше, чем разработанные методы и алгоритмы.

+0

Добро пожаловать в SO! Я уверен, что есть формальное решение этой проблемы, но мое первое предположение было бы жадным алгоритмом ... Для каждого 'xn', найдите значение этого' xn', которое максимизирует 'f', и повторите? Это зависит от характера 'f'. Мысли? –

+0

Вы случайно не знаете, имеет ли функция несколько максимумов, или ожидается, что у нее будет много? Если это относительно небольшое количество максимумов, вы можете попробовать [gradient descent] (http://en.wikipedia.org/wiki/Gradient_descent) –

+0

Если вы отправляете неизвестное количество переменных функции, я бы предложил хранить их либо в массив, список или словарь. Вероятно, список для вашего дела. – Josh

ответ

7

Не делайте этого самостоятельно. Установите SciPy и используйте его процедуры optimization. scipy.optimize.minimize выглядит хорошо.

+1

Спасибо! У меня наконец было время попробовать это, и это работает как шарм. Теперь мне нужно бороться с желанием взглянуть на код, чтобы понять, как это работает :) – David

0

Вы всегда можете использовать список как один параметр, если в вашей задаче не указано, что вы не можете этого сделать. Список сделает его намного проще.

Смежные вопросы