# Group Constraints for FMINCON

1 vue (au cours des 30 derniers jours)
Tommaso Belluzzo le 26 Avr 2020
Hi all! I'm writing a model that needs to minimize 6 variables through FMINCON: o, a, b, w, kappa, gamma. The variable options is defined as follows:
optimset(optimset(@fmincon),'Diagnostics','off','Display','off','LargeScale','off','MaxSQPIter',1000,'TolFun',1e-6)
The variables are already subject to the following lower/upper boundaries:
• o, a, b, w between 0 and Inf;
• kappa, gamma strictly positive between (2 * options.TolCon) and Inf;
I need to ensure a few constraints are respected:
• o, a, b, w must approximately sum to 1;
• kappa * gamma must be approximately equal to 1;
If I didn't have to consider the last two variables, I would have probably used A and b parameters of FMINCON as follows:
A = [-eye(3); ones(1,3)];
b = [(zeros(3,1) + (2 * options.TolCon)); (1 - (2 * options.TolCon))];
But going for that approach with two distinct constraints (an additive one and a multiplicative one) is pretty weird and I really have no clue about how to set A and b.
It seems that the nonlcon parameter may be what I'm looking for, but it's unclear to me how to formulate it properly.
Thanks!
##### 0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

### Réponse acceptée

John D'Errico le 26 Avr 2020
Approximately equals is NOT an equality constraint.
But you can write it as TWO inequality constraints. So if you want kappa*gamm approximately equal to 1, then that means you want the product to be within some given tolerance of 1. That is:
kappa*gamm >= 1 - tol
kappa*gamm <= 1 + tol
You can then swap the inequality direction on the first constraint by multiplying by -1.
-kappa*gamm <= -(1 - tol)
Note my use of gamm as a variable name, instead of gamma. Since there is a function called gamma that is often quite useful, I strongly suggest not using a variable named gamma.
##### 1 commentaireAfficher -1 commentaires plus anciensMasquer -1 commentaires plus anciens
Tommaso Belluzzo le 26 Avr 2020
Modifié(e) : Tommaso Belluzzo le 26 Avr 2020
Thanks for your answer. May I kindly as you how I can implement this on the point of view of Matlab code?
I think I have to write a nonlcon function like this?
function [c,ceq] = my_nonlcon(x,options)
kappa = x(5);
gamm = x(6);
kg = kappa * gamm;
c1 = kg - (1 - (2 * options.TolCon));
c2 = kg - (1 + (2 * options.TolCon));
c = [c1; c2];
ceq = [];
end
Together with A and b contraints formulated as follows:
A = [[-eye(3) zeros(3)]; [ones(1,4) zeros(1,2)]; zeros(2,6)];
b = [(zeros(3,1) + (2 * options.TolCon)); (1 - (2 * options.TolCon)); zeros(2,1)];
Am I right?

Connectez-vous pour commenter.

### Catégories

En savoir plus sur Solver Outputs and Iterative Display dans Help Center et File Exchange

R2018b

### Community Treasure Hunt

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

Start Hunting!

Translated by