6 views (last 30 days)

Show older comments

I have am optimization problem with two variables x and y where x and y are vectors.

I would like to add the foollowing constraint to fmincon :

if a<b then x<y

where a and b are known values.

I would like also to add in general x<y for every value of both vectors.

Many thanks!

xi
on 10 Oct 2019

Your constraint could be written as:

x-y < 1/(a<b)-1

when a<b, a<b=1, so, 1/(a<b)-1=0

when a>=b, a<b=0, so, 1/(a<b)-1=Inf, it is equivalent to not having constraint.

xi
on 13 Oct 2019

Ask yourself 3 question: How many vairable? how many constraints? and then how to write A and b.

Now you are saying L is a known vector, then, your vairables are just X of length N. you can write your constraint in this way:

-----------------------------

A=zeros(N^2, N);

b=ones(N^2,1);

count=0;

for i=1:N

for j=1:N

count=count+1;

A(count,i)=1;

A(count,j)=-1;

b(count)= 1/(L(i)<L(j))-1;

end

end

---------------------------------

or using N(N-1)/2 constraints instead of N^2

for i=1:N-1

for j=i:N

................

end

end

---------------------------------------

A better way is to sort L first, and get the ordering index using [~,index] = sort(L)

So you define your new variable X'=X(index); and solve X' instead.

then, you only need to write N-1 constraints:

X'(1)<X'(2), X'(2)<X'(3), ... X'(N-1)<X'(N)

b is simply b=zeros(N-1,1); You can figure out A. This should be much faster.

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

Start Hunting!