Matlab optimization - variables to satisfy L1 norm

13 ビュー (過去 30 日間)
Simon Philipp Hehenberger
Simon Philipp Hehenberger 2024 年 7 月 10 日
コメント済み: Manikanta Aditya 2024 年 7 月 10 日
Hi,
I am trying to set up an optimization problem, the variables of my problem are stored in vector x, which is of length 4.
How do I constrain my optimization such that the first three elements in my vector x satisfy the L1 norm.
In my current setup i am using fmincon with the following code:
x0=[A_init'; th_init];
opt=optimoptions('fmincon','MaxFunctionEvaluations',1e5,'Display','iter','MaxIterations',1e3,...
'Algorithm','sqp','FiniteDifferenceStepSize',1e-6,'DiffMinChange',0.00051,'DiffMaxChange',0.2);
[x,fval,exitflag,output]=fmincon(@(x)costFunction_es_sa(x,a,N,epRm,epR_target),x0,[],[],[],[],[0.1 0.1 0.1 0.01]',[1 1 1 0.61]',[],opt)

回答 (2 件)

Manikanta Aditya
Manikanta Aditya 2024 年 7 月 10 日
To constrain the first three elements of your vector ( x ) to satisfy the ( L1 ) norm in an optimization problem using fmincon in MATLAB, you can add a nonlinear constraint function.
% Initial guess
x0 = [A_init'; th_init];
% Optimization options
opt = optimoptions('fmincon', 'MaxFunctionEvaluations', 1e5, 'Display', 'iter', ...
'MaxIterations', 1e3, 'Algorithm', 'sqp', 'FiniteDifferenceStepSize', 1e-6, ...
'DiffMinChange', 0.00051, 'DiffMaxChange', 0.2);
% Nonlinear constraint function
nonlcon = @(x) l1NormConstraint(x);
% Call fmincon with the nonlinear constraint
[x, fval, exitflag, output] = fmincon(@(x) costFunction_es_sa(x, a, N, epRm, epR_target), ...
x0, [], [], [], [], [0.1 0.1 0.1 0.01]', [1 1 1 0.61]', nonlcon, opt);
% Nonlinear constraint function definition
function [c, ceq] = l1NormConstraint(x)
% L1 norm constraint for the first three elements of x
c = sum(abs(x(1:3))) - c_bound; % c_bound is your desired bound for the L1 norm
ceq = []; % No equality constraints
end
  5 件のコメント
Simon Philipp Hehenberger
Simon Philipp Hehenberger 2024 年 7 月 10 日
Initial condition not satisfying the nonlinear constraint was indeed the issue.
Thanks alot for your help @Aquatris and @Manikanta Aditya
Manikanta Aditya
Manikanta Aditya 2024 年 7 月 10 日
Thanks for informing @Simon Philipp Hehenberger

サインインしてコメントする。


Aquatris
Aquatris 2024 年 7 月 10 日
編集済み: Aquatris 2024 年 7 月 10 日
You create a nonlinear constraint functio and give it as an argument to the fmincon.
[x,fval,exitflag,output]=fmincon(@(x)costFunction_es_sa(x,a,N,epRm,epR_target),x0,...
[],[],[],[],[0.1 0.1 0.1 0.01]',[1 1 1 0.61]',@normL1,opt)
function y = normL1(x); %fmincon will try to satisfy myFun(x)<=0
y = sum(abs(x(1:3))) - 5; % want it to be less than 5 for instance
end

カテゴリ

Help Center および File ExchangeNonlinear Optimization についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by