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

Calcul scientifique Python Discussion :

Maximisation fonction Somme de plusieurs variable


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Par défaut Maximisation fonction Somme de plusieurs variable
    Bonsoir à tous,

    J'ai un petit projet en python à finir et je dois dire que mon niveau est pitoyable....
    J'ai un gros problème et je pense que vous aller pouvoir m'aider, comme son nom l'indique mon problème est de maximiser une fonction de plusieurs variables.

    J'ai vu qu'on pouvait utiliser scipy mais je dois dire que je comprend pas toutes les options ni comment remplir l'optimisation.

    Je vous mets la partie de mon code intéressante.

    Y'a quelque chose que je fais mal mais je vois pas trop quoi et j'ai beau chercher mais google n'est pas mon ami sur ce coup là :S

    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
     
     
    d=0
    x=[beta,alpha,omega]
    def f(x):
     for k in range (65 ,len(y)):
         d=d+math.log(x[1] + x[2]*V_t[k-1] +x[3] *y[k-1]*y[k-1])+y[k]*y[k]/(x[1] + x[2]*V_t[k-1] +x[3] *y[k-1]*y[k-1])
     return d
    beta=0.6
    alpha =0.399
    omega =0.00001
     
    V_t[1]=z.var()
    V_tt[1]=z.var()
     
     
    for k in range(65,len(y)):
        V_t[k]= omega + beta*V_t[k-1] +alpha *y[k-1]*y[k-1]
        z=y[1+k:64+k]
        V_tt[k]=z.var()
        Vol_t[k]=math.sqrt(V_t[k]*252)
        Vol_tt[k]= math.sqrt(V_tt[k]*252)
     
     
    fmin_tnc(d, x)
    Je dois également mettre des contraintes et je vois absolument pas l'emplacement.....

    Thanks for your Help

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Citation Envoyé par mcalus Voir le message
    Y'a quelque chose que je fais mal mais je vois pas trop quoi
    à peu près tout ... je ne sais pas par où commencer tellement c'est brouillon.
    Faudrait commencer par faire du code plus clair.

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Par défaut
    Tant que ça? :S

    La façon de définir la fonction est complètement à coté de la plaque?
    J'ai 2 gros problèmes. Le 1er 'est au niveau de la définition de la fonction d (qui doit être la somme du truc un peu degue qui suit. Et le second problème (de loin le plus important , la minimisation de ma fonction...C'est vraiment à ce niveau là que je ne sais pas trop quoi faire. Le programme compile sans fmin_tnc se qui me laisse penser qu'il a en mémoire ma fonction ,non?

    Désolé pour le code brouillon et pour mes questions un peu bête mais je débute vraiment en python (en même temps vous avez du le voir....)

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    il est sensé faire quoi ce code ?
    quelles libs tu utilises ?
    c'est quoi cette fonction en plein milieu qui n'est jamais appelée ?
    etc ...

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Par défaut
    Sorry pour ce manque d'info.

    J'utilise numpy,math et scipy. Pour la fonction en plein milieu, c'est celle là que je dois minimiser suivant les 3 paramètres.

    En fait le but du programme est de déterminer les valeurs optimales oméga,alpha et béta qui minimise la fonction d.
    En gros d c'est la somme de tout les Vol_t.

    Normalement c'est un Garch(1,1) et je cherche donc les paramètres optimaux. Pour Vol_t et Vol_tt je m'en sers pas dans l'optimisation ils servent juste pour tracer le graphe ensuite.

    J'espère que j'ai été clair, si tu as d'autre remarques n'hésite pas (et merci de t'intéresser à mon problème )

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Bonjour,



    J'espère que j'ai été clair
    Non. Pas du tout.



    Titre de la file, message #1:
    Maximisation fonction Somme de plusieurs variable
    Message #3:
    de loin le plus important , la minimisation de ma fonction...
    Ça la fout mal. Dans une rubrique intitulée “Calcul scientifique“, il serait de bon ton de faire preuve de plus de cohérence logique.

    En premier, donc, merci de nous indiquer si tu veux minimiser la fonction ou la maximiser.





    Deuxièmement, je ne vois dans ton bout de code que des instructions d’affectation, c’est à dire des instructions avec signe =.

    Or pour trouver le minimum d’une fonction, il faut me semble-t-il réitérer une procédure de variation des valeurs passés comme arguments à la fonction jusqu’à trouver les valeurs qui minimisent le résultat renvoyé par la fonction, et pour cela il faut tester une condition quelque part.

    Il n’y a rien de tel dans ton code.

    La réitération est-elle en dehors ? Cherches tu seulement à écrire ta fonction pour le moment ?









    Quelques remarques maintenant pour débroussailler:



    - quelle version de Python utilises-tu ?



    - pourquoi l’indentation est à 1 colonne dans la définition de la fonction et à 4 colonnes plus loin ?



    - visuellement , c’est mieux d’écrire ta définition de fonction ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def f(x):
     for k in range (65 ,len(y)):
         d += math.log(    x[1] + x[2]*V_t[k-1] + x[3]*y[k-1]*y[k-1] )\
              +y[k]*y[k]/( x[1] + x[2]*V_t[k-1] + x[3]*y[k-1]*y[k-1] )
     return d


    - ce serait bien aimable à toi de nous dire ce que c’est que var()



    - écrire
    V_t[k] = omega + beta*V_t[k-1] + alpha*y[k-1]*y[k-1]
    puis quelques lignes suivantes
    Vol_t[k] = math.sqrt(V_t[k]*252)
    ne sert qu’à brouiller le code pour un intérêt approchant de zéro.

    Il vaut mieux écrire tout de suite:
    Vol_t[k] = math.sqrt(( omega + beta*V_t[k-1] + alpha*y[k-1]*y[k-1] )*252)

    et même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vol_t[k] = math.sqrt(252) * math.sqrt( omega + beta*V_t[k-1] + alpha*y[k-1]*y[k-1] )


    - de même:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vol_tt[k]= math.sqrt(252) * math.sqrt( y[1+k:64+k].var() )


    - deux noms V_t et V_tt : bonjour la confusion vuisuelle et les risques d’erreur quand on écrit le code !
    Il faut vraiment choisir des noms plus distincts que ceux-là. M’enfin quoi ....



    - les arguments doivent être passés à la fonction de la façon suivante
    def f(beta,alpha,omega):
    et non pas
    def f( [beta,alpha,omega[ ):
    comme ce à quoi revient ton écriture



    - si x=[beta,alpha,omega] alors
    x[1] est alpha
    x[2] est omega
    x[3] prdouit une erreur: index out of range

    beta est x[0]



    - il résulte donc qu’il faut écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def f(beta,alpha,omega):
     for k in range (65 ,len(y)):
         prov = beta + alpha*V_t[k-1] + omega*y[k-1]*y[k-1]
         d += math.log(prov) + y[k]*y[k]/(prov)
     return d
    si l’on se fonde sur l’ordre dans x

    mais cela donne des positions de alpha, beta et omega dans l’expression qui ne sont pas les mêmes que dans le bas du code.



    - il y a intérêt, au moins pour la lisibilité, et sans doute pour la rapidité de calcul, d’écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def f(x):
     for k in range (65 ,len(y)):
         prov = x[1] + x[2]*V_t[k-1] + x[3]*y[k-1]*y[k-1]
         d += math.log(prov) + y[k]*y[k]/(prov)
     return d


    - pourquoi y a-t-il deux itérations for k in range(65,len(y)): ?



    - qu’est ce que y, z, V_t, V_tt, Vol_t, Vol_tt ?



    - pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for k in range(65,len(y)):
              y[1+k:64+k]
    y[1+k:64+k] va prendre les valeurs y[66:129], [67:130], [68:131]....
    Est-ce bien ce que tu veux ?

Discussions similaires

  1. Fonction somme avec cellules variables
    Par juxci dans le forum Excel
    Réponses: 5
    Dernier message: 11/02/2015, 16h16
  2. [XL-2010] Réaliser un fonction somme avec plusieurs critères dont la présence de diagonale
    Par will-1981 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/07/2014, 10h48
  3. Réponses: 1
    Dernier message: 12/01/2012, 12h24
  4. fonction qui retourne plusieurs variables
    Par laurentSc dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/04/2011, 11h06
  5. Fonction qui renvoie plusieurs variables
    Par _Aravis dans le forum MATLAB
    Réponses: 1
    Dernier message: 28/09/2008, 19h55

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