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

Scilab Discussion :

Algorithme d'Uzawa Optimisation


Sujet :

Scilab

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 38
    Points : 32
    Points
    32
    Par défaut Algorithme d'Uzawa Optimisation
    Bonjour à tous, j'ai un projet de mathématiques dans lequel je dois programmer sur Scilab l'algorithme d'Uzawa. J'ai donc écrit mon programme mais il ne fonctionne pas et je ne comprends pas ce que j'ai fait de mal. Je suis débutant en Scilab donc je suis perdu. D'abord je vous donne le contexte de l'exercice :

    On est dans l'algorithme d'Uzawa pour contraintes d'inégalités Cx<f
    Voici l'algorithme :
    -On se donne lambda0 un vecteur de R^q
    Itérer pour n>=0
    (i) trouver xn t.q. grad(J(xn)) + (C')*lambdan = 0
    (ii) lambdan+1 = PF(lambdan + rho*(C*xn - f))

    où rho désigne le pas et PF la projection sur l'ensemble des contraintes qui est
    K = {x / x>=g}
    g est définit dans mon programme, que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    function [x,i,resi]=U1(A,b,C,f,eta,Imax,rho)
     
    x=zeros(b);
    r=A*x-b;
    nr=norm(r);
    i=0;
    err=eta;
    resi=[];
    lambda=zeros(n,1);
    while (i<Imax & norm(C*x-f)>eta) 
      xold=x;
      i=i+1;
      x=inv(A)*(b-C'*lambda);
      lambda = lambda+rho*(C*x-f);
      r=A*x-b;
      resi=[resi;err];
      if nr>1e10; disp('Explosion!'); break; end;
    end
    if (err<eta); disp('Methode terminee normalement'); end
    if (i==Imax); disp('Imax atteint! Augmenter le nombre d''iterations'); end;
    endfunction
     
      n=29;
      h=1/(n+1);
     n=29;
    A=zeros(n,n);
    A=zeros(28,28);
        A(n,n)=2;
        A(n,n-1)=-1;
        for i=1:n-1 do
            A(i,i)=2;
            A(i,i+1)=-1;
            A(i+1,i)=-1;
        end
     
      b=-20*ones(n,1);
     
      eta=1e-4;
      Imax=10000;
      S=spec(A);
      rho=1000;
     
    t=zeros(n,1);
    for i=1:n do
        t(i)=i*h;
    end
     
    g=zeros(n,1);
    for i=1:n do
      g(i)=-1+max(0,0.565-10*(t(i)-0.4)^2);
    end
     
      C=-eye(n,n);
      f=-g;
     
          disp('rho :');disp(rho);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
         [x,i,resi]=U1(A,b,C,f,eta,Imax,rho);
          clf;
          xgrid(3);
          plot2d((1:i),resi,logflag='nl', style=[5]);
          xtitle('nombre d itérations = '+string(i));
          disp('dernier residu :');disp(resi(i));
    Le problème c'est que ça m'affiche des valeurs bizarres, et que je ne trouve pas ce qui doit converger vers quoi...

    Si vous pouviez juste jeter un oeil au programme et me dire s'il y a une absurdité ce serait vraiment génial. Merci beaucoup!

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 38
    Points : 32
    Points
    32
    Par défaut
    Ah en fait c'est bon j'ai trouvé mon erreur, j'ai oublié de diviser la matrice A par le pas, du coup ça me donnait des valeurs beaucoup trop grandes! -_-
    Je classe donc ce sujet en résolu et qu'il tombe dans les tréfonds du forum.
    Merci beaucoup!

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

Discussions similaires

  1. Algorithme de compression (optimisation du temps)
    Par declencher dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 23/04/2012, 17h39
  2. Algorithme tabou pour optimiser la planification d'un réseau 4G
    Par medk10 dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 12/03/2012, 11h42
  3. algorithmes génétiques et optimisation
    Par machineforest dans le forum MATLAB
    Réponses: 2
    Dernier message: 20/10/2008, 17h27
  4. Optimisation algorithme de programmation
    Par mp_moreau dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 29/07/2007, 19h24
  5. Algorithme d'optimisation par colonie de fourmis
    Par floopy dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 08/11/2006, 15h03

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