RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Srv: irc.moteurprog.com
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 accélération programme trop lent

Forum : FORTRAN
Sous Catégorie : Aucune
Type du sujet : Sujet Normale
FAQ : FAQ FORTRAN

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET SUJET NON RESOLU
BLOQUAGE DU SUJET SUJET ACTIF
APPARTENANCE A LA FAQ N'APPARTIENT PAS A LA FAQ


PAGES : [1] [2]

POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM FORTRAN

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
djocin
Nouveau membre
Inscrit : 26/06/2009
Messages : 6
Message
#164199
Posté le 26/06/09 à 10:35
Bonjour

Je requiers votre aide pour m'aider à optimiser un programme, car je ne vois pas comment faire.
Mon programme lit d'abord dans un fichier des données :

0.15 0.12 0.32 0.25 0.09 0.078 0.11 0.001 0.13 0.1 0.07 0.008 0.09 0.01 0.04 0.02


Ici il y a donc 8 lignes.
Ensuite je vais générer des nombres aléatoires, qui vont être stockés dans un vecteur ayant donc 8 coordonnées:

do i=1,8 RB(i)=rand(0) end do


(ce n'est pas exactement RB(i)=rand(0) qui est effectué, il y a une opération avec les nombres lus dans le fichier, mais c'est juste pour donner une idée)

Le truc est que je ne garde le RB que si les RB(i) vérifie une certaine condition (à savoire si les RB(i) sont inférieurs et supérieurs à certains nombres). Du coup si la condition n'est pas vérifiée, je recommence le tirage de nombres aléatoires, et rebelote jusqu'à ce que la condition soit vérifiée.

Mon problème vient du temps d'execution du programme. Pour 8 lignes de données, le calcul de RB prend entre 0 seconde et 1min30s. Pour 10 lignes, cela met entre 0s et 15min. Pour 100 lignes mon ordi n'arrive pas à me calculer un RB dans un temps raisonnable. Et le but de mon programme est d'avoir 4000 lignes...

Avez-vous une idée pour accélérer le programme?

Merci beaucoup de votre aide.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Publicité
Inscrit : X
Messages : X
Message
#Aucun

HAUT DE PAGE

  

rainbow
Superviseur :
- C & C++
Chef de projet(s) :
- IA savane
- Team MoteurProg

Avatar de rainbow
Inscrit : 26/05/2006
Messages : 1476
Message
#164200
Posté le 26/06/09 à 10:43
tu n'as pas un moyen de calculer un nombre aléatoire entre a et b ? ça t'éviterai de faire plusieurs tirages !

Un truc du genre rand(a,b); avec a et b les valeurs minimales et maximales de ton nombre.

Je ne connais pas du tout le fortran mais ça ne m'étonnerait pas qu'un équivalent de ceci existe!

€dit: ceci pourrait t'intéresser

http://infohost.nmt.edu/tcc/help/lang/fortran/scaling.html dit :
If you want an integer between i and j inclusive, use the expression:
int(rand(0)*(j+1-i))+i

For example, to get integers from 1 to 4, use:
int(rand(0)*4)+1

__________________________
............ Curtis: RTS 3D ..............
......Image
........... TeamMoteurProg...........

How to ask Questions ou Comment poser une question
TPE Rayons X et Scoliose

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE

djocin
Nouveau membre
Inscrit : 26/06/2009
Messages : 6
Message
#164201
Posté le 26/06/09 à 10:47
C'est déjà le cas automatiquement avec la fonction rand qui effectue un tirage selon une loi normale sur [0,1].

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

rainbow
Superviseur :
- C & C++
Chef de projet(s) :
- IA savane
- Team MoteurProg

Avatar de rainbow
Inscrit : 26/05/2006
Messages : 1476
Message
#164202
Posté le 26/06/09 à 10:48
j'ai édité mon post précédent, désolé !
__________________________
............ Curtis: RTS 3D ..............
......Image
........... TeamMoteurProg...........

How to ask Questions ou Comment poser une question
TPE Rayons X et Scoliose

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE

djocin
Nouveau membre
Inscrit : 26/06/2009
Messages : 6
Message
#164203
Posté le 26/06/09 à 10:55
oui oui j'avais vu :)

merci pour le lien mais je l'avais déja vu, c'est d'ailleurs ce site qui m'a appris à générer des nombres aléatoires

mais me rapeler ce lien m'a peut-être été utile, ça m'a donné une idée de modification de mon programme

si ça marche je vous enverrez un chèque ! :D

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

rainbow
Superviseur :
- C & C++
Chef de projet(s) :
- IA savane
- Team MoteurProg

Avatar de rainbow
Inscrit : 26/05/2006
Messages : 1476
Message
#164204
Posté le 26/06/09 à 10:58
djocin dit :
Le truc est que je ne garde le RB que si les RB(i) vérifie une certaine condition (à savoire si les RB(i) sont inférieurs et supérieurs à certains nombres).

tu connais ces nombres! Donc tu dis que a c'est un minimum et b le maximum. Tu fais le tirage aléatoire entre a et b et tu n'auras qu'un tirage à faire pour chaque ligne !
__________________________
............ Curtis: RTS 3D ..............
......Image
........... TeamMoteurProg...........

How to ask Questions ou Comment poser une question
TPE Rayons X et Scoliose

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE

rainbow
Superviseur :
- C & C++
Chef de projet(s) :
- IA savane
- Team MoteurProg

Avatar de rainbow
Inscrit : 26/05/2006
Messages : 1476
Message
#164211
Posté le 26/06/09 à 14:45
alors tu t'en sors ? t'essayes quoi ?
__________________________
............ Curtis: RTS 3D ..............
......Image
........... TeamMoteurProg...........

How to ask Questions ou Comment poser une question
TPE Rayons X et Scoliose

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE

djocin
Nouveau membre
Inscrit : 26/06/2009
Messages : 6
Message
#164213
Posté le 26/06/09 à 15:53
oui merci je m'en suis sorti :)
et c'est grâce à votre remarque Smiley

mais bon, comme toujours un problème est résolu, un autre encore plus gros apparaît... Smiley

auriez vous une idée de comment obliger mes nombres tirés aléatoirement d'avoir pour somme 1 ?

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

rainbow
Superviseur :
- C & C++
Chef de projet(s) :
- IA savane
- Team MoteurProg

Avatar de rainbow
Inscrit : 26/05/2006
Messages : 1476
Message
#164215
Posté le 26/06/09 à 16:08
tu tires combien de nombres ? peut être peux-tu en tirer aléatoirement uniquement les premiers puis tu calcules les derniers pour que la somme soit 1

c'est des nombres entre 0 et 1 donc ?

Ou alors tu calcules le premier, puis un nombre aléatoire entre 0 et (1-x1), puis un nombre aléatoire entre 0 et (1-x1-x2) etc.

Tu comprends ?

€dit: exemple
Aucun dit :
tirage 1: 0.3
tirage 2 (entre 0 et 0.7): 0.1
tirage 3 (entre 0 et 0.6): 0.4
tirage 4 (entre 0 et 0.2): 0.2

FIN


€dit 2: Si tu dois avoir que 4 chiffre et qu'au bout du 3eme tu n'as pas comme somme 1, tu calcules la dernière valeur
__________________________
............ Curtis: RTS 3D ..............
......Image
........... TeamMoteurProg...........

How to ask Questions ou Comment poser une question
TPE Rayons X et Scoliose

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE

djocin
Nouveau membre
Inscrit : 26/06/2009
Messages : 6
Message
#164226
Posté le 26/06/09 à 23:45
oui oui je vois, c'est d'abord ce que j'avais fait, j'avais calculé n-1 termes comme ça, pour ensuite calculer à la main de n ième, mais du coup ce n ième terme n'est pas dans le bon intervalle...

en tout cas merci pour vos réponse, et je vais réfléchir au truc du (1-x1) ... mais parès le week end :) ça fait une semaine que je suis sur ce prog, je vais décompresser un peu

bon week end et p-e à lundi !

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 
POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

PREMIERE PAGE

PAGE PRECEDENTE Page précédente

Page suivante

PAGE SUIVANTE DERNIERE PAGE

FORUM FORTRAN



    PAGES : [1] [2]



.: Site Web développé par Yann Pingot et l'équipe MPWG avec www.evolvia-web.com :.