# How to automatically constrain some of the unknown values in an optimization problem?

2 views (last 30 days)

Show older comments

I have an optimization problem with several unknown values (x) which is a part of an array:

A=[0 0 x(1) x(2) 0 0 0 x(3) x(4) x(5) 0 0 0 x(6) 0 0 x(7) x(8)];

The x-values are to be optimized but each x-'group', which is separated by the zeros, are to be equal to each other. ex.: x(1)=x(2) and x(3)=x(4)=x(5) and so on. x(6) is not to be equal to another x because it is not in a 'group' with other x's, therfore x(6) will not be constrained.

I am supposed to write this constraint as ceq(x)=[..] in a constraint function.

Is there any automatic coding that can constrain these x-values in the way i explained?

##### 0 Comments

### Accepted Answer

Torsten
on 20 Mar 2019

##### 2 Comments

### More Answers (1)

Matt J
on 20 Mar 2019

Edited: Matt J
on 20 Mar 2019

I will assume you have some binary vector v which indicates the groupings of the variables, so for example this,

[0 0 x(1) x(2) 0 0 0 x(3) x(4) x(5) 0 0 0 x(6) 0 0 x(7) x(8)];

would be input as the vector

v=[0 0 1 1 0 0 0 1 1 1 0 0 0 1 0 0 1 1];

Then you can construct the linear equality constraint matrices Aeq, beq as follows

Aeq=diff(speye(numel(v)) ,1,1);

discard=(v(1:end-1)==0)|(diff(v)~=0);

Aeq(discard,:)=[];

Aeq(:,~v)=[];

beq=zeros(size(Aeq,1),1);

##### 2 Comments

Matt J
on 20 Mar 2019

For the 8-variable example that you posted, this should result in

>> full(Aeq), full(beq).'

ans =

-1 1 0 0 0 0 0 0

0 0 -1 1 0 0 0 0

0 0 0 -1 1 0 0 0

0 0 0 0 0 0 -1 1

ans =

0 0 0 0

indicating that the first two unknowns will be equal, the next 3 unknowns will be equal and the final two unknowns will be equal.

### See Also

### Categories

### Products

### Community Treasure Hunt

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

Start Hunting!