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 :

Base de connaissance sur Prolog ?


Sujet :

Prolog

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 192
    Points : 65
    Points
    65
    Par défaut Base de connaissance sur Prolog ?
    Comment déclarer une base de faits et une base de règles ? Bon, la base de règles je sais la faire mais je ne sais pas quand est-ce qu'un prédicat a des paramètres et quand il n'en a pas. Par exemple, voilà quelques règles et quelques faits :

    % les faits
    le candidat a actuellement un poste de responsabilite
    le candidat est slave
    voilà comment je les ai déclarés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    responsable(_).
    slav('slave').
    % les regles
    si le candidat a actuellement un poste à responsabilité et le candidat a des facilités pour apprendre les langues et le candidat parle néérlandais
    alors le candidat est dynamique
    voilà comment je les ai déclarés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dynamiq(_) :-
    responsable(_),
    facilite('langue'),
    neerlend(_).
    si le candidat a des facilités pour apprendre les langues et le candidat parle anglais alors le candidat a une bonne adaptabilite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    adaptable(_) :-
    facilite('langue'),
    facilite('anglais').
    si le candidat est slave et le candidat est dynamique alors le candidat a une bonne adaptabilité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    adaptable(_) :-
    slav('slave'),
    dynamiq(_).
    Merci à tous ceux qui vont m'aider pour faire ce travail avec un langage que je viens de découvrir. Le problème est que je n'ai pas beaucoup de temps pour le connaître.
    Ciao

  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
    Je vais reprendre ton problème.

    Tout d'abord, ça serait bien qu'on puisse identifier ton candidat. Comme il est slave, nous allons l'appeller "Piotr" (comme Pierre, mais en Russe):

    Le candidat a actuellement un poste à responsabilités
    Le candidat est slave:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    responsable('Piotr').
    origine_ethnique('Piotr', slave).
    Si le candidat a actuellement un poste à responsabilités et le candidat a des facilités pour apprendre les langues et le candidat parle neerlandais, alors le candidat est dynamique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dynamique(Candidat)  :-
       responsable(Candidat),
       qualite(Candidat, 'facilite pour apprendre les langues'),
       parle(Candidat, 'neerlandais').
    Si le condidat a des facilités pour apprendre les langues et le candidat parle anglais, alors le candidat a une bonne adaptabilité:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bonne_adaptabilite(Candidat)  :-
        qualite(Candidat, 'facilite pour apprendre les langues'),
        parle(Candidat, 'anglais').
    Si le candidat est slave et le candidat est dynamique, alors le candidat a une bonne adaptabilite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bonne_adaptabilite(Candidat)  :-
        origine_ethnique(Candidat, slave),
        dynamique(Candidat).
    Voilà, ce n'était pas très compliqué...


    Si tu veux en apprendre plus sur Prolog, je te conseille de lire certains de mes articles sur le sujet: http://pcaboche.developpez.com
    Si certains points ne sont pas très clairs, si tu as des questions ou des suggestions, n'hésite pas à en parler.

    A part ça, le Français est-il ta langue maternelle ou pas?
    "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...

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 192
    Points : 65
    Points
    65
    Par défaut
    si le candidat a actuellement un poste de responsabilité alors le candidat a une capacité de leadership
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    leadership(Candidat) :-
    responsable(Candidat).
    si le candidat a des facilites pour apprendre les langues alors le candidat parle néerlandais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    parle(Candidat,'neerelandais') :-
    qualite(Candidat, 'facilite pour apprendre les langues').
    si le candidat a une bonne adaptabilité et le candidat a une capacité de leadership alors le candidat est accepte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    accepte(Candidat) :-
    bonne_adaptabilite(Candidat),
    leadership(Candidat).
    si le candidat est slave alors le candidat a des facilites pour apprendre les langues
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    qualite(Candidat, 'facilite pour apprendre les langues') :-
    origine_ethnique(Candidat, slave).
    si le candidat a une capacité de leadership et le candidat est slave alors le candidat a une bonne adaptabilité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bonne_adaptabilite(Candidat) :-
    leadership(Candidat),
    origine_ethnique(Candidat, slave).
    C'est correct ? J'ai oublie de vous dire le but recherché : "le candidat est accepté". Voilà, merci de corriger.

    pour l'anglais je suis nul je dirais pas non si tu veux m'apprendre lol et t'inquiète tu auras toujours des merci alors ne pleure pas

  4. #4
    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
    Ca m'a l'air correct, cependant tu devrais utiliser les balises CODE (le # dans l'interface).

    A part ça, je pense que certains prédicats risquent de te retourner plusieurs fos les mêmes solutions.

    Par exemple, si le candidat est slave, dynamique, parle Anglais et a des facilités pour les langues, le prédicat bonne_adaptabilite/1 renverra 2 fois le même candidat. Il est possible de modifier ce comportement, mais ça complique un peu le programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    bonne_adaptabilite(Candidat)  :-
       bonne_adaptabilite1(Candidat) ; bonne_adaptabilite2(Candidat).
     
     bonne_adaptabilite1(Candidat)  :-
      origine_ethnique(Candidat, slave),
      dynamique(Candidat).
     
    bonne_adaptabilite2(Candidat)  :-
      qualite(Candidat, 'facilite pour apprendre les langues'),
      parle(Candidat, 'anglais').
    "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...

  5. #5
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 192
    Points : 65
    Points
    65
    Par défaut
    meme moi j'ai remarque qu'il y a des predicat qui se ressemble mais l'enance est comme ca :p
    c quoi " les balises CODE (le # dans l'interface)" j'utilise le swi-prolog. mnt que j'ai definit ma base de connaissance ,je dois resoudre le probleme pose mais j'ai aucune idee comment commence .
    dois je definir d'autre predicats pour le processus de resolution? merci encore

  6. #6
    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
    Citation Envoyé par makaphrodite
    meme moi j'ai remarque qu'il y a des predicat qui se ressemble mais l'enance est comme ca :p
    C'est surtout pour éviter d'avoir 2 fois la même solution, mais c'est un détail...


    Citation Envoyé par makaphrodite
    c quoi " les balises CODE (le # dans l'interface)"
    Je parle de l'interface du forum. Pour plus de lisibilité, il faut entourer le code des balises "code". Je n'ai pas les droits de Modérateur, alors c'est Alcatîz qui l'a fait.



    Citation Envoyé par makaphrodite
    mnt que j'ai definit ma base de connaissance ,je dois resoudre le probleme pose mais j'ai aucune idee comment commencer
    Ca dépend en fait de ton énoncé.

    Là, on a surtout défini les règles, ensuite il faut définir les faits (ex:" Piotr est slave, parle Anglais, etc.") avant d'interoger la base de connaissance (faits+règles) au moyen de prédicats tels que accepte/1 ("le candidat X est-il accepté?").


    En plus, en swi-prolog, tu disposes d'un débuggeur qui te permet de comprendre ce qu'il se passe quand tu exécute un prédicat Prolog. C'est assez utile parfois.
    "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...

  7. #7
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 192
    Points : 65
    Points
    65
    Par défaut
    en realite tu as l'enonce :p ,on a 2 faits et 8 regles et ce qu'on cherche c "le candidat est accepte" (la question est :decrire le processur de resolution du probleme) merci pierre

  8. #8
    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
    Citation Envoyé par makaphrodite
    (la question est :decrire le processur de resolution du probleme)
    Le plus simple alors, c'est de faire une trace, de lancer le prédicat, de regarder (et surtout de décrire) ce qu'il se passe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    |?- trace.
    |?- accepte('Piotr').
    Et si tu veux, tu peux même le faire avec le debuggeur graphique:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    |?- guitracer.
    |?- trace.
    |?- accepte('Piotr').
    "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...

  9. #9
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 192
    Points : 65
    Points
    65
    Par défaut
    je sais pas comment utilise la balise code# :p

    j'ai fais les instructions
    code
    |?- guitracer.
    |?- trace.
    |?- accepte('Piotr').

    et j'ai eu une new fentre ou il y a

    Bindings
    Candidat ='piotre'

    Call Stack

    7 accepte/1
    8 bonne_adabtabilite/1
    9 leadership/1
    10 respensable/1
    11 accepte /1

    et une autre ou il y a ma base de connaissance un peu colore :p


    c quoi tt ca ? en fin sur tt Call Stack merci encore pierre

  10. #10
    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
    Citation Envoyé par makaphrodite
    c quoi tt ca ?
    Tout ça, c'est l'état de ton programme en début d'exécution de ton prédicat.

    "Call Stack", comme le nom l'indique, c'est l'état de la pile durant l'exécution (avec le nom des prédicats appelés et les différents points de choix)

    Pour exécuter le programme pas à pas, il faut appuyer sur la flèche ( ). Tu verras alors les différentes étapes d'exécution de ton programme, l'état de tes variables, l'état de la pile, etc.
    "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...

  11. #11
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 192
    Points : 65
    Points
    65
    Par défaut
    comment faire pour sauvegarde la trace d'exécution ,le programme est sur bloc note ,mais l'exécution est sur prolog et il n y a aucun mot qui indique que je puisse sauvegarder ,mercie Pierre et bonne journee ciao

  12. #12
    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
    Dans le menu, tu as tout ce qu'il faut pour faire des copier/coller.

    A mon avis, ce que tu dois faire, c'est plus commenter la trace (dire ce qu'il se passe, comment le programme s'exécute) que de recopier la trace bêtement.
    "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...

  13. #13
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 192
    Points : 65
    Points
    65
    Par défaut
    et si j'utilisai visual prolog ,c mieux ? mais c un vrai casse tete chinoi pour moi le visual

  14. #14
    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
    J'ai jamais essayé Visual Prolog. En plus c'est commercial donc j'ai tendance à moins m'y interesser...
    "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...

  15. #15
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 192
    Points : 65
    Points
    65
    Par défaut
    lors de l'exécution pas a pas , les états change je veux dire le chemin de trouver la solution est différent (disant qu'il y a des chemins) chaque fois les prédicat appelés changer. qcq je vais decrir alors ? pour mon rapport

  16. #16
    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
    Et bien c'est simple: il faut que tu décrive ce qu'est un predicat, une clause, une solution, un point de choix et ce qu'il se passe quand on exécute un prédicat Prolog (retours arrières, unification, etc). Tout ça, c'est expliqué dans mes articles. Bonne lecture !
    "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...

  17. #17
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 192
    Points : 65
    Points
    65
    Par défaut
    Encore un truc , pour le prédicat bonne_adaptabilite il y en a 3 et deux d'entre eux tu les as regroupés et, pour le 3ème, dois-je faire la même chose c'est-à-dire écrire
    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
    bonne_adaptabilite(Candidat) :-
    bonne_adaptabilite1(Candidat) ; bonne_adaptabilite2(Candidat);
    bonne_adaptabilite3(Candidat).
     
    bonne_adaptabilite1(Candidat) :-
    origine_ethnique(Candidat, slave),
    dynamique(Candidat).
     
    bonne_adaptabilite2(Candidat) :-
    qualite(Candidat, 'facilite pour apprendre les langues'),
    parle(Candidat, 'anglais').
     
    bonne_adaptabilite3(Candidat) :-
    leadership(Candidat),
    origine_ethnique(Candidat, slave).
    Désolé, c'est maintenant que j'ai remarqué ce 3ème prédicat merci encore Pierre

  18. #18
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 192
    Points : 65
    Points
    65
    Par défaut
    Voilà quelques lignes du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Call: (7) accepte('Piotr') ? creep
    Call: (8) bonne_adaptabilite('Piotr') ? creep
    Qu'est-ce que signifie creep dans ce cas, call je pense que ça signifie qu'il y a appel de prédicat et creep ? Normalement ce sont les derniers détails et c'est bon merci encore Pierre.

  19. #19
    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
    "creep" = on évalue le but (on déroule l'algo).
    "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...

  20. #20
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 192
    Points : 65
    Points
    65
    Par défaut
    merci Pierre de m'avoir aide et dsl si je t'ai embêté avec mes questions salem alikoum

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Base de connaissance avec prolog
    Par soon02 dans le forum Prolog
    Réponses: 1
    Dernier message: 29/12/2010, 16h33
  2. Quel langage pour implementer une base de connaissance sur Web ?
    Par Siguillaume dans le forum Général Conception Web
    Réponses: 18
    Dernier message: 04/02/2008, 12h43
  3. Replication d'une base AS/400 sur SQL Server
    Par david_chardonnet dans le forum Autres SGBD
    Réponses: 9
    Dernier message: 21/11/2003, 12h17

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