Matlab optimization - variables to satisfy L1 norm

조회 수: 14 (최근 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

댓글을 달려면 로그인하십시오.


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 CenterFile Exchange에서 Nonlinear Optimization에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by