Bonjour,
Je vais essayer d'être aussi concis et exhaustif que possible:
La situation :
Je suis actuellement en stage de recherche et au cours de la procédure d'échantillonnage d'arbres, moi et mon équipe avons conclu que je devais procéder à un échantillonnage systématique de ma population.
Mais encore? --> Je dispose d'un fichier excel avec environ 720 arbres référencés comportant 1)-un numéro 2)-coordonée GPS X 3)-coordonée GPS Y (donc coordonné spatiale quoi
) attention, il n'y a pas de logique spatiale dans les numéros (le numéro 2 peut être environné de numéro 5XX , 270 etc ...).
La procédure d'échantillonnage systématique se décrit comme suis :
-calculer la longueur d'un "chemin" hypothétique partant d'un point et passant par tous les autres puis revenir. Théoriquement, ce chemin doit être le plus COURT possible.
-l'échantillonnage se fait ensuite en choisissant le point de départ du chemin au hasard (utilisation d'une table de nombre aléatoire), on suit ensuite le chemin précédemment trouver et on procède à un choix "systématique" des arbres selon la logique suivante : la distance totale du chemin est divisé par la taille de l'échantillon (nombre d'arbres), mettons le chemin fais 100 km, on veut 20 arbres --> la distance d1=5km. On part donc d'une point aléatoire, on suit le chemin, et tous les 5km, on sélectionne l'arbre le plus proche sur le chemin.
Cela permet d'avoir un échantillon relativement aléatoire mais surtout répartie spatialement.
Je dispose de plus, d'un fichier excel comportant un tableau avec pour chaque point, sa distance le séparant des autres points.
Mon problème --> :
M'ayant un peu documenter sur la question, l'histoire du chemin le plus court, sur 720 points, ça m'a l'air un trop gros poisson pour moi à première vu(cf wikipédia anglais avec Shortest Pathways ou The Travelling Salesman Problem) qui se résolve à grand coup d'algorithme, qui sont compréhensible pour la plupart mais surpasse de loin ce que je suis capable de faire sans aide et dans un délai raisonnable sur VB.
Il me faudrait donc créer une macro pour
-calculer un chemin potable, c'est à dire, court sans être forcément LE plus court en utilisant PAR EXEMPLE, le point le plus proche pour bouger de sommet en sommet (théoriquement ce n'est pas la meilleur solution mais ça reste une solution pas mauvaise non plus), en partant d'un point donné par l'utilisateur (qui sera choisit avec la table des nombres aléatoires)
-il faudra conserver l'ordre de passage sur chaque point, puis, en partant du point de départ, effectuer l'échantillonnage systématique (le nombre d'arbre à sélectionner est 54 (55 - le point de départ)), tous les "x" km en sélectionnant le point le plus proche et en le mettant dans une liste.
Niveau algorithme, j'ai trouvé deux trois trucs qui peuvent être intéressant
-l'algorithme des colonies de fourmis (http://fr.wikipedia.org/wiki/Algorit...ies_de_fourmis)
J'ai déjà vu ce truc en cours, je comprends pas trop mal le concept mais de là à coder ça ..
-l'algorithme de Djikstra(http://fr.wikipedia.org/wiki/Algorithme_de_Dijkstra)
Du coup ce que je vous demande en gros c'est :
-quel solution semble la plus envisageable dans ce cas, sachant que la contrainte temporel est forte (une autre façon de dire que je suis pressé ^^, car il faut que je récolte les échantillons avant Noel !), c'est à dire quelle méthode/algorithme utilisé ?
-une fois déterminé l'algorithme/la méthode, je vais m'atteler au codage de la bestiole mais n'ayant pas un niveau de ouf je vais sûrement revenir vous voir pour poser des petites questions sur le code. Je n'ai pas codé en VBA depuis un moment (j'ai eu un cours qui du duré ...2 mois dessus) et du coup j'ai plein de trou et de soucis, du style : comment crée la liste des sommets traversés pour garder la trace de l'ordre des points sur le chemin etc ...
Voilà, je crois avoir tout dit, j'espère que vous pourrez m'aider sur ce truc !
A noter que malgré l'urgence de la situation qui fait que je ne cracherais pas sur un code tout fait, je ne vous demande pas ici de me faire tout le boulot mais de m'orienter vers une solution pas trop mauvaise et faisable par un presque débutant de VB, et ensuite m'aider lors de la rédaction sur certains détails du code / syntaxes.
Merci d'avance !
PS : je suis sous excel sur MAC, version 14.2.3
Akusaia
Partager