25 views (last 30 days)

(sorry, I miss the objective function before. I have edited it well)

I am trying to set the L0-norm constraints, which give a constrain on the element of the variables.

e.g. I have 3 variables, x1 x2 x3. and I have some "normal" constraints, like below.

x1>0;

x1<0.3;

x2>0;

x1<0.4;

x3>0;

x1<0.5;

The object function to get the mininum is

fx = - (x1+x2+x3);

But I have a L0- norm like constrains. That is the maxinum amount of the chosen variable from x1,x2,x3 is 2.

|x1|0 + |x2|0+|x3|0 <=2 (sorry I don't know how to input the corner mark).

So the answer should be [0,0.3,0.4] ,that is, x2 and x3 chosen. How to make this constrains in Matlab? Could I use Mixed-integer linear programming (MILP) to achieve it? Could anyone give me some suggestions on it? That will be very appreciated.

Bruno Luong
on 20 Aug 2020

Edited: Bruno Luong
on 20 Aug 2020

Brute-force method

% Original LP problem

f = -ones(1,3);

A=[-eye(3);

eye(3)];

b = [0 0 0 0.3 0.4 0.5]';

fvalmin = Inf;

for i=1:3

% Add constraint x(i)==0, meaning l0-norm is <= 2

Aeq = zeros(1,3);

Aeq(i) = 1;

beq = 0;

[xi,fvali] = linprog(f,A,b,Aeq,beq);

% Select the solution that returns minimal cost

if fvali < fvalmin

x = xi;

fvalmin = fvali;

end

end

x

Bruno Luong
on 19 Aug 2020

Well the brute force method is to solve 3 LP problems assuming

- x1 = 0
- x2 = 0
- x3 = 0

and see which returns a solution.

wei zhang
on 20 Aug 2020

Bruno Luong
on 20 Aug 2020

Opportunities for recent engineering grads.

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

Start Hunting!
## 0 Comments

Sign in to comment.