Я физик-экспериментатор, пытающийся автоматизировать относительно простую (но чувствительную) оптимизацию моих измерений, которая в настоящее время выполняется полностью вручную и отнимает у меня много времени.После некоторых размышлений и советов в комментариях я сократил проблему до следующего:
Есть некоторая функция f (x), которую я хочу максимизировать.Тем не менее, я могу только оценить f (x);Я не могу оценить его производную явно.Более того, я не могу выбрать большой диапазон значений x;если f (x) <порог, у меня проблемы (и на восстановление у меня уходит целый день).К счастью, у меня есть одно начальное значение x_0 такое, что f (x_0)> порог, и я могу угадать некоторый начальный размер шага eps, для которого также имеет место порог f (x_0 + eps)> (однако, я не знаю, если f (x_0)+ eps)> или
В настоящее время я делаю это вручную следующим образом: я оцениваю f (x_0), а затем f (x_0 + eps).Если это приводит к снижению, я вместо этого оцениваю f (x_0-eps).Основываясь на градиенте (по сути, я просто смотрю, есть ли большие шаги или большие шаги с порогом, который я не могу пересечь), я увеличиваю или уменьшаю eps и продолжаю поиск в том же направлении, пока не будет найден максимум, который я замечаю, потому что f(х) начинает уменьшаться.Затем я возвращаюсь к этому максимуму.Таким образом, я всегда прощупываю верхнюю часть максимума и таким образом остаюсь в безопасном диапазоне.