Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1753 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  Matrice de chiffres aléatoires - Récursivité

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Matrice de chiffres aléatoires - Récursivité

n°1085521
AthlonSold​ier
Feel the power
Posté le 16-05-2005 à 15:40:32  profilanswer
 

Bonjour,
 
J'ai décidé de me lancer dans un petit défi de programmation (qui sera peut-etre simple pour certains  :lol: ) dont voici les étapes :
 

  • Etape 1 - Génération aléatoire d'une matrice


- Une matrice de 5*5 de chiffres aléatoires est générée
 
http://www.phlos.com/ovh/matrice.png
 

  • Etape 2 - Création d'une nouvelle matrice à partir de la première


On génère la matrice 2 avec les régles suivantes :
- On pars du point (1,1)
- On peut se déplacer en haut, en bas, à droite et à gauche uniquement
- Les déplacements se font uniquement d'une case adjacente
- Le déplacement est autorisé uniquement si la valeur du chiffre en (1,1) est supérieur ou égal à la valeur de la case où l'on veut se rendre
 
On arrive à cela :
 
http://www.phlos.com/ovh/matrice2.png
 

  • Etape 3 - Calcul du chemin optimal à partir de la matrice précedante


- On calcul un chemin optimal pour aller de la case (1,1) à la case (5,5)
 
Là je coince, je voudrais arriver à cela (meme s'il existe plusieurs chemins optimaux, le programme n'en choisira qu'un aléatoirement) :
 
http://www.phlos.com/ovh/matrice3.png
 
Je ne sais pas comment construire l'algo qui permet d'obtenir ce chemin optimal...
 
Merci pour votre aide.


Message édité par AthlonSoldier le 16-05-2005 à 15:52:20
mood
Publicité
Posté le 16-05-2005 à 15:40:32  profilanswer
 

n°1085553
AthlonSold​ier
Feel the power
Posté le 16-05-2005 à 15:49:26  profilanswer
 

Un autre exemple d'une génération d'une matrice de départ et du calcul des autres (pour ceux qui ont pas bien compris mes explications)
 
http://www.phlos.com/ovh/newmatrice.png
 
Dans ce cas, il n'y a qu'un chemin optimal.


Message édité par AthlonSoldier le 16-05-2005 à 15:52:58
n°1085628
satirik
Posté le 16-05-2005 à 16:10:52  profilanswer
 

tu fais tous les chemins et tu prend celui qui à le moins de case ...

n°1085673
AthlonSold​ier
Feel the power
Posté le 16-05-2005 à 16:26:55  profilanswer
 

:lol: Ca c'est bon, je suis assez intelligent pour avoir aussi trouvé cette méthode. Le problème c'est pour l'implanter...
 
Je demande pas un algorithme tout pret, mais au minimum la logique d'ensemble de l'algo.  :jap:


Message édité par AthlonSoldier le 16-05-2005 à 16:28:32
n°1085757
satirik
Posté le 16-05-2005 à 16:59:04  profilanswer
 

ben tu prend la premiere case tu autorise d'aller partout sauf de revenir sur ses pas (chemin moisie) et tu fais toutes les directions pour toutes les cases ou tu vas, tu garde juste les chemins qui arrivent au bout et tu prend le plus petit  
 
mais bon c'est super nul comme algorithme (ca rame ca bouffe de la memoire c'est le plus bourrin des algos possible) apres pour opti c'est des maths ...


Message édité par satirik le 16-05-2005 à 17:07:49
n°1085788
papy_danon​e
Posté le 16-05-2005 à 17:18:04  profilanswer
 

regarde du coté des algorithme A*. Ca permet de trouver le chemin le plus court sans parcourir tous les chemins (en fait l'algorithme A* est plus général que ça, on l'applique juste dans un cas particulier du labyrinthe ici). Le seul inconveniant de cet algorithme c'est qu'il va parcourir toutes les cases si aucun chemin entre les deux points (depart et arrivé) existe.
 
http://leri.univ-reims.fr/~nocent/lectures/Astar.pdf


Message édité par papy_danone le 16-05-2005 à 17:42:36
n°1085840
AthlonSold​ier
Feel the power
Posté le 16-05-2005 à 18:20:45  profilanswer
 

papy_danone a écrit :

regarde du coté des algorithme A*. Ca permet de trouver le chemin le plus court sans parcourir tous les chemins (en fait l'algorithme A* est plus général que ça, on l'applique juste dans un cas particulier du labyrinthe ici). Le seul inconveniant de cet algorithme c'est qu'il va parcourir toutes les cases si aucun chemin entre les deux points (depart et arrivé) existe.
 
http://leri.univ-reims.fr/~nocent/lectures/Astar.pdf


 
Merci  :love:

n°1085844
AthlonSold​ier
Feel the power
Posté le 16-05-2005 à 18:21:26  profilanswer
 

satirik a écrit :

ben tu prend la premiere case tu autorise d'aller partout sauf de revenir sur ses pas (chemin moisie) et tu fais toutes les directions pour toutes les cases ou tu vas, tu garde juste les chemins qui arrivent au bout et tu prend le plus petit  
 
mais bon c'est super nul comme algorithme (ca rame ca bouffe de la memoire c'est le plus bourrin des algos possible) apres pour opti c'est des maths ...


 
Fait le, tu verras que c'est bien plus compliqué que ca a programmer  :o  :D  
Mais merci quand meme  :jap:

n°1090206
AthlonSold​ier
Feel the power
Posté le 20-05-2005 à 01:58:16  profilanswer
 

J'ai fini l'implantation de l'algorithme A*. Mais j'ai un petit probleme :
 
http://www.phlos.com/ovh/astar.png
 
En fait ca ne me donne pas forcement le meilleur chemin possible mais "un des meilleurs" :(
Erreur d'implantation ou l'algorithme A* ne donne pas forcement le meilleur ?  :??:  
Sachant que je n'ai pas regardé l'algorithme en lui meme mais j'ai uniquement extrait la logique de l'algorithme à partir des schémas et je l'ai implanter "à ma sauce".
 
 :hello:  
 
NB : Vous pouvez télécharger le programme ici : http://www.phlos.com/ovh/astar.zip
Il suffit d'appuyer sur ENTRER a chaque fois pour générer une nouvelle matrice.


Message édité par AthlonSoldier le 20-05-2005 à 02:01:37
n°1090207
push
/dev/random
Posté le 20-05-2005 à 02:11:14  profilanswer
 

Par curiosité, ta règle de "- Le déplacement est autorisé uniquement si la valeur du chiffre en (1,1) est supérieur ou égal à la valeur de la case où l'on veut se rendre " elle vient d'où ?

mood
Publicité
Posté le 20-05-2005 à 02:11:14  profilanswer
 

n°1090395
AthlonSold​ier
Feel the power
Posté le 20-05-2005 à 10:52:48  profilanswer
 

push a écrit :

Par curiosité, ta règle de "- Le déplacement est autorisé uniquement si la valeur du chiffre en (1,1) est supérieur ou égal à la valeur de la case où l'on veut se rendre " elle vient d'où ?


 
De nul part, en fait cette règle c'était pour construire la matrice aléatoire que tu vois sur le dernier screenshot, oublie là  ;)


Message édité par AthlonSoldier le 20-05-2005 à 11:07:15
n°1090396
zombinette
Posté le 20-05-2005 à 10:56:53  profilanswer
 

pour l algortithme de plus court chemin, je te conseille de regarder du cote de Dijkstra, Google va t aider pour ça, par exemple :  
http://brassens.upmf-grenoble.fr/I [...] jkstra.htm
 
c est un des premeirs algo qu on apprend en therie des graphes
 
je l ai deja implémenté en C  à l epoque et une fois que tu sais manipuler des matrices, bah ca va ^^

n°1090525
AthlonSold​ier
Feel the power
Posté le 20-05-2005 à 12:03:57  profilanswer
 

Merci je vais regarder ça. Mais j'aimerai d'abord savoir si j'ai commis une faute d'implantation ou si l'algo A* ne donne pas forcement le meilleur chemin ?  :??:

n°1091325
dividee
Posté le 20-05-2005 à 23:32:33  profilanswer
 

AthlonSoldier a écrit :

Merci je vais regarder ça. Mais j'aimerai d'abord savoir si j'ai commis une faute d'implantation ou si l'algo A* ne donne pas forcement le meilleur chemin ?  :??:


A* doit donner le meilleur chemin; ça doit donc être une erreur d'implantation...

n°1091402
AthlonSold​ier
Feel the power
Posté le 21-05-2005 à 00:44:12  profilanswer
 

dividee a écrit :

A* doit donner le meilleur chemin; ça doit donc être une erreur d'implantation...


 
Es tu sur de ce que tu dis ?
Je viens de faire une recherche sur google, je tombe sur cette page : "http://www.vieartificielle.com/art [...] cle&id=179"
 
Et dans les commantaires je vois ca :

Citation :

31.03.2005 12h44 : rafu nunu  rafununu(a)free.fr
Très instructif, néanmoins, et sans vouloir critiquer à toutes forces, on s'apperçoit aisément que tout programme a ses limites. Ainsi, dans la dernière image publiée, il existe au moins un chemin plus court, je dis "au moins" parce qu'il y en a beaucoup plus qu'un.


 
Donc je ne suis maintenant plus sur du tout que j'ai bien commis une erreur d'implantation  :D  :na:


Message édité par AthlonSoldier le 21-05-2005 à 00:44:41
n°1091406
dividee
Posté le 21-05-2005 à 01:13:48  profilanswer
 

A mon avis le gars qui a fait ce commentaire se trompe... Je ne vois rien qui justifie ce qu'il dit dans les dernières images de l'article (je ne l'ai pas lu en entier). Dans l'avant-dernière image, le chemin qui "remonte" après l'obstacle est choquant à première vue, mais dans la légende il est bien écrit que les "diagonales sont aussi coûteuses que les lignes droites" et ce chemin est donc bien optimal.
J'ai vérifié dans mon bouquin d'IA et il est bien précisé que A* est à la fois complet (trouve toujours une solution si elle existe) et optimal (trouve la meilleure solution), à condition que l'estimation de la distance au but ne surestime jamais cette distance...

n°1091411
AthlonSold​ier
Feel the power
Posté le 21-05-2005 à 01:20:26  profilanswer
 

En fait je ne vois pas comment l'algorithme A* pourrait obtenir le meilleur chemin des la premiere fois...
 
Parcequ'en fait il arrive plusieurs fois lors de l'évalution des noeuds qu'ils ont exactement le meme "poids". Donc dans ce cas, il faut bien qu'il fasse un choix et c pas toujours le "meilleur". Bref je vois pas quoi  :o

n°1091435
dividee
Posté le 21-05-2005 à 02:13:08  profilanswer
 

Qu'entends-tu par 'dès la première fois' ? C'est une recherche "best-first"; mais il faut quand-même parfois revenir en arrière et défaire une partie du chemin déjà effectué... D'ailleurs en regardant le chemin généré par ton programme, on dirait que tu le fais mais pas dans tous les cas:

Un chemin comme ceci:
****                              ***
  **   devrait être remplacé par    *
  *                                 *


On dirait que tu ne défais pas les noeuds tant que le meilleur noeud trouvé est adjacent au précédent, alors que c'est le noeud adjacent de poids minimum (celui qui a permis d'insérer le noeud trouvé dans la file de priorité si je ne me trompe pas) qui devrait être le prédécesseur. Je sais pas si je suis très clair...


Message édité par dividee le 21-05-2005 à 02:15:49
n°1091437
blazkowicz
Posté le 21-05-2005 à 02:16:59  profilanswer
 

zombinette a écrit :

pour l algortithme de plus court chemin, je te conseille de regarder du cote de Dijkstra, Google va t aider pour ça, par exemple :  
http://brassens.upmf-grenoble.fr/I [...] jkstra.htm
 
c est un des premeirs algo qu on apprend en therie des graphes
 
je l ai deja implémenté en C  à l epoque et une fois que tu sais manipuler des matrices, bah ca va ^^


 
on peut aussi utiliser A* avec une heuristique nulle, ça donne dijsktra :D
à tester, si là encore ça ne donne un chemin pas optimal, ya un pb avec l'implémentation de A*.
 

dividee a écrit :

A* doit donner le meilleur chemin; ça doit donc être une erreur d'implantation...


 
A* ne donne pas forcément le meilleur chemin si l'heuristique n'est pas minorante, mais ici la distance de manhattan devrait toujours l'être.


Message édité par blazkowicz le 21-05-2005 à 02:17:45
n°1091438
dividee
Posté le 21-05-2005 à 02:30:53  profilanswer
 

blazkowicz a écrit :

A* ne donne pas forcément le meilleur chemin si l'heuristique n'est pas minorante, mais ici la distance de manhattan devrait toujours l'être.


C'est une question de vocabulaire... Je considérais que A* doit utiliser une heuristique minorante, sinon ce n'est pas A*... Mais vérification faite, tu as raison, on peut utiliser A* avec une heuristique non minorante et ça s'appellerait quand-même A*...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Matrice de chiffres aléatoires - Récursivité

 

Sujets relatifs
affectation de valeur aux éléments d'une matriceAlgo de balayage en zig zag de matrice
recuperer ma matrice de données d'une image TIFJeux des chiffres et des lettres en exo
textbox et format des chiffres saisi dedans = probleme !![SQL] recuperer que les chiffres d'un champ
Image->matrice->Copie Image (pgm)[C] Probleme nombres aléatoires tous differents
[PHP] Nombre en tableau de chiffresimage + lien aléatoires à l'ouverture d'une page ... ??
Plus de sujets relatifs à : Matrice de chiffres aléatoires - Récursivité


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR