IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

optimisation / fitting


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2011
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 56
    Points : 34
    Points
    34
    Par défaut optimisation / fitting
    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

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    Le problème a l'air correctement posé, peut-être il y a un problème au niveau du code?

    L'initialisation est aussi un paramètre important, comment l'as-tu choisis?

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant:chaque jour on aprend des choses ;)
    Inscrit en
    Septembre 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant:chaque jour on aprend des choses ;)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 43
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    il serait interessant de connaitre le code que tu utilises. Ça peut nous aider à détérminer le racin du problème.

    Cordialement.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Septembre 2011
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    merci beaucoup pour votre disponibilité,

    voici mon code, cette version est plus légère avec seulement 1000 valeurs et 3 catégories cibles.

    J'ai simplifié dans un premier temps afin de rendre, dans un premier temps, la tâche un peu plus facile à "fmincon".

    Merci par avance pour votre aide !
    Fichiers attachés Fichiers attachés

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant:chaque jour on aprend des choses ;)
    Inscrit en
    Septembre 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant:chaque jour on aprend des choses ;)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 43
    Points : 68
    Points
    68
    Par défaut
    Salut

    Je n'arrive pas à comprendre très bien pourquoi mais fmincon ne semble pas marcher pour ton problème. Je pense que la raison est que fmincon ne considère pas que la variable 'd' a optimiser a effet sur la fonction d'optimisation.

    Pour le moment je peut te conseiller une simplification du code de la fonction freq:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       function ML =  freq(d,data,target)
     
            d_compose=[0;d;1];
            freq_cat=zeros(length(d_compose)-1,1);
            for ii = 1 : length(d_compose)-1
                data_range=(data>d_compose(ii) & data<d_compose(ii+1));
                freq_cat(ii)=sum(data.*data_range/sum(data_range));
            end
            ML  = sum(abs((freq_cat-target)./target));
    Et d'autre part je pense qu'il serait possible d'utiliser fmincon si les datas seraient directement une équation. On pourrait integrer dans la fonction à optimiser et fmincon marche bien avec une integrale.

    D'autres idées?

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2011
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Merci en tout cas de considérer mon problème.

    Cela fait plusieurs jours que je me casse la tête sur ce problème et j'ai du mal à trouver une issue.

    La seule solution que j'ai trouvée jusqu'à présent est une approche du type simulation MonteCarlo.

    Je tire aléatoire un vecteur (d), j'estime mon ErreurFitting.
    Je répète l'expérience 1 millions de fois et je prends le vecteur d présentant min(ErreurFitting).

    Bien entendu, cette solution n'est pas optimale en terme de temps d'éxécution et compte tenu de la distribution de mes valeurs, pas optimale en terme de qualité d'ajustement mais au moins j'ai un début de résultat.

    Merci,
    Et si quelqu'un à une idée, je suis preneur.

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Je pense que tu devrais poser ta question dans le forum Algorithme pour savoir si il existe un algo plus adapté à ce genre de problème.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Septembre 2011
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    ok, je vais essayer en espérant que quelqu'un ait une solution.
    Mais si quelqu'un ici pense à quelque chose, qu'il n'hésite pas
    Merci beaucoup

Discussions similaires

  1. [Débutant] Fit conditionné d'une courbe (2Pi périodique) pour optimisation de forme
    Par Santondouah dans le forum MATLAB
    Réponses: 2
    Dernier message: 25/09/2013, 15h11
  2. Optimisation de votre SGBDR et de vos requêtes...
    Par SQLpro dans le forum Langage SQL
    Réponses: 35
    Dernier message: 11/01/2013, 11h49
  3. [VB6] [BDD] Optimisation de l'accès aux données
    Par LadyArwen dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 30/01/2003, 13h27
  4. [langage]Problème de temps de lecture, optimisation
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 08/01/2003, 08h47
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo