Поиск максимума функции нескольких переменных

Есть функция f четырёх переменных: f=f (d, m, L, b) , вид функции неизвестен, однако, задавая эти 4 параметра, мы можем увидеть на выходе значение f. Также, не исключено, что, например, m зависит от d, а d зависит от L, хотя, возможно это не имет значения.

Задача - найти максимум функции f. Причем область значений 4 переменных задана.

Подойдет ли следующий алгоритм?
Фиксирую три параметра, меняю 1 - скажем, d, смотрю f на выходе, выбираю то d, при котором максимум (шаг некий задан) .
Затем фиксирую d, L, b и пробегаюсь по m, нахожу максимум.
И так дале.
В итоге получу набор 4 чисел, сответствующих максимуму ф-ии f, верно?
Здесь вычислять градиент ведь не нужно или я не прав?
7 года назад от DakLime

3 Ответы

0 голосов
Попробуйте метод "локальных вариаций" - он работает не зависимо от вида функции.
f=f (x1, x2, x3, x4)
естественно, сначала выбираете начальные значения (x10, x20, x30, x40) .
выбираете малое d0 и варьируете (x10, x20, x30, x40) .
затем рассматриваете функции f (x10, x20, x30, x40) , f (x10-d, x20, x30, x40) , f (x10+d, x20, x30, x40) , f (x10, x20-d, x30, x40) , f (x10, x20+d, x30, x40) , тут перебираете все возможные комбинации переменных с +d и -d.
и ищите максимум среди них
полученную комбинацию переменных, сответствующую максимуму, обозначаете как (x10, x20, x30, x40)
и т. д. определенное количество раз (это число следует подбирать при конкретном расчете)
затем берете новое d=d/2, например,
и т. д. и т. п.

если x1, x2, x3, x4 имеют сильно разный диапазон изменения, то то для каждого xi выбирается свое di
*
если у вас m зависит от d, а d зависит от L, то это очень важно, так как сократится количество переменных и, следовательно, сократится количество вычислений.
*
а та процедура нахождения минимума, которую предложили вы -не верна, это легко увидеть на примере функций 2-х переменных.
7 года назад от сергей муратов
0 голосов
Кроме кординатного спуска (с постоянным и переменным шагом) есть еще методы градиентного спуска (с постоянным и переменным шагом) , метод наискорейшего спуска, метод сопряженных направлений. Гуглите и выгуглите!
7 года назад от Алексей Дудкинский
0 голосов
Вы предлагаете метод "покординатного спуска", хотя здесь будет "подъёма". Не для любой функции его можно применить. Надо хоть что-то о функции знать. Но, возможно и так, как вы предлагаете. Только потом нужно ещё несколько раз начать движение с первой кординаты, затем 2й. до тех пор, пока изменений в значениях функции не будет. Затем надо уменьшить шаг движения и снова всё повторить. До тех пор, пока шаг не станет меньше "разумного". Желательно, раз f неизвестна, выполнить процедуру от случайных начальных кординат несколько раз. Если получится одно и то же, то это довод за то, что вы нашли экстремум. Довод, но не полная уверенность.
7 года назад от Алексей Королев

Связанные вопросы