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

Algorithmes et structures de données Discussion :

Automatiser la réponse au Sudoku


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par 2Eurocents
    Citation Envoyé par @drien
    N'empêche que comme ça il est pas bloqué son algo... souvent au Sudoku tu dois à un moment ou un autre faire des choix
    Non ! Si l'on a un choix à faire, c'est qu'il y a une règle qui n'a pas été appliquée.
    Il y a une preuve quelque part?

  2. #2
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Citation Envoyé par 2Eurocents
    Citation Envoyé par @drien
    N'empêche que comme ça il est pas bloqué son algo... souvent au Sudoku tu dois à un moment ou un autre faire des choix
    Non ! Si l'on a un choix à faire, c'est qu'il y a une règle qui n'a pas été appliquée.
    Il y a une preuve quelque part?
    Je n'en ai pas.

    Toutefois, si l'on doit faire une supposition, il faut pouvoir revenir en arrière dans la résolution, en cas d'erreur. Or au moyen des règles, il me semble qu'il est possible de résoudre toutes les grilles valides dans ce retour arrière - sans backtrack.

    C'est sur cette absence de retour en arrière que repose mon affirmation, péremptoire s'il en est !

  3. #3
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Apparemment, certaines personnes pensent qu'à cause du côté NP-complet du problème, on n'aura jamais toutes les règles.
    Je m'intéresse en ce moment au XY-Wing et ses généralisations - Medusa, Nishio, chaînes, ... -

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Par défaut
    il est certain que tous les problèmes ne peuvent être résolus à
    partir de régle
    il existe des positions non solubles sans essai erreur

    par ailleurs en termes d'efficacité un essai erreur voire 2
    (deux bigrammes non corrélés) est très payant

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Par défaut
    Bonjour,

    Je n'ai pas lu l'intégralité des 10 pages de réponses à ce post.
    Voici une version intéressante. J'espère juste ne pas faire doublon.

    Elle apporte une solution et présente "Choco", un framework de programmation par contrainte

    Génération de Sudoku
    Choco

    J'en profite pour passer un message.
    Si quelqu'un sait utiliser la programmation par contrainte pour faire de la planification de ressources (humaines), je suis preneur...

    Thierry.

  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 : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    Bonjour tout le monde,

    Je suis tombé sur ce sujet par hasard et même s'il commence à dater, il me parait interessant (même si, moi non plus, je n'ai pas lu l'intégralité des 10 pages).

    Tout d'abord, je ne savais pas qu'il y avait autant de gens qui s'interessaient à la résolution de sudoku. J'ai écrit un article (qui j'espère sera prochainement officiellement annoncé) sur la Programmation Logique avec Contraintes, que j'illustre justement avec un programme de résolution de sudoku:

    http://pcaboche.developpez.com/artic...og/clp/sudoku/

    Le programme est écrit en Prolog (langage servant à faire de la PROgrammation LOGique). Ce programme a été écrit en 1/2 journée, le jour où j'ai découvert le sudoku. J'ai choisi Prolog car il permettait de représenter ce problème de manière extrêment simple et efficace (la consistance d'arc est faite directement par la bibliothèque permettant la PLC).

    Prolog s'interface de manière très simple avec d'autres langages (C++, Java) ce qui permet, par exemple, de programmer l'interface graphique en C++ alors que la résolution se fera en Prolog (il faudra d'ailleurs que j'écrive un article sur le sujet).

    Pour découvrir le langage Prolog, c'est ici :
    http://pcaboche.developpez.com/artic.../presentation/

    (oui oui, je me fais ma petite pub au passage, j'ai le droit, non? )


    Citation Envoyé par tiboleo
    J'en profite pour passer un message.
    Si quelqu'un sait utiliser la programmation par contrainte pour faire de la planification de ressources (humaines), je suis preneur...

    Thierry.
    Cher Thierry,

    Je pense qu'il est tout à fait possible de représenter ce problème en PLC, reste à l'exprimer à l'aide de variables et de contraintes...

    Sinon, il est tout à fait possible de résoudre ce type de problème avec du Prolog "de base" (différents prédicats exprimant les contraintes, recherche de solutions + backtracking si une contrainte n'est pas respectée).

    L'avantage du Prolog, c'est que:
    - il permet d'exprimer ce genre de problèmes de manière simple
    - il peut s'interfacer les langages les plus courants

    De cette manière, tu ne te pose plus la question: "est-ce que j'écris mon programme en Java, comme ça je pourrai utiliser Choco?". A la place, tu te concentres sur la résolution de ton problème en Prolog (parce que c'est un langage adapté à ce type de problèmes). Pour l'interface graphique, tu verras plus tard... (personnellement, ça me parait plus logique comme manière de faire: quand on choisit une voiture, on commence rarement par la couleur)
    "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 expérimenté
    Avatar de mathk
    Inscrit en
    Décembre 2003
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 211
    Par défaut
    Il y a aussi des solver en python assez facille a comprendre:
    Sudoku Solver

  8. #8
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Il y a pleins de gens qui font de la résolution, de la création de grilles, ...
    Mon solveur a maintenant un solveur en ligne de commande et indiquant le niveau de difficulté, même si je compte encore un peu l'améliorer à ce niveau

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Par défaut
    prolog c'est bien beau mais c'est déléguer la résolution du problème à un logiciel qui grosso modo fait bêtement de l'exploration et élagage du champ du possible

    c'est camoufler une méthode essai-erreur derrière un paravent

    j'aimerais voir la performance de prolog face à un problème avec une grille de 100x100

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 154
    Par défaut
    la méthode essai erreur est parfaitement adaptée à la résolution de ce type de probleme, et prolog le fait tres bien, c'est optimisé pour ça.

  11. #11
    Membre éprouvé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Mai 2002
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Mai 2002
    Messages : 114
    Par défaut
    Moi ce que je viens de comprendre c'est que soit tu connais pas trop bien le jeu et tu fais des essais/erreurs, soit tu le maitrises et tu automatises les reflexions que tu fais quand tu joues. Ca doit finallement être applicable pour beaucoup de jeux (donc pour coder l'IA d'un jeu, il faut d'abord y jouer comme un malade )

    P.S.: J'ai déjà résolu des grilles difficiles à la main, et sans avoir à un seul endroit fait un choix (ou alors je ne m'en suis pas apperçu et je le c_l bordé de nouilles ), ce qui me conforte dans l'idée qu'une recherche par essais n'est pas la seule solution valable. En revanche je ne me suis jamais attaqué au niveau du dessus. :

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 154
    Par défaut
    en pratique il n'est pas possible d'éviter completement un algo de parcours en profondeur, ce qui correspond à un alog essai erreur.

    Meme un humain fonctionne ainsi pour résoudre une grille difficile, à une certaine echelle.

    Il en va de meme pour les autres jeux en général (echecs, go, awele, etc...)

  13. #13
    Membre éprouvé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Mai 2002
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Mai 2002
    Messages : 114
    Par défaut
    Je t'assure que des grilles difficiles (bon je ne dirai pas toutes les grilles, puisque je suis loin d'avoir parcouru toutes les possibilités) peuvent se faire sans essai, par simple déduction logique.
    J'entend par essai le fait de partir sur au moins 2 actions possibles et d'en observé les conséquences.
    Je ne me suis pas lancé sur le niveau très difficile, donc je ne serai pas aussi catégorique pour celle là.

    La difficulté est de coder dans l'algo le raisonnement que l'on a pour avancer, alors que l'algo est bloqué (je suis en train, moi aussi, de faire un petit solveur en C sans passer par un arbre de possibilité).

    Enfin ce qui me fascine le plus c'est le boum qu'a fait ce jeu.Tout le monde en parle et y joue. Tout le monde? Presque, car il reste un petit village d'irréductibles....

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 154
    Par défaut
    tu peux toujours élaborer des stratégies complexes qui vont éviter certains essais/erreurs, mais en fin de compte on peut toujours trouver des grilles dans lesquelles ces stratégies ne fonctionneront pas.

    donc si tu veux faire un solveur universel tu devras toujours implémenter cette méthode.

    De plus en pratique l'arbre de recherche est tres rapide, donc il n'y a pas de raison de coder des cas particuliers avant d'appliquer le cas général...

  15. #15
    Membre éprouvé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Mai 2002
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Mai 2002
    Messages : 114
    Par défaut
    De plus en pratique l'arbre de recherche est tres rapide, donc il n'y a pas de raison de coder des cas particuliers avant d'appliquer le cas général...
    Si la seule raison c'est de reproduire le raisonnement humain, dans un but ludique. C'est sur que ça n'a pas beaucoup d'interet quand un bon arbre de possibilité règle le problème. Mais pouvoir coder son raisonnement pour qu'un programme puisse le faire est tout de même satisfaisant (oui monsieur je suis très satisfait, même si mon prog ne résoud pour l'instant que du niveau facile ).

    tu peux toujours élaborer des stratégies complexes qui vont éviter certains essais/erreurs, mais en fin de compte on peut toujours trouver des grilles dans lesquelles ces stratégies ne fonctionneront pas.
    Est-ce vrai? Je suis dubitatif... Le prinicpe du Sudoku ne serait-il pas de permettre la résolution d'une grille sans faire d'essai/erreur :

  16. #16
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par Tellmarch
    en pratique il n'est pas possible d'éviter completement un algo de parcours en profondeur, ce qui correspond à un alog essai erreur.

    Meme un humain fonctionne ainsi pour résoudre une grille difficile, à une certaine echelle.

    Il en va de meme pour les autres jeux en général (echecs, go, awele, etc...)
    Faux. L'humain recourt à ces techniques car les techniques à utiliser sont très difficiles à mettre en place. Je pense en particulier aux chaînes d'implication, ...
    Par exemple, la grille la plus difficile connue se résoud SANS devinette.

  17. #17
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 154
    Par défaut
    dans beaucoup de grilles, on commence par essayer de placer un nombre, ça force le remplissage de plusieurs autres cases, et on arrive à une contradiction.

    C'est ce processus qui est effectué naturellement par l'etre humain.

    simplement quand on effectue ceci cela s'apparente à l'application d'une "regle", spécifique à la situation, donc on n'a pas forcement conscience qu'on vient d'essayer une méthode essai/erreur dans sa tete, à une profondeur limitée.

    simplement le nombre de telles regles serait presque infini, et elles sont toutes recouvertes par une méthode essai/erreur...

  18. #18
    Membre éprouvé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Mai 2002
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Mai 2002
    Messages : 114
    Par défaut
    Citation Envoyé par Tellmarch
    dans beaucoup de grilles, on commence par essayer de placer un nombre, ça force le remplissage de plusieurs autres cases, et on arrive à une contradiction.
    On ne joue peut-être pas de la même façon. Je ne fais jamais une hypothèse pour ensuite arriver à une contradiction. Quand je remplis une case de la grille, je suis sur de ce que j'y mets, sauf quand je me trompe

    La méthode par essai/erreur marche, ça personne ne le contredit, mais est-ce vraiment la seule utilisable pour le sudoku, telle est la question :

  19. #19
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 154
    Par défaut
    Bon j'ai vu beaucoup de grilles ou pour remplir une case, ce qu'il fallait utiliser c'est du genre :
    (je donne juste un exemple, tres simple, pour montrer le genre de raisonnement qu'on fait)

    Il y a forcement 2 ou 3 sur cette case (sinon on aboutit à une contradiction directe).
    Si y avait 3 alors sur la case d'à coté y aurait un 2, et ça marcherait pas.
    Donc c'est un 2 qu'il faut mettre sur la case.
    Et on remplit la case, en étant sur que c'est un 2 qu'il faut y mettre, comme tu le dis.

    Mais meme si ce raisonnement a été effectué dans la tete, et qu'on ne s'en rend pas compte, il s'agit bien d'un raisonnement par essai/erreur.

    et l'ordinateur peut tres bien et tres facilement automatiser ça dans le cas général.

  20. #20
    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
    Par défaut
    Pour en résoudre beaucoup, même les plus difficiles, c'est TOUJOURS par un raisonnement logique et sans suppositions qu'on peut trouver les nombres à trouver (j'inclus dans ce raisonnement logique ce que vient d'écrire Tellmarch, ce n'est pas un raisonnement essai/erreupour moi)
    "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. [XL-2010] Automatiser réponse dans une cellule
    Par tintin69 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/04/2015, 10h56
  2. Comment recevoir rapidement une réponse à votre question ?
    Par Community Management dans le forum Windows
    Réponses: 3
    Dernier message: 17/08/2014, 02h28
  3. [XL-2007] automatisation d'une réponse à un message
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 16/10/2010, 10h28
  4. Macro VBA : automatiser la réponse à une question.
    Par monf29 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/06/2007, 11h18
  5. réponse ds la meme page
    Par autumn319 dans le forum ASP
    Réponses: 13
    Dernier message: 03/09/2003, 18h02

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