Raisonner par branches

Salut à  tous


 


J'ai revu récemment Die Hard 3. Et un truc m'a interpellé. C'est la scène avec l'énigme des bidons de 5L et de 3L. Avec ces bidons il faut faire 4L. Je connaissais déjà  la réponse mais je me suis demandé : pourquoi ne pas faire chercher la solution à  un ordinateur ?


 


Bah justement je me demandais comment il était possible de faire réfléchir un ordinateur à  ce type de problème. Par exemple, faire un programme (en c par exemple) qui demande d'entrer la quantité du bidon 1 (3L par exemple), la quantité du bidon 2 (5L par exemple). Et j'avais pensé à  un raisonnement par branche. Faire un arbre avec 6 possibilités d'actions qui seraient : Transfert bidon 1 vers 2 ; Transfert bidon 2 vers 1 ; Remplir bidon 1 ; Remplir bison 2 ; Vider bidon 1 ; Vider bidon 2.


 


Mais après comment faire ? Et déjà  est-ce qu'il faut passer par un raisonnement par branche ou pas ? Car des fois je me dit que cette solution à  ses limites. Par exemple, si je vide le bidon 1, j'ai la possibilité de le remplir. Mais si je le remplit, j'ai la possibilité de le vider et ainsi de suite et on peut tomber dans une boucle infinie. Sauf si on dit qu'on a pas le droit de faire la même action que l'action précédente. Là  c'est possible.


 


Mais la solution par branche est-elle une bonne solution ?


 


Je pose se petit problème par simple curiosité et ça m'intéresserais d'en savoir plus. Donc si vous avez des idées, que vous avez des hypothèses ou autre, je suis preneur de toutes les informations possible car c'est un petit programme qui m'intéresse et qui pourrait m'être utile à  l'avenir.


 


Merci d'avance :)


Réponses

  • AliGatorAliGator Membre, Modérateur
    Moi je ferais ça en backtracking (le langage le plus approprié pour ce genre de chose étant le Prolog, mais c'est un langage de chercheur, pas trop fait pour les input/output & co).

    En backtracking (qui finalement est le parcours d'un arbre, façon A* si tu fais des coupes franches dedans), tu peux tout à  faire dire de couper la branche une fois que tu es déjà  allé dessus. Pour pas pouvoir retourner en arrière ;)
  • Merci AliGator. Déjà  j'ai appris quelques trucs par exemple le backtracking. Je ne savais pas que ça s'appelait comme ça mais en gros c'est à  ça que je pensais.

    Le A* je connais mais je pensais que c'était juste pour créer des chemins et non pour résoudre ce genre de problème.


    En fait c'est assez "gros" comme code non ? En tout cas c'est déjà  boen d'avoir du vocabulaire pour les recherches sur le web ça aide. Je vais donc me renseigner là  dessus. Car finalement c'est un début d'intelligence artificielle ?


    Par contre je ne connaissais pas le Prolog. Je savais qu'il y avait un langage pour coder des intelligences artificielles mais je me souviens plus du nom...

    Je voulais tenter de le faire en C car je le maà®trise bien et que mon prof d'informatique serait un peu épaté ;)


    Merci pour ta réponse en tout cas ça me met sur la piste :)
  • Ah... Ce n'est pas un thread sur la gestion de conf.


  • CéroceCéroce Membre, Modérateur


    Car finalement c'est un début d'intelligence artificielle ?




    Non, on appelle ce domaine de l'informatique la "recherche opérationnelle".


     


    En langage courant, l'intelligence artificielle, c'est tout ce qui peut faire paraà®tre un ordinateur intelligent. Mais il me semble que pour qualifier cela d'intelligence artificielle, il doit y a une notion d'apprentissage.

  • BenjoBenjo Membre
    novembre 2014 modifié #6


    Non, on appelle ce domaine de l'informatique la "recherche opérationnelle".


     


    En langage courant, l'intelligence artificielle, c'est tout ce qui peut faire paraà®tre un ordinateur intelligent. Mais il me semble que pour qualifier cela d'intelligence artificielle, il doit y a une notion d'apprentissage.




    Il me semble aussi effectivement.


     


    Tenez, j'ai fait un petit organigramme ce matin pour modéliser le problème. J'ai pas tout à  fait fini, mais en gros ça donne une idée du truc à  réaliser (voir pièces jointes). Et j'ai remarqué un truc, c'est que si je fais dire à  mon algo que si il a déjà  testé un résultat (genre 3;0) il ne repasse pas dedans et il teste autre chose, bah j'ai remarqué qu'il n'y avait qu'une seule branche qui s'offrait à  la résolution. Et finalement, si une seule branche s'offre à  cette résolution, c'est finalement pas très difficile à  coder non ? Vous en pensez quoi ?


  • Le terme d'intelligence artificielle n'est plus très utilisé. Les gens travaillant dans le secteur préfèrent parler de Machine Learning.
Connectez-vous ou Inscrivez-vous pour répondre.