/ / нелінійні обмеження, обумовлені параметрами matlab - matlab, обмеження, нелінійна оптимізація

нелінійні обмеження, зумовлені параметрами matlab - matlab, обмеження, нелінійна оптимізація

Я намагаюся нав'язати нелінійний обмеження в оптимізаторі fmincon. Проблема полягає в тому, що нелінійне обмеження має бути актуальним лише тоді, коли один з параметрів є негативним. Код виглядає так:

function [c, ceq] = confun_Model11(param)
% Nonlinear inequality constraints: c(x)<=0
if  param(6)<0
c = (-4)*param(5)*param(7) + param(6)^2+eps;
else
c = [];
end

%Nonlinear equality constraints: ceq(x)=0
ceq = [];
end

Проблема в тому, що, наприклад, при використанні діагностичного параметра Matlab говорить, що немає нелінійних обмежень:

Constraints
Number of nonlinear inequality constraints: 0
Number of nonlinear equality constraints:   0

а також під час пошуку оптимального порушення цього нелінійного обмеження. Чи може хто-небудь сказати, чи не правильно визначив нелінійне обумовлене обмеження?

Відповіді:

2 для відповіді № 1

Я не впевнений, що fmincon може впоратись з рядом обмежень, що змінюються під час виконання.

Замість того, щоб спробувати вимкнути обмеження у вашій оцінці коду, краще було б повернути значення, яке задовольняє обмеження c (x) <= 0, коли ви не хочете, щоб обмеження було активним.

function [c, ceq] = confun_Model11(param)
% Nonlinear inequality constraints: c(x)<=0
c = (-4)*param(5)*param(7) + param(6)^2+eps;

% Ensure constraint isn"t violated if param(6) is positive
if param(6) >= 0
c = -abs(c);
end

%Nonlinear equality constraints: ceq(x)=0
ceq = [];
end

Тепер це все ще не чудово, тому що залежно відінші (лінійні?) обмеження на параметри, функція обмеження може бути розривною. Загалом ви краще досягаєте успіху з оптимізацією, якщо функції обмеження є безперервними та гладкими - так, спробуйте перевизначити функцію обмеження на щось без "якщо" тверджень або "abs" функцій ... тобто щось, що просто перетинає нуль, де ви хочете застосувати обмеження.

Для досягнення цієї мети може бути сенс використовувати більше одного нелінійного обмеження.