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 :

"First-Order Optimality Measure"


Sujet :

MATLAB

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut "First-Order Optimality Measure"
    salut tous,

    récemment je suis venu sur le forum pour demander de l'aide à propos de fonctions de la tool box "optimization". J'ai utilisé "lsqnonlin" "lsqcurvefit" "finminuc" et à chaque fois j'ai le meme resultat:

    mon optimisation s'arrete au bout d'une iteration et voici le resultat:
    The first-order optimality measure, 0.000000e+000, is less than options.TolFun = 1.000000e-006.
    d'apres la doc, il est possible que je me trouve à un minimum local, pourtant lorsque je change un peu les valeurs de depart j'ai toujours le meme probleme : ça me parait bizarre qu'a chaque fois que je mets un jeu de parametres l'algo me dit que j'ai un minimum local ?!?

    pouvez vous me dire votre avis la dessus et comment puis je resoudre ceci.
    merci beaucoup

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    1/ Vérifie que ta fonction n'est pas constante ! Si elle semble varier tres peu, ajuste TolX et TolF.
    2/ En ce qui concerne fminunc, essaye d'utiliser une fonction réelle C2 (fais la somme des carrés des écarts dans la fonction.)
    3/ Essaye des points initiaux très différents les uns des autres.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci beaucoup VV33D d'avoir pris le temps de repondre !

    Citation Envoyé par VV33D Voir le message
    1/ Vérifie que ta fonction n'est pas constante ! Si elle semble varier tres peu, ajuste TolX et TolF.
    ma fonction n'est pas constante, j'ai pris deux parametres initiaux un peu écarté des précédents et la valeur de sortie à bien variée.

    => en fait le probleme que j'ai est que je peux meme mettre TolX et TolF à 1e-50 mais ça ne fera rien car il me dit que le "first order optimality measure" est egale à 0,000000

    Citation Envoyé par VV33D Voir le message
    2/ En ce qui concerne fminunc, essaye d'utiliser une fonction réelle C2 (fais la somme des carrés des écarts dans la fonction.)
    oui c'est bien ce que j'ai fais

    Citation Envoyé par VV33D Voir le message
    3/ Essaye des points initiaux très différents les uns des autres.
    j'ai fais un test dans ce genre et meme résultat :
    ==> "first order optimality measure" est egale à 0,000000

    c'est pour cela que je ne comprends plus rien

  4. #4
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Es-tu sur que ta fonction est C2 ?
    Poste le code de ta fonction, et décris son espace de départ.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    ma fonction serait beaucoup trop longue pour etre écrite sur le forum par contre ce que je peux te dire c'est qu'elle prend trois parametres d'entrée qui sont environ:
    A=0.2 B=5000 C=-0.7

    en sortie voici ce que j'ai (pour fminuc):

    residuVect=(Rm_exp-Rm_num)'*(Rm_exp-Rm_num)+(Fv_exp-Fv_num)'*(Fv_exp-Fv_num);

    qui me donne donc une erreur quadratique

    taille des vecteurs :
    Rm_exp,Rm_num,Fv_exp,Fv_num sont des vecteurs colonnes à 5 lignes

  6. #6
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Mets le code de ta fonction en piece jointe.

    J'imagine que _num sont des vecteurs de données réelles tandis _exp sont des versions théoriques paramétrés par tes coefficients (A,B,C). Quelle est la forme de la fonction: (A,B,C) |-> (Rm_exp,Fv_exp) ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    Citation Envoyé par VV33D Voir le message
    Mets le code de ta fonction en piece jointe.
    le code qui est dans ma fonction fait appel à un logiciel pour avoir les Valeurs_num, du coup si tu voudrais avoir le contenu il faudrait que je te donne aussi le logiciel utilisé mais je n'ai pas le droit de le faire (il n'est pas libre).

    Citation Envoyé par VV33D Voir le message
    J'imagine que _num sont des vecteurs de données réelles tandis _exp sont des versions théoriques paramétrés par tes coefficients (A,B,C).
    en fait c'est le contraire. c'est _num qui est parametré en fonction de A,B,C

    Citation Envoyé par VV33D Voir le message
    Quelle est la forme de la fonction: (A,B,C) |-> (Rm_exp,Fv_exp) ?
    (A,B,C) |-> (Rm_num,Fv_num) est donné par un logiciel assez complexe.

  8. #8
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Du coup tu imagines bien qu'on ne peut pas grand chose pour toi...
    quelques dernières idées:
    - Vérifie que ton super logiciel fournit bien une fonction C2. Tu peux tracer la fonction pour une sous-paramétrisation réelle et vérifier que ça a l'air dérivable.
    - Tu peux toujours recoder la fonction en question en matlab pour comparer, comme ça le code sera libre.
    - Quel est l'ordre de grandeur de la fonction que tu maximises ? Il m'est déjà arrivé de ne pas réussir à maximiser une fonction, tandis que cela marchait très bien pour son logarithme par exemple, ou pour une version renormalisée de la fonction.

    Bon courage

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci beaucoup VV33D en tout cas pour ton aide et pour toutes ces pistes !

    je vais continuer à fouiller là dedans

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    savez vous comment augmenter le pas du gradient ?
    je ne sais pas combien prend matlab d'ecart pour determiner le gradient mais je voudrais pouvoir modifier cette valeure...

  11. #11
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    c'est peut etre dans l'aide:
    optimization toolbox/ users'guide / argument and options reference / optimization options

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    je vais regarder, merci pour toute ton aide

  13. #13
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    salut

    déterrage de post et réponse très tardive (1 an et demi !), mais il semble que le paramètre "FinDiffRelStep" puisse faire l'affaire (pour augmenter le pas du gradient)

    en fait je bloque depuis un moment sur un problème de ce genre, je suis donc logiquement tombé sur ce post et j'ai parallèlement fini par trouvé quelque chose, alors je le poste

    Fab

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci beaucoup Fab pour cette réponse, je regarderai ceci si j'ai ce problème qui revient

    A+

+ Répondre à la discussion
Cette discussion est résolue.

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