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

R Discussion :

Optimisation sous logiciel R : très urgent


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut Optimisation sous logiciel R : très urgent
    Je veux faire une optimisation sous le logiciel R : voila mon modèle d'optimisation :

    min maFonction(nk) avc k = 1:N

    sous contraintes:

    1) xk=somme(nj) avc k=k+1 : N

    2) X=somme(nk) avc k=1:N

    3) n1,.....,nN>=0

    ==> Mon Objectif est de déterminer les nk qui minimisent maFonction

    J'ai essayé la fonction constrOptim()

    mais je trouve des difficultés à introduire la 1er contrainte ?!

    Je me demande si j'ai mal choisi la commande ? Avez vous d'autres idées?

    Voila un exemple simple sous R qui explique l'utilisation de la commande constrOptim :

    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
    ### exemple
    # fr notre fonction à minimiser
    fr <- function(x) {
    x1 <- x[1]
    x2 <- x[2]
    100 * (x2 - x1 * x1)^2 + (1 - x1)^2
    }
    # 1er contrainte (x<=0.9) ,on va l'ecrire sous cette forme : (-x =>-0.9)
    # la 2eme contrainte (y-x > 0.1) , on la garde selon cette ecriture
    #optimisation
    initial<- c(-1.2,0.9)
    constrOptim(initial, fr,NULL, ui=rbind(c(-1,0),c(-1,1)), ci=c(-0.9,0.1))
    #avec initial :est l'initialisation
    #fr : notre fonction à minimiser
    #NULL : on l'ecrit si on ne veut pas calculer le gradient
    # ui : c'est la matrice des coff des paramètres
    # [,1] [,2]
    # [1,] -1 0
    # [2,] -1 1
    # ci: vecteur contrain
    # [1] -0.9 0.1
    # le commande constrOptim exige que la valeur initial qu'on choisi vérifie (ui%*%initial => ci)
    Merci Bien Pour Votre Aide

  2. #2
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Par défaut
    Bonjour,

    J'ai essayé de comprendre votre code et votre démarche, mais je dois avouer que je ne vois pas bien où se situe votre problème...
    Le code que vous indiquez tourne très bien chez moi.

    Peut-être pourriez-vous essayer de donner un peu plus d'explications, ou bien peut-être que quelqu'un d'autre comprendra mieux que moi...

    Bonne continuation


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut
    Bonsoir A.D ,

    Oui ,je sais que le code est correct, mais ce n'ai pas ça mon problème.

    En fait, le code que j'ai mis n'est qu'un simple exemple qui permet de comprendre l'utilisation de la fonction d'optimisation constrOptim .

    mon problème c'est que j'arrive pas à appliqué cette méthode à mon modèle d'optimisation que j'ai noté au début avec les 3 contraintes !

    voila le code que j'ai écrit pour mon modèle d'optimisation :

    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
    57
    58
    # une fonction qui permet de faire une somme , je vais l'utiliser par la suite dans ma fonction à minimiser
    sommation<-function(k,n,N)
    {
    l<-0
    for(i in (k+1):N)
    {
    l<-l+n[i]
    }
    return(l)
    }
    # ma fonction à optimiser ou minimiser :
     
    lvar<-function(n,N=10,X=10000,cl=0.99,taux=1,moyR=0.0009065256,EspRelative0=0.04001551,Gamma0=0.00379783,Mu0=0.0379783,S0= 53,sigmaR=0.01350311,sigmaEpsRelative=0.01430420,sigmaGamma= 0.01357616,sigmaMu= 0.1357616)
    {
     alpha<-qnorm(1-cl)
     #avec cette boucle "for" j'ai essayé d'integrer la 1er contrainte dans la fonction
     #comme le vecteur x s'ecrit en fonction de vecteur n (qui est notre paramétre )
     x=vector(length=N)
     for(k in 0:(N-1))
       {
         x[k]<-sommation(k,n,N)
       }
     
      somme1<-0
      somme2<-0
      somme3<-0
       for(k in 1:N)
        {
        somme1<-somme1+(taux*x[k])
        somme2<-somme2+(n[k]*(X-x[k]))
        somme3<-somme3+(((n[k])^2)/taux)
       }
    E_TC=(-S0*moyR*somme1)+(0.5*S0*EspRelative0*X)+(Gamma0*somme2)+(Mu0*somme3)
       V_TC<-0
       for(k in 1:N)
       {
    V_TC<-V_TC+(((sigmaR)^2+(1/4)*(sigmaEpsRelative)^2)*(S0^2)*taux*(x[k]^2))+(k* (sigmaGamma^2)*taux*((X-x[k])^2)*(n[k]^2))+((k*(sigmaMu^2)*(n[k]^4))/taux)
       }
    Lvar=(E_TC+alpha*sqrt(V_TC))
    L_var<-abs(Lvar)
    return(L_var)
    }
    #optimisation :
    #le N doit avoir la meme valeur prise au niveau de la fonction , pour avoir une cohérance de taille car N présente la taille de notre vecteur paramétre n
    N=10
    # ui : c'est la matrice des coeff  "constraint matrix (10 x 12)"
    m1=diag(N)
    m2=matrix(nrow=2,ncol=N)
    m2[1,] =rep(1)
    m2[2,] =rep(-1)
    ui=rbind(m1,m2)
    # ci constraint vector of length 10 càd N
    v1<-c(0,0,0,0,0,0,0,0,0,0,10000,-10000.001)
    ci=v1
    #il faut choisir l'initialisation telqu'elle verifie : ui %*%initial - ci >= 0
    #car "The starting value must be in the interior of the feasible region" comme il est dit dans la définition de la fonction constrOptim
    initial=rep(1000.00005,N)
    constrOptim(initial,lvar,NULL,ui,ci)
    alors :

    lorsque je l'ai fait tourné ,il m' a donné un résultat que je le trouve incorrect!!

    le paramétré d'optimisation ,càd le vecteur n, a presque les même valeurs que le vecteur initial que j'ai mis dans l'initialisation de constrOptim !!

    j'arrive pas à localiser la faute

    peut être que j'ai mal choisi la commande d'optimisation ??
    qu'en pensez -vous ?!

    Merci Pour votre Collaboration
    Cordialement ,
    Bataholla

  4. #4
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Par défaut
    Bonjour,

    Honnêtement, je n'ai pas le temps ni le courage de reprendre tout votre code en détail sans avoir le problème "mathématique" que vous essayez de coder...
    Cela dit, une première chose à faire lorsqu'on rencontre un problème de code, c'est de reprendre pas à pas les différentes étapes de la fonction et de bien vérifier que tout fonctionne.

    Par exemple ici, la boucle suivante (fonction "lvar") est fausse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    x=vector(length=N)
     for(k in 0:(N-1))
       {
         x[k]<-sommation(k,n,N)
       }
    En effet, en R l'indexation des vecteurs commence à 1 et non à zéro.
    Ceci à pour conséquence la chose suivante : lors du 1er passage dans la boucle ci-dessus, tous les éléments du vecteur x sont mis à zéro, puis les éléments 1 à (N-1) uniquement sont complétés dans x.

    Pour info aussi, votre fonction "sommation" peut être écrite autrement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sommation<-function(k,n,N)
    {
    l<-sum(n[(k+1):N])
    return(l)
    }
    Ceci vous permettra de gagner un peu de temps de calcul lorsque la taille du vecteur est grande.


    Bonne continuation et bon courage


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut
    Bonsoir,

    Merciiiiiii pour vos remarques et votre attention

    je vais corriger mon code, l'améliorer et voir les résultats. j’espère que ça ira !

    je vous mettrai au courant

    Vous pouvez regarder la pièce jointe pour comprendre mon modèle mathématique d'optimisation lorsque vous trouvez le temps bien sur , ça sera très gentil de votre part

    Cordialement,
    Bataholla
    Images attachées Images attachées  

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/04/2012, 16h54
  2. Optimisation sous contraintes
    Par Neuromancien2 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 10/11/2006, 14h37

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