Group Constraints for FMINCON
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
Tommaso Belluzzo
il 26 Apr 2020
Modificato: Tommaso Belluzzo
il 26 Apr 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 Commenti
Risposta accettata
John D'Errico
il 26 Apr 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 Commento
Più risposte (0)
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!