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

Prolog Discussion :

Réseaux sémantique et prolog


Sujet :

Prolog

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Points : 21
    Points
    21
    Par défaut Réseaux sémantique et prolog
    Bonjour tous le monde,

    Je solliciterais votre aide pour une implémentation d'un réseau sémantique en prolog.

    Alors, pour m’entraîner j'ai créer un réseau sémantique qui représente les personnages du seigneur des anneaux, pour ceux qui veulent l'image elle est ici.

    Voici l'implémentation en pro-log :

    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
    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
    /* all race */
    isa(race, humain).
    isa(race, elf).
    isa(race, dwarf).
    isa(race, magician).
    isa(race, orc).
    isa(humain, aragorn).
    isa(elf, legolas).
    isa(elf, arwen).
    isa(dwarf, gimli).
    isa(magician, gandalf).
    isa(magician, saoumane).
    isa(orc, gothmog).
     
    /* =================== human =============== */
    is_vilain(human, false).
    lifetime(human, 80).
    trait(human, brave).
    moving_method(humain, horse).
     
    %gondor
    isa(gondor,human).
     
    %haradrim
    is_vilain(haradrim, true).
    moving_method(haradrim, elephant).
    /* aragorn */
    isa(aragorn, gondor).
    weapon(aragorn, sword).
    moving_speed(aragorn, quickly).
    lifetime(aragorn, 210).
    sex(aragorn, male).
     
    /* ================= elf =================== */
    lifetime(elf, infinite).
    trait(elf, wise).
    color_hair(elf,blond).
    vision(elf, nyctalope).
    is_vilain(elf, false).
    weapon(elf, bow).
     
    /* legolas */
    sex(legolas, male).
     
    /* arwen */
    weapon(arwen, sword).
    color_hair(arwen, brown).
    isa(arwen, female).
     
    /* ================== dwarf ================== */
    moving_speed(dwarf, slowly).
    is_vilain(dwarf, false).
    trait(dwarf, selfish).
    weapon(dwarf, axe).
     
    /* gimli */
    sex(gimli, male).
     
    /* =============== magician =================*/
    lifetime(magician, infinite).
    weapon(magician, stick).
    trait(magician, powerful).
    is_vilain(magician, false).
    isa(magician, gandalf).
    isa(magician, saroumane).
     
    /* saroumane */
    is_vilain(saroumane, true).
    color(saroumane, white).
     
    /* gandalf */
    color(gandalf, grey).
     
    /* =============== orc ==================== */
    is_vilain(orc, true).
    sex(orc, male).
    moving_speed(gothmog, quickly).
    /* gothmog */
    weapon(gothmog, sword).
    moving_speed(gothmog, slowly).
    Donc la tout suite j'ai deux questions qui me vienne à l'esprit :

    Donc les "Humain" sont "une sorte de" (isa) de "race".
    Dans l'univers du seigneur des anneaux les humains sont des "gentils" (donc is_vilain = false), alors que les orc sont des "méchant" (is_vilain = true).
    Les humains se déplace en chevaux (moving_method = horse).

    Sauf que, si vous regardez attentivement le schémas, à ce niveau j'ai deux contraditions :
    1) Les humains sont des gentils => (is_vilain=false), mais les "Haradrim" sont du côté des méchants (is_vilain=true).
    2) Les humains se déplacent à chevaux, mais les "Haradrim" se déplacent à chevaux ET en éléphant.

    Premier question :
    Comment faire la distinction entre ces deux fait en prolog ? c'est à dire que dans le premier cas on écrase l'ancienne valeur de is_vilain et dans le deuxième cas on ajoute la valeur avec l'ancienne (chevaux + éléphant) ?

    Deuxième question :
    J'ai entendu parlé de représentation en "frame", est-ce que mon code pro-log représente mon réseau sémantique sous forme de frame ? Si non, pour quel raison ?

    PS : je tiens à précisé que je suis débutant en pro-log je cherche à m'entrainné.

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Quelques exemples pour que tu partes sur de bonnes bases :


    Citation Envoyé par White Angels Voir le message
    Donc les "Humain" sont "une sorte de" (isa) de "race".
    On représente des faits :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /* all races */
    race(human).
    race(elf).
    race(dwarf).
    race(magician).
    race(orc).
     
    human(aragorn).
    elf(legolas).
    elf(arwen).
    dwarf(gimli).
    orc(gothmog).

    Citation Envoyé par White Angels Voir le message
    Dans l'univers du seigneur des anneaux les humains sont des "gentils" (donc is_vilain = false), alors que les orc sont des "méchant" (is_vilain = true).
    Un prédicat pour dire "Si X est un orc, alors X est méchant" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    is_vilain(X) :-
      orc(X).
    Les humains sont gentils parce qu'on ne peut pas prouver is_vilain(X) dans ce cas.


    Citation Envoyé par White Angels Voir le message
    1) Les humains sont des gentils => (is_vilain=false), mais les "Haradrim" sont du côté des méchants (is_vilain=true).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /* Haradrims are humans */
    human(X) :-
      haradrim(X).
     
    /* Haradrims are vilains */
    is_vilain(X) :-
      haradrim(X).

    Citation Envoyé par White Angels Voir le message
    2) Les humains se déplacent à chevaux, mais les "Haradrim" se déplacent à chevaux ET en éléphant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /* All humans (including Haradrims) can move on horses */
    moving_method(X, horse) :-
      human(X).
     
    /* Haradrims can move on elephants as well */
    moving_method(X, elephant) :-
      haradrim(X).



    Citation Envoyé par White Angels Voir le message
    Premier question :
    Comment faire la distinction entre ces deux fait en prolog ? c'est à dire que dans le premier cas on écrase l'ancienne valeur de is_vilain et dans le deuxième cas on ajoute la valeur avec l'ancienne (chevaux + éléphant) ?
    Ça ne marche pas comme ça en Prolog.

    Comme tu as pu le voir, on définit des prédicats. Certains représentent des faits, exemple :
    ...d'autres te permettent de déduire des vérités si un fait est vérifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    is_vilain(X) :-
      orc(X).
    On n' "écrase" pas une valeur (ce n'est pas de la Programmation Impérative, c'est de la Programmation Logique).


    Citation Envoyé par White Angels Voir le message
    Deuxième question :
    J'ai entendu parlé de représentation en "frame", est-ce que mon code pro-log représente mon réseau sémantique sous forme de frame ? Si non, pour quel raison ?
    Je ne sais pas ce que tu veux dire par "représentation en frame".



    Citation Envoyé par White Angels Voir le message
    PS : je tiens à précisé que je suis débutant en pro-log je cherche à m'entrainné.
    Tu pourrais aussi t'entraîner sur l'orthographe (l'infinitif, ce n'est pas ton fort...)
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

Discussions similaires

  1. l'analyse sémantique en prolog
    Par stentorus dans le forum Prolog
    Réponses: 14
    Dernier message: 16/03/2010, 13h32
  2. Réseaux Macintosh/Linux
    Par hoby dans le forum Développement
    Réponses: 3
    Dernier message: 16/11/2002, 23h44
  3. réseaux neuronaux (iA)
    Par VincentB dans le forum Méthodes prédictives
    Réponses: 5
    Dernier message: 26/09/2002, 21h12
  4. Simulation de transmission de paquet entre différent réseaux
    Par MelloW dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 19h51

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