How to automatically constrain some of the unknown values in an optimization problem?
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponse acceptée
Torsten
le 20 Mar 2019
If you know in advance which elements of the x-vector are grouped together, you can simply use Aeq and beq to define the equality constraints. No need to use the nonlinear constraints option in ceq.
2 commentaires
Plus de réponses (1)
Matt J
le 20 Mar 2019
Modifié(e) : Matt J
le 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 commentaires
Matt J
le 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.
Voir également
Catégories
En savoir plus sur Solver Outputs and Iterative Display dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!