Introduction de probabilités dans un PathFinder

Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
Steph3112
Membre Naturel
Messages: 25
Enregistré le: 10 Oct 2020, 21:12

Introduction de probabilités dans un PathFinder

par Steph3112 » 26 Nov 2022, 12:25

Bonjour toutes et tous,

Je développe, à mon rythme… une application de PathFinding reprenant le principe de Dijkstra. Je n’ai de cesse de l’améliorer voilà pourquoi ce sujet.

Mon PathFinder s’applique à des matrices sur Excel qui peuvent être à 2 ou 3 dimensions et prévoit deux modes de cheminement distincts : adjacent (4 carrés partageant une arête avec un carré central en 2D ; 6 cubes partageant une face en 3D) ou périphérique (8 carrés voisins d’un carré central en 2D ; 26 cubes autour en 3D).

Je souhaiterais ici étudier le cas des matrices 2D avec cheminement adjacent et pondérées de façon totalement aléatoire. Si j’obtiens réponse peut-être sera-t-il simple d’étendre le principe aux autres modes ?

Image

Trois grandeurs liées à chacun des carrés sont actuellement considérées dans cet algo :

- L’IC : Individual Cost ; les valeurs que l’on retrouve sur la feuille Excel.
- Le TC : Total Cost ; l’addition des coûts rencontrés depuis le point de départ jusqu’à un carré en empruntant le plus court-chemin. Une sorte de distance pondérée.
- Le Path : est une info de type (x, y) avec x et y pouvant être -1, 0 ou 1 servant à remonter le chemin depuis un carré jusqu’au point de départ et permettant de tracer ce chemin.

Actuellement mon algo calcule les carrés concentriquement au point de départ jusqu’à ce que l’arrivée soit trouvée, le résultat renvoyé et le calcul interrompu. Du moins dans le cas où la matrice n’est pas pondérée, les pondérations faussent un peu la donne.

Le problème peut peut-être se poser de la sorte ? :
Imaginons que nous partons de Paris, que nous allons à Clermont-Ferrand et avons réussi à nous en approcher beaucoup, est-il encore utile de s’intéresser à ce qui se passe vers Lille ?

Donc mon idée serait d’introduire pour chacun des carrés une quatrième grandeur la DANP ou Distance à l’Arrivée Non Pondérée, soit le nombre de cases séparant un carré de l’arrivée, calcul simple et rapide à effectuer ; et introduire dans l’algo une variable (une pour tout l’algo et non pas pour chacun des carrés) qui pourrait s’appeler Nearest et qui enregistrerait à quelle distance (en nombre de cases) le carré calculé le plus proche du point d’arrivée se trouve.

On aurait alors affaire à une comparaison de deux groupes partageant un même random mais de quantité différente :
Si par exemple mon Nearest est de 3 et qu’un carré se situe à une distance DANP de 15 quelle probabilité y a-t-il que la somme de ces 15 unités aléatoires soit strictement inférieure à la somme des 3 unités du Nearest ? Si la probabilité est vraiment très faible on peut alors avec peu de risque raturer ce carré et l’exclure du processus glouton. En plus de cet aspect les TC de ce carré et du carré correspondant au Nearest ont naturellement aussi une incidence sur cette probabilité ce qui finit de rendre le problème intéressant.

Si le principe est OK ( ?) au niveau de la quantification je bute. Certainement les paramètres suivants sont à prendre en compte :
- La nature du random (étendue, nombre de valeurs distinctes ?)
- L’acceptation ou non du zéro (mon algo doit l’accepter)
- Les TC des carrés
- Les DANP des carrés
- Le Nearest
- Autres ?

Voilà maintenant le problème posé, merci à celles ou ceux qui souhaiterons m’aider (en validant ou non le principe exposé ici puis sur sa quantification si le principe est validé). Malheureusement mon niveau en Maths est bas et m’empêche de comprendre certaines écritures mathématiques, ne vous étonnez donc pas si je serais amené à poser des questions qui peuvent vous sembler évidentes.

Et en accord avec la charte du forum me donner des pistes me permettant d’avancer me plairait beaucoup plus qu’une solution toute trouvée !

Merci d’avance

PS : Moins en accord avec la charte ce sujet est une réédition d’un sujet ancien à peine différent malencontreusement placé dans la rubrique : « Lycée » qui ne m’avait permis d’avancer que partiellement.



lyceen95
Membre Complexe
Messages: 2263
Enregistré le: 15 Juin 2019, 00:42

Re: Introduction de probabilités dans un PathFinder

par lyceen95 » 26 Nov 2022, 21:35

Le problème, c'est que tu dis à un moment : les autres chemins ont très peu de chance d'améliorer le meilleur chemin que je viens de trouver.

Je te propose une autre démarche. Un peu plus compliquée, mais c'est un exercice intéressant selon moi.

Actuellement, tu traces des cercles concentriques à partir du point de départ.
Imaginons que le point de départ soit en (0,0) et l'arrivée en (30,40), et que la grille soit très grande, la distance entre les 2 points est de 50, et donc tu vas tracer un cercle de rayon 50. A minima, parce qu'il y aura peut-être des chemins qui sortent de ce cercle et qui sont plus performants que les chemins qui ne sortent pas de ce cercle.
Restons dans un premier temps sur des cercles concentriques autour du départ... mais faisons aussi des cercles concentriques autour de l'arrivée.
Tu vas tracer 2 cercles de rayon 25, au lieu d'un cercle de rayon 50. La surface analysée est 2 fois plus petite.
Dès que ces 2 cercles se rejoignent, tu as une solution. Reste ensuite à chercher si d'autres solutions ne seraient pas meilleures.

L'autre piste, c'est de remplacer les cercles concentriques par des pseudo-cercles.
Revenons à un parcours du point de départ ... vers le point d'arrivée.
Pour chaque point atteint, on mémorise :
- comment on est arrivé là (le dernier pas suffit, c'est ce que tu fais, ok)
- le coût cumulé C1 pour arriver là
- le coût probable C2 pour arriver au point d'arrivée.
Comment ce dernier nombre est-il calculé ? On part d'un coût moyen par case, disons 25 par case sur ton dessin très approximativement (mais c'est bien suffisant). On connaît facilement le nombre minimum de pas à faire (distance de Manhattan). On multiplie, et ça nous donne un coût probable.
Et le coût total CTP=C1+C2 est particulièrement intéressant. (CTP= abréviation de Cout Total Probable)
A chaque étape du process, on prend le point qui a le CTP le plus faible, et on recherche les voisins qu'on peut atteindre à partir de ce point.
Ainsi, on trouve assez vite un chemin qui est assez performant.
Ensuite on continue à explorer tous les chemins, toujours en regardant les cases qui ont le C3 le plus faible, mais en éliminant purement et simplement les chemins qui ont un C1 plus élevé que le chemin qu'on a trouvé.

Variante n°3 : Combiner d'une façon ou d'une autre les 2 pistes, et donc faire des 'pseudo-cercles' autour des 2 points (départ et arrivée).

Où est l'intérêt de combiner ces 2 approches ?
Imaginons que l'arrivée est en (30,40) mais que les cases du rectangle (20,25) à(29,49) sont toutes très couteuses, qui forment comme une barrière. Et le départ est en (0,0)
Du coup, le point qu'on doit viser, ce n'est pas (30,40), mais plutôt (30,19)

Le coût moyen par case : je prends 25 dans mon explication. Il faut prendre un coût assez bas. Si on a une grille avec des cases qui coûtent entre 10 et 100, et une moyenne à 50 ou 60, il est probable que le chemin final évite les cases les plus chères, et passe par des cases assez économique. Donc même si l moyenne arithmétique est de 50 ou 60, on a intérêt à prendre une valeur plus faible, par exemple 25. Surtout dans le variante où les diagonales sont autorisées, parce qu'on peut d'autant plus facilement se faufiler, et éviter les cases trop chères.

Si on combine ces 2 démarches, à tout moment. quand on ajoute des points dans notre parcours (parcours partant du départ, ou parcours partant de l'arrivée),on a le C1= Cout constaté pour arriver à ce point, C2= le cout probable pour arriver au point le plus prometteur dans l'autre arbre, et C3 = le cout qu'il faut dépenser pour aller de ce point 'idéàl' à l'arrivée (ou au départ !), et CTP =C1+C2+C3.
Inutile de réactualiser les CTP des autres points déjà calculés, c'est juste un indicateur statistique.

Steph3112
Membre Naturel
Messages: 25
Enregistré le: 10 Oct 2020, 21:12

Re: Introduction de probabilités dans un PathFinder

par Steph3112 » 28 Nov 2022, 12:31

Merci Lycéen95 de ta réponse que je suis en train d’étudier. Bas niveau en maths = aussi temps d’assimilation long, compter quelques jours avant que je revienne à vous.

Steph3112
Membre Naturel
Messages: 25
Enregistré le: 10 Oct 2020, 21:12

Re: Introduction de probabilités dans un PathFinder

par Steph3112 » 02 Déc 2022, 20:48

Lycéen95 je te remercie beaucoup pour la qualité de ta réponse et d’être resté accessible. Crois bien que j’en ai fait une lecture intéressée, répétée et attentive.

Ça a été un petit peu long et reste encore un peu flou mais peut-être enfin je commence à comprendre le principe et vais pouvoir essayer de le coder. J’aurais cependant encore 3 petites questions (luxueuses) :

1. Concernant le coût moyen par case qui intervient dans le calcul de C2, avec un random d’entiers étagés de 0 à 9 je constate un coût d’environ 2 (toujours dans le contexte 2D adjacent de ce sujet). Est-il difficile de calculer ce coût ? (dépendant certainement, contrairement à ta réponse, des 4 modes que j’envisage 2D et 3D en adja et périph). Et vaut-il mieux le gonfler ou le baisser dans le calcul du court-chemin ?

2. Quand tu parles à deux reprises de : « pseudo-cercle » je ne comprends pas bien ce que cela signifie ?

3. Je suppose que tu n’as pas inventé de toutes pièces cette méthode sophistiquée mais que tu l’a apprise au moins en partie, cet algorithme porte-t-il un nom ? Connais-tu des URL ou des mots clefs intéressants à rechercher en rapport avec cette méthode ?

Encore merci ! Et rendez-vous rapidement avec le résultat en termes de temps de calcul sur une matrice 7000x7000 en mode adjacent, solvée par mon algorithme original sur mon ordinateur en 11 heures et 31 minutes.

lyceen95
Membre Complexe
Messages: 2263
Enregistré le: 15 Juin 2019, 00:42

Re: Introduction de probabilités dans un PathFinder

par lyceen95 » 03 Déc 2022, 00:04

Q1 : Comment calculer le coût moyen par case ?
Bof. Pas d'idée précise. Je pense que de toutes façons, on a juste besoin d'une valeur très approximative. L'idée est de trouver assez rapidement un trajet pas trop mauvais. Et ensuite, ce trajet pas trop mauvais va servir de seuil : tout trajet pour lequel on est sûr qu'il coûtera plus cher que ce trajet de référence, on l'abandonne.
Dans l'exemple que tu donnes, tu constates que 2 est une bonne valeur. Si tu prends 1, ou 3, ça ne devrait pas changer grand chose au film.
Un truc comme le 1er quartile de toutes les cases ... c'est en principe inférieur à la moyenne, et ça devrait le faire.

Q2 : pseudo-cercle.
Partant d'un point, tu envisageais des cercles concentriques : On prend tous les points à distance 1 du centre, puis tous les points à distance 2, etc. Des vrais cercles bien concentriques.
Je propose de travailler point par point, et pas cercle par cercle. A chaque étape, on prend parmi tous les points autour du point de départ le point le plus prometteur, et on recherche ses 2 ou 3 voisins. Et on ajoute ces points à la liste des points 'connectés' au point de départ. A priori, on obtient un trait avec des ramifications, normalement, les différents points qu'on va explorer sont ceux qui sont entre le point départ et le point arrivée, pas ceux qui nous éloignent. Sauf si on tombe ici ou là sur des points avec des coûts très élevés. Avec certaines données, les points explorés peuvent faire un cercle, autour du point de départ, mais en général, ils vont former une forme autre. Cette forme qui peut très miraculeusement former un cercle, je l'appelle un pseudo-cercle.

Q3 : Il y a surement de vagues inspirations de lectures diverses, mais c'est mon oeuvre. Donc pas de nom à te donner.

Steph3112
Membre Naturel
Messages: 25
Enregistré le: 10 Oct 2020, 21:12

Re: Introduction de probabilités dans un PathFinder

par Steph3112 » 03 Déc 2022, 01:45

Merci pour toutes ces précisions, s'il n'a pas de nom alors ce sera pour moi l'algorithme de lycéen95 :D et il fallait y penser à ce système ! chapeau !

Steph3112
Membre Naturel
Messages: 25
Enregistré le: 10 Oct 2020, 21:12

Re: Introduction de probabilités dans un PathFinder

par Steph3112 » 24 Sep 2024, 18:44

Bonjour toutes et tous,
Bonjour Lyceen95 et excuse-moi de répondre si tardivement, je t’avais promis un résultat chrono…

Pour ce qui est de partir du point de départ ET d’arrivée j’ai pu mettre ça en œuvre et ça m’a donné un appréciable gain de temps sur les petites matrices mais diminuant au fur et à mesure que celles-ci s’agrandissaient. Pour ce qui est d’introduire une heuristique j’ai eu beau chercher et chercher mais je ne suis pas parvenu à voir comment je pourrais gagner et non perdre du temps avec ça. Quoi qu’il en soit je te remercie beaucoup j’ai pris beaucoup de fun à longtemps cogiter là-dessus.

Je viens de mettre en ligne la dernière version de mon Pathfinder il ne reprend aucune de ces deux idées mais me parait néanmoins assez performant. Après un temps de lecture d’une feuille Excel composée de 16384 x 16384 cellules de 22 minutes le Pathfinding est résolu en seulement 5 minutes et 6 secondes (avec point de départ et d’arrivée situés sur les deux coins opposés). Sa limite est de ne savoir traiter que des grilles ne contenant que des entiers. Il n’utilise pas de probabilités et c’est un algorithme admissible.
Si le cœur vous en dit je vous invite à y jeter un coup d’œil sur le forum d’Excel Pratique : https://forum.excel-pratique.com/applic ... 9#p1219076
Merci

 

Retourner vers ⚜ Salon Mathématique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 5 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite