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 :

Utilisation de Fmincon en dimension 2


Sujet :

MATLAB

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut Utilisation de Fmincon en dimension 2
    Bonjour à toutes et à tous,

    Dans le cadre d'un projet, j'ai besoin de manipuler la fonction d'optimisation "fmincon". Elle s'insère de la façon suivante dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vg_ref = fmincon(@Fobj,[Vg0 Vg1]',[],[],[],[],Li_max,Ls_min)
    où Vg_ref est un vecteur 2x1, et la fonction objectif Fobj est une fonction de Vg_ref. Quand je lance l'algo, j'ai le message d'erreur suivant qui apparaît :

    ??? Error using ==> fmincon
    FMINCON cannot continue because user supplied objective function failed with the following error:
    Error using ==> mpower
    Matrix must be square.

    Error in ==> optimisation at 101
    Vg_ref = fmincon(@Fobj,[Vg0 Vg1]',[],[],[],[],Li_max,Ls_min)
    Je n'ai pas réussi à trouver de quelle matrice parlait l'erreur. Une idée peut-être ?

    Merci d'avance !

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    Salut,

    A quoi ressemble ta "objective function" @Fobj" ?

    Christophe

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Salut,

    Tu viens de poser LA bonne question ! Je me suis aperçu que dans la fonction objectif intervenait un terme au carré, j'avais tout simplement oublié le "." devant le "^2". C'est résolu maintenant, mais j'ai un nouveau problème. La fonction objectif est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function y = Fobj(Vg_ref)
     
    global lambda_vp lambda_vg lambda_qg n_vp n_vg n_qg alpha Vp_ref Vp_mes Svp_vg Sqg_vg Vg_mes Qg_max q_ref Qg_mes;
    size(Vg_ref) = [2 1];
     
    % Fonctions coût et fonction objectif
    Fvp = lambda_vp*n_vp*(alpha*(Vp_ref-Vp_mes)-Svp_vg*(Vg_ref-Vg_mes)).^2;
    Fqg = lambda_qg*n_qg*(alpha*(Qg_max*q_ref-Qg_mes)-Sqg_vg*(Vg_ref-Vg_mes)).^2;
    Fvg = lambda_vg*n_vg*(alpha*(Vg_ref-Vg_mes)-(Vg_ref-Vg_mes)).^2;
     
    y = Fvp + Fqg + Fvg;
    Vg_ref est la variable sur laquelle se fait l'optimisation. J'ai l'erreur suivante :

    ??? Error using ==> fmincon at 613
    User supplied objective function must return a scalar value.

    Error in ==> optimisation at 101
    Vg_ref = fmincon(@Fobj,[Vg0 Vg1]',[0 0],0,[0 0],0,Li_max,Ls_min)
    Après recherche, ça provient du terme En fait, Vg_mes est un vecteur 2x1, alors que par défaut Vg_ref est la matrice vide []. Je n'ai pas réussi à forcer la taille de Vg_ref à 2x1 sans lui affecter une valeur. Une solution ?

    Merci beaucoup

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Je me permets de relancer ! J'ai essayé de forcer la taille du vecteur Vg_ref, sans réussite. Peut-être dois-je m'y prendre autrement ?
    Merci !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    Bonjour,

    Tu ne peux pas forcer la taille d'une variable vide... Donc, oui, le solution est ailleurs...

    Je pense qu'il faut essayer de comprendre le message d'erreur. Pourquoi la sortie n'est pas un scalaire ?

    Christophe

  6. #6
    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,

    tout d'abord une remarque : utiliser des variables globales pour les paramètres de ta fonction n'est pas une solution très robuste. Pour plus de détails : Passing Extra Parameters.

    Pour ton message d'erreur, fmincon travaille sur des fonctions renvoyant un scalaire en sortie, or tu renvoies un vecteur. Si tu veux minimiser l'ensemble des éléments de ton vecteur, peut-être que la fonction fminmax est plus approrié. (pour un aperçu des différentes formes d'optimisation en fonction des fonctions : Writing Objective Functions).

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Bonjour, et merci de vos réponses !

    En ce qui concerne les variables globales, je n'ai en fait pas trouvé d'autres solutions, je jetterai un oeil sur ce que tu me proposes. Merci !

    En ce qui concerne fmincon, je vais retravailler ma fonction pour l'adapter, en fonction de ton lien.

    Merci !

Discussions similaires

  1. Utiliser un champ de dimension comme fait sommable
    Par jpforbi dans le forum Cognos
    Réponses: 0
    Dernier message: 02/04/2012, 13h26
  2. Réponses: 10
    Dernier message: 04/01/2012, 15h55
  3. Utilisation de fmincon pour la minimisation
    Par mansour006 dans le forum MATLAB
    Réponses: 3
    Dernier message: 12/02/2010, 17h20
  4. Réponses: 2
    Dernier message: 01/09/2009, 10h17
  5. utilisation de fmincon
    Par FouadSami dans le forum MATLAB
    Réponses: 0
    Dernier message: 07/04/2009, 20h49

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