Bon voila ,
J'ai une problématique un peu particulière que je sais "théoriquement" coder mais l’algorithme d'optimisation (fmincon) ne semble pas faire le job.
Pour résumer,
J'ai un vecteur A={A(1); .... A(9000)} composé de 9000 valeurs comprises entre 0 et 1 classées en ordre croissant
L'idée est de trouver des "range" de valeurs de A tels que les moyennes de chaque groupe ainsi constitué se rapproche au plus d'une valeur cible pour chacun des groupes. Ces valeurs délimitant les "range" sont D={D(1)...D(19)}.
les groupes sont tels que ci-dessous :
[0 ; D(1)[ , [D(1) ; D(2)[ ... [D(19) ; 1[
Le vecteur des moyennes cibles de 20 valeurs T={T(1)...T(20)} classées en ordre croissant .
Pour chacune des valeurs de D, on calcule la moyenne des valeurs de A telles que :
mu(0) = moyenne de A pour 0=<A(i)<D(1)
mu(1) = moyenne de A pour D(1)=<A(i)<D(2)
....
mu(20) = moyenne de A pour D(19)=<A(i)<1
Je configure donc une fonction qui calcule une erreur de "fitting" en fonction des valeurs de D : Erreur Fitting = somme[ValAbsolue (mu(i)-T(i))/T(i)]
Avec cette fonction je cherche donc les valeurs du vecteur D qui minimise la fonction ErreurFitting sachant que j'ai pour contrainte que D(1)>D(2)>...>D(20).
Au final j'ai pas trop de mal a configurer tout cela, mais la valeur Erreur Fitting ne semble pas trop sensible et fmincon éprouve bcp de difficultés à optimiser le modèle.
Le modèle s’arrête dès le début :
Optimization completed because the objective function is non-decreasing in
feasible directions, to within the selected value of the function tolerance,
and constraints were satisfied to within the default value of the constraint tolerance.
Alors évidement j'ai "joué" avec les paramètres :
options=optimset('Display','iter','TolFun',1e-30,'MaxFunEvals',5000,'MaxIter',1000,'TolX',1e-30 );
Mais rien n'y fait.
Je me demande tout simplement si fmincon est capable de résoudre ce genre de problème.
J'avoue c'est assez dense comme question mais si quelqu'un a une idée je serais bien bien reconnaissant.
Un grand merci de Montréal
Partager