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

Intelligence artificielle Discussion :

Livre pour débutant sur l'I.A.


Sujet :

Intelligence artificielle

  1. #21
    Inactif  
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 357
    Points : 637
    Points
    637
    Par défaut
    Une opinion qui ne vaut que pour ce qu'elle est (c'est à dire une opinion ) : ne commence pas par prolog.

    J'ai enseigné prolog, et je pense que ce langage est génial (enfin pas pour les étudiants qui en gardent en général un mauvais souvenir ). Cependant c'est un langage très spécifique et de très haut niveau. Il fait appel à des notions qui ne sont pas trivial à la base.

    Perso mon conseil à un débutant serait d'aller vers un langage de type C/C++/java/c# (ils ne sont pas listés par ordre de préférence ) et de regarder vers des choses simples comme par exemple alphabeta, minmax, etc...
    L'avantage de ces langages est qu'ils te permettront de tout faire et de trouver facilement de l'aide / des bibliothèques pour faire ce que tu veux.

    En fait mon post rejoint complètement ce qu'a dit Cedriku...

    Une fois que tu te sentiras a l'aise avec un langage généraliste, tu pourras alors beaucoup plus facilement aller vers un langage de type fonctionnel. de toute façon tout informaticien maîtrise plusieurs langages et en apprendre de nouveaux ne doit pas le rebuter.

    Je plussoie également sur les mathématiques, et sur TOUS les aspects des maths : encore aujourd'hui je regrette le blocage que j'ai pu faire sur les stats en terminal (et depuis j'ai fait thèse + postdocs). Quand on se tourne vers l'info on a tendance a privilégier les maths discrètes et c'est une erreur.

  2. #22
    Membre du Club Avatar de nschoe
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 86
    Points : 44
    Points
    44
    Par défaut
    Bonsoir à tous,

    @Alp : Merci pour les liens, je vais étudier ça, algorithmie et je vais commencer à regarder ce qu'est PROLOG (et à quoi ça correspond).

    @Furikawari : Peut=être me suis-je mal exprimé, mais apprendre un nouveau langage n'est absolument pas quelque chose qui me rebute, au contraire, si j'avais le temps, j'aimerais apprendre des dizaines de langages, ne serait-ce que pour comparer. Maintenant, ne pas apprendre le PROLOG tout de suite, je peux le concevoir, si l'apprentissage "nécessite" en quelques sortes la connaissance de minimax, alphabêta ... comme je ne les ai pas, je comprends. Psr contre, un sujet qui me tracasse, tu dis qu'avant de commencer à apprendre PROLOG, il faudrait que je maitrise et sois à l'aise avec un langage, je prends pour exmeple C++, ma question est "comment sait-on qu'on est à l'aise ?" Car moi, je suis "à l'aise" avec C++, mais avec le C++ que je développe, et pas avec les applications en rapport avec l'I.A. qu'on peut en faire. Pour être plus ... compréhensible, ma question pourrait se résummer en gros à "À quoi est-ce que je dois m'entraîner avec le langage que je "maitrise" (ici C++)pour justement être à l'aise avec les principes de base de l'I.A. (tels que alphabêta, minimax ...) et pouvoir enchaîner sur le prolog?" (Si ce n'est toujours pas clair, demandez, je vais récapituler).

    En tout cas, merci de vos conseils à tous.

  3. #23
    Inactif  
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 357
    Points : 637
    Points
    637
    Par défaut
    Je ne mettais pas en doute ta capacité à apprendre de nouveaux langages, c'est probablement moi qui me suis mal exprimé...

    En fait je n'avais pas compris que tu étais déjà à l'aise avec un langage de programmation. Ce que je voulais dire sur prolog, c'est que le choisir comme premier langage c'est s'impose plusieurs difficultés à la fois : apprendre à programmer ET apprendre la programmation logique.

    Maintenant si la programmation est déjà acquise pour toi (pas besoin d'être un expert, par contre avoir implémenté 2 3 trucs à base de recherche dans un arbre pour être certain d'avoir compris quelques principes de base, comme passer d'un algo sur papier à son implémentation) alors fonce sur les langages qui correspondent au domaine qui t'intéresse : prolog, lisp, etc...

  4. #24
    Membre du Club Avatar de nschoe
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 86
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Non e nfait, lorsque je disais que j'étais "à l'aise", c'est qu'en quelque sortes, je pouvais me débrouiller avec un langage, le C++ en l'occurence. Mais je peux me débrouilelr sur les problèmes que j'ai déjà approché, or je n'ai jamais approché la recherche dans un arbre, d'ailleurs ma seule connaissance de ce qu'est un arbre est la définition de Wikipédia, ensuite, en ce qui concerne le passage d'un algo sur papier au langage, c'est pareil : n'ayant jamais eu d'algo un tant soit peu compliqué à faire, je n'ai jamais véritablement éprouvé le besoin de passer par papier avant.

    Donc aus vues de ce que vous me dîtes, je suppose qu'il me faille d'abord apprendre des bases en algorithmie, en étant si possible détaché de tout langage (ou alors en langage que je qualifierais d'"universel") afin que je sache comment raisonner, et ce qu'est la programmation logique.

    Finallement, sur les deux choses ("apprendre à programmer" et "apprendre la programmation logique"), il me reste une chose "apprendre la programmation logique" (bien que je n'ai nullement la prétention de m'imaginer avoir vu ne serait-ce qu'un dixième des possibilités qu'offre le C++ ^^).

    Donc : d'abord apprendres des bases d'algo et de progra logique ? Ou est-ce que je peux commencer le PROLOG ?

  5. #25
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par Alp Voir le message
    [...]
    @Garulfo > waw, serait-on tombés d'accord toi et moi ?
    [...]
    Et pourquoi ne pourrait-on pas ?
    Tu ne seras que d'accord avec un autre mathématicien du groupe.

  6. #26
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par Dreepser Voir le message
    Donc : d'abord apprendres des bases d'algo et de progra logique ? Ou est-ce que je peux commencer le PROLOG ?
    Tu peux tout commencer sur ton site préféré DVP, rubrique Prolog avec ses cours consultables ici.
    Il y a aussi un forum algo, bref tout ce dont tu as besoin pour débuter. Y'a pu ka !!!
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #27
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par Dreepser Voir le message
    [...]
    Donc : d'abord apprendres des bases d'algo et de progra logique ? Ou est-ce que je peux commencer le PROLOG ?
    Ça va un peu de soi. On ne peut pas apprendre complètement la théorie sans en mettre une partie en pratique. Tu ne peux donc pas apprendre l'algorithmie sans essayer d'en réaliser les résultats que tu obtiens et tu ne peux pas vraiment apprendre le paradigme de la programmation logique sans l'appliquer. C'est comme en math: on ne peut comprendre sans faire des exercices. Le langage PROLOG peut te servir de base pour ça donc. Cependant, n'importe quel langage fera l'affaire. Si par exemple tu étais très à l'aise en C++, en Java ou en Lisp, ce dernier ferait l'affaire.

    Mais, tant qu'à faire, tu devrais peut-être en profiter pour apprendre le PROLOG.

  8. #28
    Membre du Club Avatar de nschoe
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 86
    Points : 44
    Points
    44
    Par défaut
    Je vous remercie !

    Je vais essayer alors. J'avais déjà repéré la page de DVP sur le PROLOG, alors comme dirait Garulfo : Y pu ka !

  9. #29
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par Dreepser Voir le message
    Je vais essayer alors. J'avais déjà repéré la page de DVP sur le PROLOG, alors comme dirait Garulfo : Y pu ka !
    On ne prête qu'aux riches !
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  10. #30
    Membre du Club Avatar de nschoe
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 86
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Je viens au rapport (certes le sujet s'écarte du sujet initial, mais bon) !

    J'ai lu et tenté de comprendre brièvement hier soir les baes de PROLOG via le tuto de DVP ... ce n'est que 50% de réussite. J'ai eu pas mal de soucis à comprendre, c'est en effet TRÈS troublant pour quelque'un qui vient d'un langage impératif comme le C++ dans mon cas ...
    Mais après réflexion, j'aime bien ce côté "prévoir à l'avance".

    Autre sujet (et là je m'adresse un peu plus particulièrement à Alp et SpiceGuid) : j'ai reçu le livre ! "Intelligence Artificielle" de Stuart Russel et Peter Norvig.

    Y'a plus ka ^^

  11. #31
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Ce que tu peux essayer de faire, c'est prendre un algo que tu sais implémenter en C++ et essayer de l'implémenter en Prolog. Ça permet parfois de comprendre le mode de réflexion Prolog.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  12. #32
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    J'ai lu et tenté de comprendre brièvement hier soir les baes de PROLOG via le tuto de DVP ... ce n'est que 50% de réussite.
    T'as bien de la chance, moi j'ai réussi à lui faire dire "yes" puis plantage, puis bouche infinie (ou "patientez" ?) puis re-plantage puis re-boucle puis re-plantage puis abandon par KO
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  13. #33
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par SpiceGuid Voir le message
    T'as bien de la chance, moi j'ai réussi à lui faire dire "yes" puis plantage, puis bouche infinie (ou "patientez" ?) puis re-plantage puis re-boucle puis re-plantage puis abandon par KO
    Tu peux montrer ton code ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  14. #34
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Je ne sais pas si c'est lié au code, c'est GNU Prolog 1.3.0 pour Windows (parce que j'ai la flemme de compiler la souce pour Linux), et il se comporte différemment selon que je sélectionne le menu "Terminal/Line buffering" ou pas
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  15. #35
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Poste nous tout ça dans le forum Prolog

  16. #36
    Membre du Club Avatar de nschoe
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 86
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par SpiceGuid
    T'as bien de la chance, moi j'ai réussi à lui faire dire "yes" puis plantage, puis bouche infinie (ou "patientez" ?) puis re-plantage puis re-boucle puis re-plantage puis abandon par KO
    Attends, je me suis mal exprimé : je n'ai pas codé une seule ligne, je n'ai fais que lire et essayer de comprendre le tuto sur les bases de Prolog, pour ce qui est de coder, c'est une autre histoire...
    Au fait, je suis sous MAC OX, avec VIsta installé sous Bootcamp : pour le PROLOG, y a une version Mac ? Ou est-ce que le version Linux peut fonctionner ? Sinon je dois passer sous Vista ?

  17. #37
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par Dreepser Voir le message
    Au fait, je suis sous MAC OX, avec VIsta installé sous Bootcamp : pour le PROLOG, y a une version Mac ? Ou est-ce que le version Linux peut fonctionner ? Sinon je dois passer sous Vista ?
    Réponses ici.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  18. #38
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par Zavonen Voir le message
    Python me parait convenable pour prototyper, après il faut du C pur et dur, on ne fait pas mieux quant aux performances.
    Ou du Fortran, c'est encore plus terrible
    Mais je ne peux qu'approuver. Teste avec un langage comme Python, et quand tu voudras vraiment de la vitesse, passe les morceaux qu'il faut en C/C++/Fortran/ASM. Ca marche très bien.

  19. #39
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Ou du Fortran, c'est encore plus terrible
    Mais je ne peux qu'approuver. Teste avec un langage comme Python, et quand tu voudras vraiment de la vitesse, passe les morceaux qu'il faut en C/C++/Fortran/ASM. Ca marche très bien.
    A ce sujet, tout le monde parle de cet accélérateur foudroyant de Python qu'est le module psyco. J'ai voulu en avoir le coeur net et 'psycoter' un peu.
    J'ai donc pris un programme de mon cru un peu long et complexe, à savoir la vérification de la conjecture de Sierpinski (voir par exemple mon cours sur les rationnels) jusqu'à l'ordre 10000.
    J'ai donc pris l'original qui s'exécute en 32 secondes:
    Code python : 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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    #vérification de la conjecture de Sierpinski jusqu'à n=10000
    import math
    import time
    #variables globales utilisées par la méthode du crible d'Atkin
    limite=10000
    crible=[0]*limite
    racine= int(math.sqrt(limite))+1
    premiers=[2,3]
    # fin des v.g.
     
    # la méthode du crible d'Atkin
    def cond1 (n):
        return n<limite and ((n%12==1)or(n%12==5))
    def cond2(n):
        return n<limite and (n%12==7)
    def cond3(x,y,n):
        x>y and (n<limite)and (n%12==11)
    def debut():
        for x in range(1,racine):
            for y in range (1,racine):
                n=4*x*x+y*y
                if cond1(n):
                    crible[n]=not crible[n]
                n=3*x*x+y*y
                if cond2(n):
                    crible[n]=not crible[n]
                n=3*x*x-y*y
                if cond3(x,y,n):
                    crible[n]= not crible[n]
    def fin():
        for n in range(5,limite):
            L=[k*n*n for k in range(1,limite/(n*n))]
            for k in L:
                crible[k]=0
     
    def Stocke_Premiers():
        global crible, premiers
        debut() #début du crible d'Atkin
        fin() #fin du crible d'Atkin
        for i in range(5,limite):
            if crible[i]:
                premiers.append(i)
        crible=[] # récupération espace
     
    #teste l'hypothèse de Sierpsinski (force brute pour a,b <=k)
    def sierpinski2(n,k):
        for a in range (max(2,n/5)+1,k+1):
            for b in range (max(2,int(a*n/(5*a-n)))+1,k+1):
                if not (n*a*b)%(5*a*b-n*b-n*a):
                    return True
        return False
     
    # teste l'hypothèse de Sierpinski au moyen de l'algo glouton
    def sierpinski1(n):
        return len(egypt([5,n]))<=3
     
    #pgcd de deux entiers
    def pgcd(m,n):
        while m%n!=0:
            r=m
            m=n
            n=r%n
        return n
     
    #simplification d'une fraction
    def simplif(f):
        return [f[0]/pgcd(f[0],f[1]),f[1]/pgcd(f[0],f[1])]
     
    # décomposition de f en somme de fractions egyptiennes
    #par un algorithme 'glouton'
    # le résultat ne fait apparaître que les dénominateurs des fractions egyptiennes
    def egypt(f):
        f=simplif(f)
        result=[]
        i=2
        while f[0]!=1:
            if not f[1]%f[0]:
                i= f[1]/f[0]
            else:
                i=f[1]/f[0]+1
            f=simplif([f[0]*i-f[1],f[1]*i])
            result.append(i)
        result.append(f[1])
        return result
     
    def main():
        starttime = time.time() 
        Stocke_Premiers()
        print premiers[-1]
        #on récupère les nombres premiers pour laquelle la conjecture n'est pas vérifiée par l'algo de Fibonacci
        M=[n for n in premiers if not sierpinski1(n)]
        print len(M) # combien y en-a-t-il ?
        N=[n for n in M if not sierpinski2(n,8000)]
        print len(N) # si affiche 0 c'est que tout est vérifié
        print "Exécution en %f secondes." % (time.time() - starttime) 
    if __name__ == '__main__':
        main()
    Et je l'ai passé à la psycoteuse (intégralement, pas seulement les fonctions critiques):
    Code python : 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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    #vérification de la conjecture de Sierpinski jusqu'à n=10000
    import math
    import time
    import sys
    import types
    import psyco 
     
    #variables globales utilisées par la méthode du crible d'Atkin
    limite=10000
    crible=[0]*limite
    racine= int(math.sqrt(limite))+1
    premiers=[2,3]
    # fin des v.g.
     
    # la méthode du crible d'Atkin
    def cond1 (n):
        return n<limite and ((n%12==1)or(n%12==5))
    def cond2(n):
        return n<limite and (n%12==7)
    def cond3(x,y,n):
        x>y and (n<limite)and (n%12==11)
    def debut():
        for x in range(1,racine):
            for y in range (1,racine):
                n=4*x*x+y*y
                if cond1(n):
                    crible[n]=not crible[n]
                n=3*x*x+y*y
                if cond2(n):
                    crible[n]=not crible[n]
                n=3*x*x-y*y
                if cond3(x,y,n):
                    crible[n]= not crible[n]
    def fin():
        for n in range(5,limite):
            L=[k*n*n for k in range(1,limite/(n*n))]
            for k in L:
                crible[k]=0
     
    def Stocke_Premiers():
        global crible, premiers
        debut() #début du crible d'Atkin
        fin() #fin du crible d'Atkin
        for i in range(5,limite):
            if crible[i]:
                premiers.append(i)
        crible=[] # récupération espace
     
    #teste l'hypothèse de Sierpsinski (force brute pour a,b <=k)
    def sierpinski2(n,k):
        for a in range (max(2,n/5)+1,k+1):
            for b in range (max(2,int(a*n/(5*a-n)))+1,k+1):
                if not (n*a*b)%(5*a*b-n*b-n*a):
                    return True
        return False
     
    # teste l'hypothèse de Sierpinski au moyen de l'algo glouton
    def sierpinski1(n):
        return len(egypt([5,n]))<=3
     
    #pgcd de deux entiers
    def pgcd(m,n):
        while m%n!=0:
            r=m
            m=n
            n=r%n
        return n
     
    #simplification d'une fraction
    def simplif(f):
        return [f[0]/pgcd(f[0],f[1]),f[1]/pgcd(f[0],f[1])]
     
    # décomposition de f en somme de fractions egyptiennes
    #par un algorithme 'glouton'
    # le résultat ne fait apparaître que les dénominateurs des fractions egyptiennes
    def egypt(f):
        f=simplif(f)
        result=[]
        i=2
        while f[0]!=1:
            if not f[1]%f[0]:
                i= f[1]/f[0]
            else:
                i=f[1]/f[0]+1
            f=simplif([f[0]*i-f[1],f[1]*i])
            result.append(i)
        result.append(f[1])
        return result
     
    def bindfunctions(module):
        L=[value for key,value in module.__dict__.items() if type(value) is types.FunctionType]
        for f in L:
            psyco.bind(f) 
     
    def main():
        starttime = time.time()
        bindfunctions(sys.modules[__name__])
        Stocke_Premiers()
        print premiers[-1]
        #on récupère les nombres premiers pour laquelle la conjecture n'est pas vérifiée par l'algo de Fibonacci
        M=[n for n in premiers if not sierpinski1(n)]
        print len(M) # combien y en-a-t-il ?
        N=[n for n in M if not sierpinski2(n,8000)]
        print len(N) # si affiche 0 c'est que tout est vérifié
        print "Exécution en %f secondes." % (time.time() - starttime)
     
    if __name__ == '__main__':
        main()
    Le temps tombe à 15 secondes. C'est bien, mais ce n'est pas le facteur 10 promis par des benchmarks un peu 'orientés'. D'ailleurs les benchmarks on leur fait dire tout et son contraire. Il suffit de bien connaitre les faiblesses d'un langage pour inventer un BM qui l'écroule.
    Tout cela pour confirmer que si on veut vraiment de la puissance il faut bien retourner aux fondamentaux (Fortan, C).
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  20. #40
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Passe par Cython aussi pour vérifier

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/09/2010, 13h20
  2. cherche tutoriel ou livre pour débutant niveau 0
    Par orelilie dans le forum Livres
    Réponses: 4
    Dernier message: 07/09/2010, 21h26
  3. Quel livre pour débutant "confirmé".
    Par oxyaxion dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 27/06/2010, 09h35
  4. Livre pour débutant
    Par cool dans le forum Livres
    Réponses: 5
    Dernier message: 06/03/2010, 21h43
  5. ImageJ livre pour débutant
    Par mike20501 dans le forum ImageJ
    Réponses: 0
    Dernier message: 09/10/2008, 11h52

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