Можно ли определить максимальный размер шага (евклидово расстояние) для метода внутренней точки fmincon в Matlab? - PullRequest
0 голосов
/ 30 марта 2020

Я заинтересован в ограничении максимального шага, который метод внутренней точки fmincon может сделать из своей текущей точки. В частности, я хотел бы убедиться, что метод не может двигаться дальше, чем заданное евклидово расстояние на каждом шаге. Метод может быть go дальше, чем в конце, но не за один шаг. Таким образом, другими словами, предполагая максимальное евклидово расстояние 1,0, локальный оптимизатор может go от x0 = 3 до x = 6, но для этого потребуется как минимум 3 движения. Возможно ли изначально добиться этого с помощью одного из его вариантов, и я не знаю об этом?

До сих пор я пытался определить этот аспект как внешнее нелинейное ограничение. Сделав это, я должен был бы обнаружить, что метод остановился на границе, а затем перезапустить его там (что сбрасывает максимальное евклидово расстояние). Однако я получил странные результаты, как описано в этом вопросе о несовпадении в зависимости от ограничения .

Чтобы суммировать проблему связанного подхода, если вы попытаетесь минимизировать f (x) = x ^ 2, начиная с -0,4 (например) с указанным ограничением 1,0 как максимальным евклидовым расстоянием, fmincon не будет двигаться. Тем не менее, это было бы без этого ограничения (что, по сути, не должно влиять, так как -0,4 ближе, чем 1,0 к глобальному минимуму функции, т. Е. 0). Это пример кода с нелинейным ограничением и без него. Без:

[x, fval] = fmincon(@(x) x^2, -0.4,[],[],[],[], -10, 10);

Результат: x = 1.5231e-11 с fval (значение целевой функции) = 2.3199e-22.

Но, если мы добавим указанное ограничение не достигая более 1,0 от начала (на евклидовом расстоянии):

[x, fval] = fmincon(@(x) x^2, -0.4,[],[],[],[], -10, 10, @(x) NLConstraint(x, -0.4, 1.0));

При условии, что:

function [c, ceq] = NLConstraint(x, x0, radius)
    c = norm(x-x0) - radius;
    ceq=[];
end

Мы получаем x = -0,4000 и fval = 0,1600, поэтому fmincon не перемещается в конце концов, хотя оптимум достижим в пределах данного радиуса. Чтобы сделать его более странным, он успешно переместился, например, с -4 на -3 (поэтому ограничение кажется мне эффективным). Он даже сдвинется, если вы начнете с -0,7.

Поэтому, как уже было сказано, я был бы очень признателен всем, кто знает, как определить максимальное евклидово расстояние от текущего шага до следующего через внутреннюю точку fmincon. варианты (или хорошо, объяснение того, что я вижу с помощью внешнего нелинейного ограничения, обобщенного и описанного в 1 ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...