Optimisation script matlab
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Optimisation script matlab



  1. #1
    invite1b7dccdc

    Optimisation script matlab


    ------

    Bonjour!
    J'ai écrit un programme Matlab que j'ai ensuite cherché à optimiser, mais le temps d'exécution du script "améliorer" est supérieur à celui du script initial
    Le script permet de modéliser l'évolution des fréquences des allèles (un variant d'un gène) dans une population, en fonction des générations.
    Le script est un tirage aléatoire de N allèles (génération t+1) dans un ensemble de N d'allèle (génération t), suivant une loi binomiale.
    Le code initial est ici :
    Code:
    T=input('nombre de générations ');
    Na=zeros(1,T);
    Pa=zeros(1,T);
    %Préallocation de mémoire, pour éviter l'allocation dynamique (création d'une nouvelle colonne à chaque génération)
    %Na et Pa représente respectivement le nombre d'allèles a dans la population et la fréquence de cet allèle
    N=input('taille de la population d''allèle ');
    Pa(1)=input('proportion de l''allèle considérée ');
    Na(1)=Pa(1)*N;
    for j=2:T
        if (Pa(j-1)~=0)&&(Pa(j-1)~=1)
            for i=1:N
                if rand*N<Na(j-1)
                    Na(j)=Na(j)+1;
                end
            end
            Pa(j)=Na(j)/N;
            
        end
        if Pa(j-1)==0
            Pa(j)=0;
        end
        if Pa(j-1)==1
            Pa(j)=1;
        end
    end
    Ce qui est intéressant pour la modélisation, c'est la fréquence Pa. Le fait de garder en mémoire Na sous forme d'une matrice est donc inutile. De plus, on peut remplacer rand*N<Na(j-1) par rand<Pa(j-1) puisque Pa=Na/N
    Le script modifié est donc :
    Code:
    T=input('nombre de générations ');
    Pa=zeros(1,T);
    N=input('taille de la population d''allèle ');
    Pa(1)=input('proportion de l''allèle considérée ');
    for j=2:T
        Na=0;
        if (Pa(j-1)~=0)&&(Pa(j-1)~=1)
            for i=1:N
                if rand<Pa(j-1)
                    Na=Na+1;
                end
            end
            Pa(j)=Na/N;
        end
        if Pa(j-1)==0
            Pa(j)=0;
        end
        if Pa(j-1)==1
            Pa(j)=1;
        end
    end
    Pour une simulation sur 500 générations, avec 50 000 allèles, et Pa=0,5; on obtient 25 s pour le 2nd script, et 16s pour le 1er
    Voilà donc si vous aviez une idée expliquant ça
    Et toutes remarques ou conseils pour optimiser le script sont les bienvenus

    -----

  2. #2
    invite4492c379

    Re : Optimisation script matlab

    Hello,

    par curiosité, 16s et 25s sont des temps moyens, tu n'as pas juste chronométré un essai pour chaque ?

  3. #3
    invite1b7dccdc

    Re : Optimisation script matlab

    Non, j'ai relancé le script plusieurs fois et les temps étaient les même, ce qui est logique vu les valeurs que prennent les variable (pas de pa=0 ou pa=1 sur 50 générations et 50 000 allèles, ce qui rendrait le script plus rapide pour les générations restantes).

  4. #4
    invite1b7dccdc

    Re : Optimisation script matlab

    Et je viens de me rendre compte de mon erreur , le profiler qui permet de connaître le temps d'exécution d'un script inclut la phase d'entrée des variables.
    En utilisant une autre fonction de comptage du temps, le 2nd script est en effet plus rapide que le 1er.
    j'ai juste été un peu lent à taper les variable

  5. A voir en vidéo sur Futura
  6. #5
    invite4492c379

    Re : Optimisation script matlab

    Donc tout va pour le mieux dans le meilleur des mondes

Discussions similaires

  1. optimisation de code Matlab
    Par invitec35bc9ea dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 06/03/2011, 17h50
  2. Optimisation sur Matlab
    Par invite834b1f2f dans le forum Physique
    Réponses: 6
    Dernier message: 24/12/2010, 17h32
  3. Lancer un script php depuis matlab
    Par invitea29b3af3 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 06/11/2010, 15h28
  4. Script matlab
    Par invitedd1e6316 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 05/05/2007, 13h46
  5. Optimisation boucle Matlab.
    Par invite01e6eb40 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 13/04/2007, 12h50