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 :

Optimisation de données


Sujet :

Calcul scientifique Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    aucun relié à l'informatique
    Inscrit en
    Mai 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : aucun relié à l'informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 23
    Points : 26
    Points
    26
    Par défaut Optimisation de données
    Bonjour,

    Je veux définir une fonction avec plusieurs éléments, par exemple:

    def function((a,b,c), (d, e, f), (m, n, o, p, q), (r, s, t, u, v)):
    où les item (r, s, t, u, v) correspondent respectivement à une probabilité pour chacun des items (m, n, o, p, q)

    la fonction effectue différents calculs et donne un résultat "z".

    Je veux créer une boucle de façon à obtenir un "z" maximum en utilisant un (m, n, o, p, q) de départ et en faisant varier les données par 0.10 à chaque itération.

    La somme des items (m, n, o, p, q) doit toujours être égale à 1 et je veux incrémenter les valeurs de 0.10 uniquement, pour limiter les possibilités:

    Exemples de valeurs permises: (0.1, 0.2, 0.4, 0.1, 0.2), ....(0.3, 0.0, 0.2, 0.2, 0.3)...et ainsi de suite.....

    Chaque itération me donnera un nouveau "z", et je désire sortir de la boucle avec le plus grand "z".....

    Comment faire varier uniquement les données (m, n, o, p, q)...

    Merci pour l'aide.

    Jacques

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Bonjour.

    Citation Envoyé par Jack_dev Voir le message
    Comment faire varier uniquement les données (m, n, o, p, q)...
    En utilisant un générateur et avec itertools.product, tu peux obtenir toutes les données d'entrées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import itertools
    from numpy import arange
     
     
    def get_one():
        items = arange(0.0, 1.0, 0.1)
        for x in itertools.product(items, repeat=5):
            if sum(x) == 1.0:
                yield x
     
     
    if __name__ == "__main__":
        for i, x in enumerate(get_one()):
            print(i, *x)
    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
    0 0.0 0.0 0.0 0.1 0.9
    1 0.0 0.0 0.0 0.2 0.8
    2 0.0 0.0 0.0 0.3 0.7
    3 0.0 0.0 0.0 0.4 0.6
    4 0.0 0.0 0.0 0.5 0.5
    5 0.0 0.0 0.0 0.6 0.4
    6 0.0 0.0 0.0 0.7 0.3
    7 0.0 0.0 0.0 0.8 0.2
    8 0.0 0.0 0.0 0.9 0.1
    9 0.0 0.0 0.1 0.0 0.9
    10 0.0 0.0 0.1 0.1 0.8
    11 0.0 0.0 0.1 0.2 0.7
    12 0.0 0.0 0.1 0.3 0.6
    13 0.0 0.0 0.1 0.4 0.5
    14 0.0 0.0 0.1 0.5 0.4
    15 0.0 0.0 0.1 0.6 0.3
    16 0.0 0.0 0.1 0.7 0.2
    17 0.0 0.0 0.1 0.8 0.1
    18 0.0 0.0 0.1 0.9 0.0
    19 0.0 0.0 0.2 0.0 0.8
    20 0.0 0.0 0.2 0.1 0.7
    ...

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    aucun relié à l'informatique
    Inscrit en
    Mai 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : aucun relié à l'informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 23
    Points : 26
    Points
    26
    Par défaut Optimisation de données (suite)
    Bonjour Dardanos,

    Merci pour le truc avec numpy. Ça semble si simple quand on s'y connait...

    Maintenant, pour chaque ligne d'entrée, je vais calculer un "Z" qui est le résultat de certains calculs sur les autres données. Je veux m'assurer que le résultat final soit le plus grand de tous les "Z" calculés avec toutes les lignes d'entrée obtenues à partir de numpy: autrement dit, optimiser le "Z".

    J'ai pensé obtenir le nombre de lignes fournies par numpy, l'utiliser pour faire tourner la boucle x fois, et toujours stocker le plus grand "Z"....sortir le résultat final.

    Il y a probablement une solution plus simple...

    Merci encore

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    aucun relié à l'informatique
    Inscrit en
    Mai 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : aucun relié à l'informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 23
    Points : 26
    Points
    26
    Par défaut Optimisation (encore suite)
    Bonjour,

    J'ai testé la fonction et je reçois un message d'erreur de syntaxe sur la dernière ligne: print (i, *x).

    J'utilise Python 2.7. Si j'enlève le * devant le x, ça fonctionne, mais le nombre de décimal est trop, comment fixer les décimales à 0.1?

    Merci

    Jacques

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    En PYTHON2, print est une instruction ; en PYHTON3, c'est une fonction.
    Le module __future__ permet d'importer la fonction en PYTHON2.

    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
    #!/usr/bin/python2
    # -* coding: utf-8 -*-
    from __future__ import print_function
    import itertools
    from numpy import arange
     
    def get_one():
        items = arange(0.0, 1.0, 0.1)
        for x in itertools.product(items, repeat=5):
            if sum(x) == 1.0:
                yield x
     
    if __name__ == "__main__":
        for i, x in enumerate(get_one()):
            print(i, *x)
    Si tu débutes, pourquoi ne pas utiliser PYTHON3 ?

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    aucun relié à l'informatique
    Inscrit en
    Mai 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : aucun relié à l'informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Salut,

    Pourquoi le 2 au lieu du 3, simplement parce que j'utilise python dans le cadre d'une formation en finance et que tout le reste du matériel est en 2. C'est assez compliqué pour quelqu'un qui n'est pas programmeur, et en plus, je dois jongler avec deux logiciels différents: R et python!!!

    Jacques

  7. #7
    Membre averti Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Points : 344
    Points
    344
    Par défaut Solutions avec calcul des combinaisons
    Bonjour,

    Je te propose ce code en 3 parties :

    1. Calcul de listes de combinaisons pour 3 puis 5 paramètres
    2. Création de listes en combinant les 3 et 5 paramètres
    3. calcul du max de la fonction f avec toutes ces combinaisons

    Je n'ai pris en compte que les éléments (ab,c) et (m,n,o,p,q)


    Est ce ok ?

    Alex

    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
     
    def f((a,b,c), (d, e, f), (m, n, o, p, q), (r, s, t, u, v)):
        return a+b+c+m+n+o+p+q
     
    # Creation des listes de valeur ou la somme=1
    # ------pour 3 parametres
    valeurs_dim3=[] 
    valeurs_dixieme=[0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]
    for a in valeurs_dixieme:
        for b in valeurs_dixieme:
            for c in valeurs_dixieme:
                if a+b+c==1:
                    valeurs_dim3.append((a,b,c))
    print "nombre de cas pour 3 parametres",len (valeurs_dim3)
    # ------pour 5 parametres
    valeurs_dim5=[] 
    for a in valeurs_dixieme:
        for b in valeurs_dixieme:
            for c in valeurs_dixieme:
                for d in valeurs_dixieme:
                    for e in valeurs_dixieme:
                        if a+b+c+d+e==1:
                            valeurs_dim5.append((a,b,c,d,e))
    print "nombre de cas pour 5 parametres",len (valeurs_dim5)
     
    # Creation de la liste en combinant les 3 parametre et 5 parametres
    valeurs_total=[]
    for p1 in valeurs_dim3:
        for p2 in valeurs_dim5:
            valeurs_total.append((p1,p2)) 
    print "nombre de cas pour 3+5 parametres",len(valeurs_total)
     
    # Recherche du maxi
    max=0
    for i,valeur in enumerate(valeurs_total):
        val_cal=f(valeur[0],(0.1,0.2,0.3),valeur[1],(0.1,0.2,0.3,0.4,0.5))
        if val_cal>max:
            max=val_cal
            item_max=i
            print max,valeurs_total[i]
    print "---resultat---"
    print "maxi=",max
    print "Numero d'element=",item_max
    print "parametre pour le max=",valeurs_total[item_max]

Discussions similaires

  1. [AC-2007] Optimiser import données excel VBA
    Par mouadmagan dans le forum VBA Access
    Réponses: 5
    Dernier message: 18/03/2013, 15h11
  2. Réparer et optimiser les données par ligne de commande
    Par souissi_haythem dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 08/09/2010, 14h11
  3. Hashage & Optimisation stockage données
    Par white_angel_22 dans le forum Langage
    Réponses: 2
    Dernier message: 11/04/2007, 23h20

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