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 :

Groupement de points par proximité 2D


Sujet :

Algorithmes et structures de données

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Groupement de points par proximité 2D
    Bonjour

    Je suis confronté au problème suivant et je cherche un algorythme permetant de traiter cela


    Je dispose d'un nombre N de points et leurs coordonées XY disposé aléatoirement sur un plan

    De dois creer G groupes ayant un maximum de M points chacun

    Chaque groupe doit evidement etre constitué en assemblant les points ayant la meilleure proximité

    Donc Hypothese :

    100 points XY
    Maximum 3 groupes
    Maximum 40 points par groupe

    Comment aborder cela ?

    Merci de vos suggestions
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 619
    Points : 188 605
    Points
    188 605
    Par défaut


    Tu peux regarder du côté de l'algorithme des k moyennes, c'est assez facile à implémenter (https://en.wikipedia.org/wiki/K-means_clustering). Par contre, il ne peut rien faire pour la taille maximale d'un groupe, mais la discussion est arrivée il n'y a pas si longtemps sur les forums (tu peux construire un petit truc par-dessus pour t'assurer que ça marche ; pour les détails…).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci Dourouc05 et cher compatriote

    J'avais le pressentiment de devoir passer par du Delaunay ou du Voronoi
    Et tu me conforte donc dans l'idée que c'est la bonne piste

    Cela étant je ne suis pas pratiquant je dois donc me faire un peu la main
    L'objectif est de traduire ca en cSharp pour faire le boulot

    Si j'ai bien compris l'exemple, il partitionne selon le nombre de groupe
    Donc dans mon cas je devrais le cas échéant muter un certain nombre de points d'un groupe a l'autre en fonction de la densité et la proximité
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  4. #4
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 619
    Points : 188 605
    Points
    188 605
    Par défaut
    M'est avis que tu cherches à faire bien compliqué. Vu le nombre de points, a priori, pas besoin d'aller aussi loin. Simplement partir de centres (prendre des points au hasard pour commencer) qui définissent des groupes, assigner chaque point au groupe dont le centre est le plus proche, recalculer les centres comme la moyenne des points du groupe, itérer. Et peut-être réassigner des points à un autre groupe pour la contrainte de quarante points par groupe, ça sera un peu plus inventif.

    Ça sera beaucoup plus facile à implémenter qu'une triangulation du genre (et tu trouveras facilement des implémentations existantes, au besoin).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 397
    Points
    9 397
    Par défaut
    L'un des problèmes si on choisit 3 centres au hasard, c'est qu'on biaise pas mal les résultats. En caricaturant, si les 3 centres choisis sont tous les 3 très voisins l'un de l'autre, et tous les 3 très excentrés, on arrive à n'importe quoi.

    Un algorithme (un peu coûteux) est la méthode de la CAH (Classification hiérarchique ascendante).
    - On calcule toutes les distances 2 à 2.
    - On prend le couple de points avec la distance minimale, et on associe ces 2 points. Et on a un nouvel élément qui est ce couple de points. On recalcule donc la distance entre ce couple de points et les 98 autres points... A ce niveau là, on a 2 ou 3 choix qui peuvent donner des résultats différents. On peut dire que la distance entre un couple de points AB et un point C est au choix min ( Dist(AC), Dist(BC) ), ou bien Moyenne( Dist(AC), Dist(BC) ) ... ou bien d'autres formules envisageables.
    - Et on répète l'opération autant de fois que nécessaire pour avoir les 3 groupes voulus. en associant à chaque fois les 2 éléments avec la distance minimale (un élément étant soit un individu isolé, soit un groupe)
    - Et si on veut, on peut ajouter des contraintes pour qu'aucun groupe ne dépasse 40 individus.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #6
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci Dourouc05
    Merci tbc92

    tbc92 tu a raison sur le choix at random des trois point de départ et c'est la Remarque que je voulais faire a dourouc05
    Maintenant il est sans doute possible de poser des contraintes pour mieux determiner le choix de ces trois points


    Mais dans les deux proposition je me demande si on ne va tomber dans un problème classique d'affectation ou a force d'itérer "bêtement" sur les choix les meilleurs le resultat sera une répartition asser hétérogène et mal balancée

    Je vais bientot me lancer sur le coding a partir d'un échantillon et voir ce que ca donne
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  7. #7
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Groupement de points par proximité 2D
    Bonjour,

    Je crois qu'il y a une solution relativement simple, la partition du nuage de points relevant le plus souvent d'un choix arbitraire, sauf configuration très particulière (où le nuage comporterait par exemple 3 lobes relativement isolés).
    En effet, la distance minimale entre deux points appartenant à des groupes différents sera toujours inférieure à la distance maximale observée à l'intérieur de l'un de ces groupes, ce qui met en échec tout rassemblement des points selon leur proximité naturelle.

    La condition de l'énoncé (d'ailleurs assez vague)

    Chaque groupe doit évidemment être constitué en assemblant les points ayant la meilleure proximité.
    n'est donc pas réalisable, et il paraît effectivement inutile de mettre en route un procédé de triangulation.

    1°) Repérer les points les plus éloignés (que l'on appellera A et B) par un inventaire systématique des distances MiMj (avec 0 < i < j <= N) , et la distance ( Dmax = AB ) qui les sépare .

    2°) Entreprendre une partition du nuage par un faisceau d'hyperboles de foyers (A) et (B), en classant les (N - 2) points restant selon l'ordre croissant du paramètre ( h = AMk - BMk ) , nécessairement inclus dans le domaine ] -Dmax ; Dmax [ .
    Une fois la liste établie, il suffit en effet:
    a) de constituer le premier sous-ensemble (GA) des (NA) points correspondant aux (NA) plus petites valeurs de (h), et incluant A ( h = -Dmax );
    b) de constituer le second sous-ensemble (GB) des (NB) points correspondant aux (NB) plus grandes valeurs de (h), et incluant B ( h = Dmax ) ;
    c) d'inclure dans le dernier (G3) tous les points restants.
    Les valeurs de (NA) et (NB) seront choisies en fonction des conditions imposées aux 3 effectifs:
    ■ 20 <= NA <= 40 ;
    ■ 20 <= NB <= 40 ;
    ■ 20 <= 100 - NA - NB <= 40 .


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  8. #8
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci WiWaxia

    Je vais aussi réflechir a cette suggestions

    Je vous ferai part de mes resultat dès que j'aurai qq chose
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Si je puis me permettre de proposer une approche mathématiquement plus simple :

    Comme le dit wiwaxia, tout commence par calculer les coordonnées max et min.

    Mais, ce faisant, on peut les calculer simultanément sur 4 axes (conditions spéciales de réduction des points pour l'application d'une méthode de contours convexes avec l'heuristique de Akl-Toussaint **) :

    • les x min, xmax, y min, ymax
    • mais aussi les x+y et x-y min et max


    Attention, par contre il peut se faire que certains points soient confondus (le point xmin peut aussi être le point ymin, ou ymax, ou x-y min....).

    Mais une fois eliminé les points redondants, on a donc de 3 à 8 points determinant de 2 à 5 axes.

    Il suffit alors de construire des histogrammes sur chacun des axes avec M bins, puis d'explorer ces 2 à 5 histogrammes pour connaître le plus "équitablement" réparti.



    Et, si on veut raffiner, on peut explorer l'intervalle entre cet axe et les 2 les plus proches...



    ** : j'avais publié sur ArxiV un article là-dessus : http://arxiv.org/pdf/1304.2676.pdf
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  10. #10
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Groupement de points par proximité 2D
    Bonjour,

    Je reviens à la question posée après de nombreux et longs détours, tant sont variées les réponses que l'on peut donner.

    1°) Le choix spontané des deux points les plus éloignés m'a paru un peu léger, leur disposition pouvant être totalement différente de celle des 98 autres points: la partition qui en découle n'a de sens que si les deux centres (A) et (B) sont placés dans deux zones relativement denses mais convenablement éloignées, aux extrémités d'un nuage allongé.
    Les hyperboles évoquées constituant un faisceau orthogonal à celui des ellipses de mêmes foyers, j'ai cherché le moyen de déterminer rapidement, par une méthode statistique, les caractéristiques (centre, axes, foyers) de l'ellipse que l'on peut associer à un nuage de points allongé, et de densité régulière.Nom : Nuage de points elliptique - 220px-GaussianScatterPCA.png
Affichages : 677
Taille : 9,0 Ko
    https://fr.wikipedia.org/wiki/Covariance

    La méthode de la droite des moindres carrés s'enlise dans des calculs d'une lourdeur outrancière, tandis que celle de la droite des moindres rectangles conduit sans difficultés aux résultats cherchés (les foyers A et B), parce que les coordonnées (xi, yi) y sont alors traitées d'une manière symétrique (ce qui est conforme à l'intuition).

    Une telle démarche - c'est son défaut majeur - se révèle totalement inadaptée:
    - dans le cas d'une distribution des points à contour circulaire ou carré (l'excentricité est alors quasi-nulle, et les foyers très proches: AB<< Sigma(x) et Sigma(y) ,dispersions de x et y); (*)
    - et lorsque le nuage présente plus de deux zones de forte concentration.

    (*) le retour aux points les plus éloignés est alors une échappatoire.

    2°) Une autre méthode, totalement différente, est envisageable quelles que soient les anomalies de concentration présentes dans le nuage de points, mais au risque de perdre tout contrôle sur le nombre et la forme des sous-ensembles discernables.
    On associe au nuage:
    a) la somme des inverses carrés de toutes les distances présentes: A = S0<i<j<=N(dij-2) = Si=1 à N-1Sj=i+1 à N(dij-2) ,
    b) la somme des carrés de toutes les distances présentes: B = S0<i<j<=N(dij2) = Si=1 à N-1Sj=i+1 à N(dij2) ;
    ce qui permet ensuite de calculer pour chacun des points la fonction:
    Ui = (A-1S0<j<=N, j<>i(dij-2) - (B-1S0<j<=N, j<>i(dij2) .
    La moyenne étendue au nuage de tous les termes ainsi définis est nulle, parce que l'on a:
    Si=1 à n(Ui) = (A-1)×(2A) - (B-1)×(2B) = 0 , chacun des couples (i, j) intervenant deux fois dans les sommations effectuées.

    Deux raisons justifient le choix de l'exposant et de l'inverse:
    a) la rapidité optimale du calcul, puisque (dij2) est le premier terme obtenu lors de la recherche de la distance euclidienne; (**)
    b) une variation de (Ui) aussi rapide au voisinage les plus petites distances que des plus grandes, ce qui laisse espérer une répartition des points raisonnablement uniforme sur le domaine [Umin ; Umax], et facilitera l'attribution des couleurs. (***)
    (**) argument peut-être contestable ...
    (***) là, il faut sans doute faire des essais.

    Une telle démarche, conçue pour des concentrations de points hétérogènes, présente un défaut prévisible: dans le cas d'une répartition uniforme, les points de couleurs différentes risquent d'apparaître très mélangés.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par wiwaxia Voir le message
    Bonjour,
    Salut


    Citation Envoyé par wiwaxia Voir le message
    Deux raisons justifient le choix de l'exposant et de l'inverse:
    a) la rapidité optimale du calcul, puisque (dij2) est le premier terme obtenu lors de la recherche de la distance euclidienne; (**)

    J'ai comme un doute..

    Car tu dis :

    Citation Envoyé par wiwaxia Voir le message
    2°) Une autre méthode, totalement différente, est envisageable quelles que soient les anomalies de concentration présentes dans le nuage de points, mais au risque de perdre tout contrôle sur le nombre et la forme des sous-ensembles discernables.
    On associe au nuage:
    a) la somme des inverses carrés de toutes les distances présentes: ,
    b) la somme des carrés de toutes les distances présentes: .
    Ce qui fait un algo au minimum en O(N2)....

    Optimalement, on devrait être proportionnel à un tri ([O(N logN), non ?? ...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  12. #12
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut
    A propos de
    la rapidité optimale du calcul, puisque (dij2) est le premier terme obtenu lors de la recherche de la distance euclidienne;
    Citation Envoyé par souviron34 Voir le message
    ... J'ai comme un doute ... Car tu dis : ...
    On associe au nuage:
    a) la somme des inverses carrés de toutes les distances présentes: A = S0<i<j<=N(dij-2) = Si=1 à N-1Sj=i+1 à N(dij-2) ,
    b) la somme des carrés de toutes les distances présentes: B = S0<i<j<=N(dij2) = Si=1 à N-1Sj=i+1 à N(dij2) ;
    Citation Envoyé par souviron34 Voir le message
    Ce qui fait un algo au minimum en O(N2)....

    Optimalement, on devrait être proportionnel à un tri ([O(N logN), non ?? ...
    Je m'en tenais à l'énoncé initial du problème (100 points, ce qui n'est pas insurmontable), et me préoccupais du nombre minimal d'opérations à effectuer: quitte à utiliser une puissance quelconque de (dij), autant s'en tenir à son carré, pour les raisons indiquées ... et à défaut d'une amélioration décisive du délai de réalisation du programme, c'est le calcul le plus simple.
    Ce problème m'intéresse en raison de ses prolongements graphiques, et je regarderai l'évolution du temps de calcul en fonction de (N) - loin de moi l'idée de mettre en doute la proportionnalité en (N²) ! Je voudrais simplement voir jusqu'où il est possible d'aller dans un délai raisonnable.

    Tu as eu raison de pointer la longueur de l'algorithme: il devient sans doute inutilisable au-delà de plusieurs milliers de points, et il ne me serait alors pas venu à l'esprit de l'envisager.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  13. #13
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Proximité: Algorithme
    Bonjour,

    Voici la représentation graphique d'une solution éventuelle.
    - Créer une zone englobant tous les points.
    - Insérer autant de cercle que de groupe.
    - Rechercher les points inclus dans les cercles.
    - créer un polygone avec les points les plus proches du cercle.
    - Utiliser les sommets des polygones pour déterminer a quel groupe doit être associé les points orphelins.
    Je pense que cet algorithme serait efficace pour certaines problématiques, le temps me manque mais c'est un sujet intéressant.

    Cdt.
    Images attachées Images attachées

  14. #14
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci a tous pour cette effervescence intellectuelle

    Et effectivement le problème n'est pas trivial et la solution a choisir peut a mon avis etre affectée par la diposition de base des points

    En pratique il s'agit d'un probléme d'affectation lié a un problème de TSP

    L'idée c'est une collecte de n adresses avec c chauffeurs n <= 100; c=3
    Sachant que physiquement un chauffeur peut faire entre 30 et 40 adresses sur une journée et que tous les points sont dans un perimetre qui peut etre couver par un chauffeur en une journée

    L'idées est de distribuer efficacement les adresses par chauffeur pour repartir la charge et minimiser le Kilométrage total (la distance vol d'oiseau est une approche acceptable)
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  15. #15
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 397
    Points
    9 397
    Par défaut
    Présenté ainsi, le besoin n'est plus du tout le même. Et on est maintenant dans un cadre très classique. C'est exactement le problème du voyageur de commerce.


    Quand tu présentais cela comme des regroupements de points, on avait envie de bâtir des cercles , maintenant, on veut bâtir des lignes ...

    Imagine les 99 points suivants :
    x = 1 et y de 1 à 33
    x = 5 et y de 1 à 33
    x = 10 et y de 1 à 33

    En raisonnant en proximité de groupe, on n'a pas envie de faire un groupe pour chaque ligne verticale, le point du bas étant très loin du point à l'autre extrémité de la ligne.
    Mais en raisonnant 'Transport', nos 3 lignes sautent aux yeux.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  16. #16
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    @tbc92 je ne vois pas vraiment ce que tu veux dire

    Mais ce qui est certain c'est que ce n'est pas un simple TSP (Travelling Salesman Problem)

    Une simple résolution TSP permettrait de calculer le trajet optimum pour parcourir les 100 point en un seul circuit et j'ai d'ailleurs un algo codé en C# qui fait ca asser bien

    Mais ici, ici il faut partitionner les 100 points en trois groupe pour calculer 3 circuit dont la somme serait optimale (je ne dis meme pas la plus optimale)
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  17. #17
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    salut

    un truc qui ressemble fortement a ta recherche

    ici
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  18. #18
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 397
    Points
    9 397
    Par défaut
    Ou un autre sujet posté récemment ici, très comparable à ta demande :
    http://www.developpez.net/forums/d15...s-d-ouverture/
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  19. #19
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Groupement de points par proximité 2D
    Bonjour,

    La reformulation de la question change effectivement la nature du problème:
    Citation Envoyé par olibara Voir le message
    ... L'idée c'est une collecte de n adresses avec c chauffeurs n <= 100; c=3
    Sachant que physiquement un chauffeur peut faire entre 30 et 40 adresses sur une journée et que tous les points sont dans un périmetre qui peut être couvert par un chauffeur en une journée ...
    L'idée est de distribuer efficacement les adresses par chauffeur pour répartir la charge et minimiser le kilométrage total ...
    ... il faut partitionner les 100 points en trois groupes pour calculer 3 circuits dont la somme serait optimale ...
    Il s'agit désormais de déterminer 3 circuits fermés, de longueur totale minimale et partant de l'entrepôt, et non plus de regrouper les points autour de zones de forte densité - quoique leur proximité naturelle ne soit pas étrangère au nouvel énoncé; tu as noté que selon les cas, un type de solution peut apparaître plus ou moins approprié.
    ... effectivement le problème n'est pas trivial et la solution à choisir peut à mon avis être affectée par la disposition de base des points ...
    Deux procédés paraissent envisageables.

    A) Si les points recouvrent un domaine relativement allongé (ce qu'un graphique montre immédiatement), la méthode des hyperboles (qu'elles soient construites sur les points les plus éloignés, ou sur la droite des moindres rectangles) doit conduire, après un ajustement convenable, à des résultats satisfaisants.

    Et en y réfléchissant (et compte tenu de ma propension pour les complications inutiles ) une simplification radicale s'impose: tout nuage de points à contour elliptique, de densité uniforme et s'inscrivant dans un rectangle de dimensions (L) et (h<L) peut être partagé parallèlement au petit axe en trois zones rectangulaires de largeurs respectives (0.37*L, 0.26*L, 0.37*L), et contenant chacune des nombres voisins de points (je vous épargne l'origine des valeurs numériques).

    Les effectifs respectifs (N1, N2, N3) sont modulables par déplacement des frontières précédentes (rien ne remplace un examen visuel du graphique !), et le procédé reste applicable au cas d'une distribution quasi-circulaire, inscrite dans un carré - quoique l'absence d'une direction privilégiée puisse devenir problématique).

    La méthode de la droite des moindres rectangles fournit les directions orthogonales associées au nuage de points; pour les limites des rectangles circonscrits, revoir les remarques pertinentes de souviron34 (28/01/2016): (u) représentant l'inclinaison du grand axe par rapport à (x'x), repérer les points correspondant aux valeurs extrêmes des sommes S = y*cos(u) - x*sin(u) et T = y*sin(u) + x*cos(u) .
    Une résolution graphique peut se révéler efficace.

    B) Le procédé précédent repose toujours sur la notion de proximité mutuelle, et ne tient pas compte de la position de l'entrepôt M0(x0, y0) , point de départ obligé de tous les circuits de livraison ... c'est pourtant bien la moindre des choses à considérer dans un problème de ce genre !

    Soit donc désormais un repère (xM0y) centré le lieu de l'entrepôt, à priori distinct des (N = 100) points de livraison répartis dans le plan. On partitionne celui-ci en 24 secteurs d'angle (w = 360°/24 = 15°) d'abord par une dichotomie rapide portant sur les signes des coordonnées (x et y >0 ou <0), puis ensuite par une comparaison des rapports (|y|/|x|) aux seuils remarquables (tan(15°), tan(30°), tan(45°), tan(60°) ou tan(75°)). Le dénombrement des points présents dans chaque domaine conduit à un histogramme sur lequel il est aisé de repérer les zones les plus denses, et de les séparer par des limites convenablement placées (au voisinage des secteurs les moins peuplés); un ajustement peut là encore conduire à des effectifs convenables (N1, N2, N3) pour chacun des 3 livreurs.

    Le défaut de ce procédé est de ne tenir aucun compte des distances, mais seulement de l'orientation géographique des points de livraison par rapport à l'origine. Les points les plus proches de cette dernière ne seront donc pas définitivement attribués à leur secteur d'origine, mais pourront servir de réserve d'ajustement.
    Le cas le plus extrême est celui d'un nuage très étroit, et qui contiendrait l'origine (M0); l'exploitation de l'histogramme, dont les secteurs seraient vides en quasi-totalité n'aurait plus de sens, et l'on devrait revenir au procédé (A). Il y d'ailleurs fort à parier que les points de livraison borderaient une autoroute ou un cours d'eau, ce qui dénature complètement l'énoncé.

    ■ Avec l'adaptation au monde réel surgit une difficulté jusque là inapparente (et pour cause) dans la recherche d'une solution optimale.
    On peut évidemment se reporter à deux discussions récentes sur le thème du voyageur de commerce avec contraintes, au cours desquelles des intervenants ont apporté des réponses exhaustives.
    Je pense toutefois qu'on pourrait s'en tenir aux méthodes précédentes (ou à l'une de leurs variantes) au prix de quelques restrictions supplémentaires, à reporter sur le tracé du nuage de points en utilisant des couleurs ou des symboles (carrés, croix, cercles ...) différents.
    Il serait par exemple utile de distinguer:
    a) les points très proches de l'entrepôt (M0), et donc incorporables à n'importe quel sous-ensemble compte tenu de leur faible contribution à la distance totale parcourue;
    b) les points rapidement accessibles par une éventuelle voie rapide, à aborder en priorité dans un circuit;
    c) les points difficilement connectables en raison d'obstacles topologiques (fleuve, voie ferrée, autoroute, relief, lieu d'embouteillage fréquent ...), à ranger autant que possible dans des circuits différents - à moins qu'un circuit unique suffisamment long ne permette le contournement de l'obstacle.

    Il ressort de tout ce qui précède que les algorithmes proposés ne décrivent le système que d'une façon très sommaire, parce que les données se limitent à la liste des coordonnées (xk, yk) des (N) points de livraison; on ne peut donc en tirer qu'une image 2D (nuage ou histogramme) assortie de quelques informations, mais dépourvue de valeur décisionnelle. C'est au programmeur qu'il revient de faire un choix conduisant à une solution.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  20. #20
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Groupement de points par proximité 2D
    Il m'est venu une autre idée, dont je ne sais pas ce qu'elle vaut.

    J'avais par curiosité recherché et trouvé des solutions au problème du voyageur de commerce, il y a longtemps, lorsque je découvrais la programmation; les boucles calculées en quelques minutes reliaient quelques centaines points aléatoirement répartis dans un rectangle, et j'en avais gardé le souvenir d'un défi intéressant, bien que difficile. Je m'étais par la suite désintéressé de la question, compte tenu du nombre délirant de solutions ((N - 1)!/2 = 4.67E155 pour N = 100) sur un domaine fini ]N*Dmin ; N*Dmax[ , donc des périmètres voisins ne différant en moyenne qu'à partir du 153me chiffre: le problème était devenu pour moi numériquement inconsistant.

    Je savais aussi que de nouveaux algorithmes performants avaient été mis au point, qui permettaient de trouver de bonnes solutions sur des ensembles beaucoup plus vastes; la recherche d'une boucle optimale sur un nuage de 20 à 40 points me paraissait donc aller de soi, c'est pourquoi je me suis concentré sur la partition du nuage.

    Voici la question: ne pourrait-on pas inverser les deux étapes de la recherche des trois cycles en procédant comme suit:
    a) Déterminer une (ou plusieurs) boucles de 100 points, de périmètre minimal (ou du moins relativement faible), et constituant une solution satisfaisante;
    b) Rechercher les trois paires de points consécutifs les plus proches du lieu de l'entrepôt (M0), dont la connexion à celui-ci entraîne un allongement minimal du parcours total, et qui restent compatibles avec les limites imposées aux trois effectifs (20<= N1, N2 et N3 <= 40) ?

    Il s'agirait alors de repérer dans le cycle des (N) points 3 couples (MiMi+1), (MjMj+1), (MkMk'), vérifiant:
    ■ 0 < i ; i + 19 < j ; j + 19 < k ;
    ■ k' = k + 1 si (k < N) ou k' = 1 si (k = N) ; k < Min(N + 1 , N + i - 19) [ calculs rapides, à contrôler ] ;
    et auxquels correspondraient, par substitution des liens, les allongements respectifs:
    Li = MiM0 + M0Mi+1 - MiMi+1 ;
    Lj = MjM0 + M0Mj+1 - MjMj+1 ;
    Lk = MkM0 + M0Mk' - MkMk' ;
    et pour l'ensemble des 3 cycles, l'augmentation du parcours total: L = Li + Lj + Lk .

    Le nombre de triplets (i, j, k), proportionnel à (N3), est considérablement réduit par les conditions d'espacement qui leur sont imposées; de sorte que l'algorithme décrit, à priori assez lourd, doit pouvoir être exécuté sur un délai raisonnable, d'autant que le nombre (N) de points reste modéré.
    L'existence d'une solution ne va pas de soi, dans les conditions de l'énoncé; le seul recours, en cas d'échec, est de diminuer la longueur minimale des cycles (à 18 ou 15, par exemple).


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/10/2005, 16h47
  2. VBA, graphiques : Acceder au Range pointé par une série
    Par CCHEVALIER dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/09/2005, 10h56
  3. Couleur du pixel pointé par la sourie
    Par algerian dans le forum Windows
    Réponses: 4
    Dernier message: 16/08/2005, 18h22
  4. Réponses: 4
    Dernier message: 21/05/2004, 09h13
  5. [MATH] Point par rapport à une droite
    Par teska dans le forum Mathématiques
    Réponses: 6
    Dernier message: 14/05/2003, 16h11

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