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 :

Besoin d'aide optimisation de mon programme.


Sujet :

Prolog

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 65
    Points : 22
    Points
    22
    Par défaut Besoin d'aide optimisation de mon programme.
    Bonsoir, voilà je suis étudiant, je débute en prolog.

    Un programme pour vérifier une grille de programme tv suite à des phrases de personnes qui souhaitent regarder la télé...

    Voilà mon soucis, c'est que dans cette configuration de prog.
    Et pc : Ubuntu 10.10 64B, proc 2.10ghz, 3go Ram.
    Le résultat viens au bout de 3minutes....c'est trop long, je souhaite optimiser, mais je cale...il y a surement des choses que je peux modifier...

    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
     
    /*On sait qu''il y a quatre émissions différentes*/
    titre_emission(soiree_foot).
    titre_emission(gMYM_Ac).
    titre_emission(vmV).
    titre_emission(bobobo).
     
    /*ces émissions seront diffusés sur quatre jour différent.*/
     
    jour(lundi).
    jour(mardi).
    jour(mercredi).
    jour(jeudi).
     
    /*...à différents horraires.*/
    heure_diff(19).
    heure_diff(20).
    heure_diff(21).
    heure_diff(22).
     
    /*sur différentes chaines (ici apppelé réseau)*/
    reseau(france4).
    reseau(madagascar4).
    reseau(senegal6).
    reseau(quebec3).
     
     
     
    /*Un programme télé est défini par le titre de l''émission (A),
     du jour de diffusion (B), de l''heure de diffusion.(C),  de la chaine de diffusion (D)*/
    programme_tv(A,B,C,D):- titre_emission(A), jour(B), heure_diff(C), reseau(D).
     
    /*On sait que les informations des rubriques des protagonistes mystique et lilkim sont erronnées, on peut donc définir les prédicats suivant.*/
    mystique(A,B,C,D) :- A==soiree_foot, B\=jeudi, C\=21, D\=madagascar4.
     
    /*de même pour lilkim*/
    lilkim(A,B,C,D) :- A==gMYM_Ac, B\=mercredi, C\=19, D\=france4.
     
     
    /*on sait également que une des informations des autres protagonistes est eronnée, on va donc déduire
     les prédicats alizee, xorg, pamela et wolverine, en admettant à chaque fois qu''une seule valeur est eronnée*/
     
    /*predicat alizee*/
    alizee(A,B,C,D) :- A==soiree_foot, B\=jeudi, C==19, D==france4.
    alizee(A,B,C,D) :- A==soiree_foot, B==jeudi, C\=19, D==france4.
    alizee(A,B,C,D) :- A==soiree_foot, B==jeudi, C==19, D\=france4.
     
    /*predicat xorg*/
    xorg(A,B,C,D) :- A==gMYM_Ac, B\=mardi, C==19, D==madagascar4.
    xorg(A,B,C,D) :- A==gMYM_Ac, B==mardi, C\=19, D==madagascar4.
    xorg(A,B,C,D) :- A==gMYM_Ac, B==mardi, C==19, D\=madagascar4.
     
    /*predicat pamela*/
    pamela(A,B,C,D) :- A==vmV, B\=lundi, C==20, D==france4.
    pamela(A,B,C,D) :- A==vmV, B==lundi, C\=20, D==france4.
    pamela(A,B,C,D) :- A==vmV, B==lundi, C==20, D\=france4.
     
    /*predicat wolverine*/
    wolverine(A,B,C,D) :- A==bobobo, B\=mardi, C==22, D==senegal6.
    wolverine(A,B,C,D) :- A==bobobo, B==mardi, C\=22, D==senegal6.
    wolverine(A,B,C,D) :- A==bobobo, B==mardi, C==22, D\=senegal6.
     
     
    /*Main : on va déclarer un prédicat à 16 variables.*/
    resolution(A1,B1,C1,D1,A2,B2,C2,D2,A3,B3,C3,D3,A4,B4,C4,D4) :-programme_tv(A1,B1,C1,D1),programme_tv(A2,B2,C2,D2),programme_tv(A3,B3,C3,D3), programme_tv(A4,B4,C4,D4),mystique(A1,B1,C1,D1),lilkim(A2,B2,C2,D2),alizee(A1,B1,C1,D1),xorg(A2,B2,C2,D2),pamela(A3,B3,C3,D3),wolverine(A4,B4,C4,D4), A1==soiree_foot,A2==gMYM_Ac,A3==vmV,A4==bobobo,
    B1\=B2,B1\=B3,B3\=B4,B2\=B3,B2\=B4,B3\=B4,C1\=C2,C1\=C3,C1\=C4,C2\=C3,C2\=C4,C3\=C4,D1\=D2,D1\=D3,D1\=D4,D2\=D3,D2\=D4,D3\=D4.
    Je tiens d'avance à m'excuser, j'ai supprimé l'indentation de fin pour mes tests.

    note : programme_tv et pseudo(...) servent à vérifier toutes les possibilités.

  2. #2
    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
    Salut
    Ton exo ressemble à un classique (problème du zèbre, d'Einstein ...) déjà traité sur ce forum. (Après une lecture attentive des commentaires ce serait plutôt un logigramme).
    Je te conseille de t'inspirer de cette discussion :
    http://www.developpez.net/forums/d25...robl-me-z-bre/
    Pose des questions si tu bloques.
    PS : Peux-tu poster l'énoncé de l'exercice pour qu'on y voie un peu plus clair ?

    En regardant rapidement ton code, tu peux gagner du temps en déclarant directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    resolution(B1,C1,D1,B2,C2,D2,B3,C3,D3,B4,C4,D4) :-
    	programme_tv(soiree_foot,B1,C1,D1),
    	programme_tv(gMYM_Ac,B2,C2,D2),
    	programme_tv(vmV,B3,C3,D3),
    	programme_tv(bobobo,B4,C4,D4),
    	mystique(soiree_foot,B1,C1,D1),
    	lilkim(gMYM_Ac,B2,C2,D2),
    	alizee(soiree_foot,B1,C1,D1),
    	xorg(gMYM_Ac,B2,C2,D2),
    	pamela(vmV,B3,C3,D3),
    	wolverine(bobobo,B4,C4,D4),
    10 secondes sur ma machine.
    "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

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 65
    Points : 22
    Points
    22
    Par défaut
    Bonjour et merci, oui j'ai testé comme ça, mais ce qui m'a embêté c'est que les noms d'émissions ne s'affiche pas.

    le sujet en bref :

    mystique dit vouloir regarder soiree foot le jeudi à 21h sur madagascar4
    et lilkim, gymmac le mercredi 19h sur fr4.

    On sait que les informations sont erronées donc j'en déduit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mystique(A,B,C,D) :- A==soiree_foot, B\=jeudi, C\=21, D\=madagascar4.
     
    lilkim(A,B,C,D) :- A==gMYM_Ac, B\=mercredi, C\=19, D\=france4.
    ensuite on nous donne 4 informations et on apprends que une des informations est fausse on en déduit donc :


    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
    /*predicat alizee*/
    alizee(A,B,C,D) :- A==soiree_foot, B\=jeudi, C==19, D==france4.
    alizee(A,B,C,D) :- A==soiree_foot, B==jeudi, C\=19, D==france4.
    alizee(A,B,C,D) :- A==soiree_foot, B==jeudi, C==19, D\=france4.
     
    /*predicat xorg*/
    xorg(A,B,C,D) :- A==gMYM_Ac, B\=mardi, C==19, D==madagascar4.
    xorg(A,B,C,D) :- A==gMYM_Ac, B==mardi, C\=19, D==madagascar4.
    xorg(A,B,C,D) :- A==gMYM_Ac, B==mardi, C==19, D\=madagascar4.
     
    /*predicat pamela*/
    pamela(A,B,C,D) :- A==vmV, B\=lundi, C==20, D==france4.
    pamela(A,B,C,D) :- A==vmV, B==lundi, C\=20, D==france4.
    pamela(A,B,C,D) :- A==vmV, B==lundi, C==20, D\=france4.
     
    /*predicat wolverine*/
    wolverine(A,B,C,D) :- A==bobobo, B\=mardi, C==22, D==senegal6.
    wolverine(A,B,C,D) :- A==bobobo, B==mardi, C\=22, D==senegal6.
    wolverine(A,B,C,D) :- A==bobobo, B==mardi, C==22, D\=senegal6.
    après on demande de résoudre en vérifiant la solution unique.

    donc mon "main" ...
    donc ça fonctionne, mais je ne vois pas comment afficher les noms en même temps...

  4. #4
    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
    Peux-tu poster l'énoncé complet, j'ai l'impression que tu infères des faits erronés d'après le texte qui t'est donné.
    Il faut t'efforcer de traduire l'énoncé sans pré-supposés.
    "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

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 65
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Trap D Voir le message
    Peux-tu poster l'énoncé complet, j'ai l'impression que tu infères des faits erronés d'après le texte qui t'est donné.
    Il faut t'efforcer de traduire l'énoncé sans pré-supposés.
    hum je vous donne ça après (feuillet de 90 pages, je dois juste en trouver un exemplaire), juste savoir qu'avec ce que j'ai fait, j'obtient bien le résultat proposé en fin d'énoncé.

    juste en modifiant le prédicat resolution comme proposé ci dessus j'obtient plusieurs alerte de type :

    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
    Warning: /.../prolog/programme3.pl:2:
    	Redefined static procedure titre_emission/1
    Warning: /.../prolog/programme3.pl:9:
    	Redefined static procedure jour/1
    Warning: /.../prolog/programme3.pl:15:
    	Redefined static procedure heure_diff/1
    Warning: /.../prolog/programme3.pl:21:
    	Redefined static procedure reseau/1
    Warning: /.../prolog/programme3.pl:30:
    	Redefined static procedure programme_tv/4
    Warning: /.../prolog/programme3.pl:33:
    	Redefined static procedure mystique/4
    Warning: /.../prolog/programme3.pl:36:
    	Redefined static procedure lilkim/4
    Warning: /.../prolog/programme3.pl:43:
    	Redefined static procedure alizee/4
    Warning: /.../prolog/programme3.pl:48:
    	Redefined static procedure xorg/4
    Warning: /.../prolog/programme3.pl:53:
    	Redefined static procedure pamela/4
    Warning: /.../prolog/programme3.pl:58:
    	Redefined static procedure wolverine/4

  6. #6
    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
    C'est sans doute parce que tu utilises deux fichiers avec les mêmes prédicats.
    Ferme Prolog et relance le en ouvrant un seul de deux fichiers.
    "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

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/12/2010, 15h59
  2. Réponses: 1
    Dernier message: 12/04/2007, 11h30
  3. Besoin d'aide pour un petit programme
    Par Nico35 dans le forum C
    Réponses: 13
    Dernier message: 25/05/2006, 22h21
  4. Je besoin d'aide pour terminer mon code
    Par Paulinho dans le forum C++
    Réponses: 7
    Dernier message: 06/11/2005, 23h30

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