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 :

Probléme des N-reines.


Sujet :

Prolog

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Probléme des N-reines.
    bonjour a vous, je debute sous prolog et j'ai un projet a réaliser sur le prb des N-reines.
    j'ai lu kk tutoriel et je suis entrain de suivre la même methode que pour le sodoku, la Programmation Logique avec Contraintes (PLC).
    j'ai déclare mes variables entre autre mon échiquier de la forme suivante:
    echequier:[A1,A2,A3,A4,A5,A6,A7,A8,
    B1,B2,B3,B4,B5,B6,B7,B8,
    C1,C2,C3,C4,C5,C6,C7,C8,
    D1,D2,D3,D4,D5,D6,D7,D8,
    E1,E2,E3,E4,E5,E6,E7,E8,
    F1,F2,F3,F4,F5,F6,F7,F8,
    G1,G2,G3,G4,G5,G6,G7,G8,
    H1,H2,H3,H4,H5,H6,H7,H8]
    les lignes: (A-H) et les colonnes: (1-8),
    pour la Définition des domaine je bloque je n'arrive pas a trouver kk chose, merci de votre attention.

  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
    Pour ce type de problème, il y a beaucoup dee méthodes possibles, on peut en trouver beaucoup sur Internet.
    Tel que vous êtes partis, vous pouvez définir 8 lignes de longueur 8, dire que les valeurs de chaque lignes sont prises dnas 0..1 et que la somme des lignes est 1.
    On transpose les la matrice des lignes on obtient ainsi la matrice des colonnes, la somme des colonnes est 1.
    "Il ne reste plus" qu'à écrire les contraintes sur les diagonales.
    C'est une méthode possible.
    "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 habitué Avatar de sologne
    Homme Profil pro
    Chargé de missions
    Inscrit en
    Mai 2011
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Chargé de missions
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2011
    Messages : 73
    Points : 125
    Points
    125
    Par défaut
    bonjour,

    Voici une proposition de solution adaptée de l'ouvrage : Prolog Programming for Artificial Intelligence que je suis en train de lire.

    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
     
    solution([]).
    solution([reine(X,Y)|Rs]):-
    	solution(Rs),
    	element(Y,[1,2,3,4,5,6,7,8]),
    	nonattaque(reine(X,Y),Rs).
     
    nonattaque(Reine,[]).
    nonattaque(Reine,[R|Rs]):-
    	nondiagouligne(Reine,R),
    	nonattaque(Reine, Rs).
     
    nondiagouligne(reine(I,J),reine(I1,J1)):-
    	J \= J1,
    	N1 is I+J1, N2 is I1+J,  N1 \= N2,
    	N3 is I+J,  N4 is I1+J1, N3 \= N4.
     
    element(X,[X|L]).
    element(X,[Y|L]):-
    	element(X,L).
     
    soluce([reine(1,_),reine(2,_),reine(3,_),reine(4,_),reine(5,_),reine(6,_),reine(7,_),reine(8,_)]).
     
    trouver(X) :-
    	soluce(X),solution(X).
     
    // dans l'interpreteur saisir : trouver(X).
    Bon courage

  4. #4
    Membre habitué

    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 141
    Points
    141
    Par défaut
    Une solution ("laborieuse mais qui marche") par clpfd est de définir un domaine entre 1 et 64 et faire correspondre chaque indice à une position X et Y via un prédicat qui ramène la position (1=(1 2), 9=(2 1), 64=(8 8) etc...).
    Les contraintes (pas la même ligne, pas la même colonne, pas la diagonales) sont posées sur les positions retournées par ces prédicats.

Discussions similaires

  1. Problème des n-reines
    Par Myrne dans le forum MATLAB
    Réponses: 7
    Dernier message: 22/03/2011, 15h17
  2. Afficher toutes les solutions au problème des N-Reines
    Par pottiez dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 15h38
  3. solution non récursive au problème des N reines
    Par patrick974 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 12/09/2008, 15h45
  4. problème des N reines récursif
    Par duvi dans le forum C++
    Réponses: 7
    Dernier message: 20/02/2006, 13h45

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