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 :

Arithmétique d'intervalles, application industrielle


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Homme Profil pro
    ingénieur en automatique
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur en automatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Points : 54
    Points
    54
    Par défaut Arithmétique d'intervalles, application industrielle
    Bonjour,

    J'ai réalisé l'automatisation d'un distributeur de béton, dit de cette manière c'est abstrait (et simple, alors que j'ai vraiment eu beaucoup de défis à relever à titre personnel, le code source se composant d'un planificateur de trajectoire, C++ grosso modo 3000 lignes, et d'un programme automate pour le pilotage, 3000 lignes aussi, aucune bibliothèque utilisée pour le C++, à part la STL), alors j'ai mis une vidéo que j'ai fait la semaine passée.
    Pour réaliser avant ce travail il fallait un opérateur à temps complet, rassurez vous on ne l'a pas mis au chômage, il a juste moins de choses à faire et donc peut accorder plus de temps au contrôle de la qualité de la production.



    Je ne viens pas ici pour un problème de régulation mais pou le planificateur.
    Sans rentrer dans les détails, je pars du point le plus loin de la table en métal, je balaye jusqu'à l'origine (où le conteneur change de place selon les Y) et je repars dans l'autre sens pour un passage complet en sens inverse.

    Comme vous pouvez le voir, cela fonctionne bien, mais pas à 100%. Dans certains cas où j'ai 2 dalles côte à côte sur la table, mon planificateur va me générer 2 dalles avec les mêmes intervalles mais des configurations de clapets différent. Dans l'idéal je voudrai le même intervalle avec la fusion des configurations de clapets ouverts...
    Dans certains cas il peut y avoir des problèmes d'ordre, mon planificateur me donne d'abord les dalles à mi-chemin plutôt que la plus éloignée.
    Dans d'autres cas on a un recouvrement de dalles côte à côte et on a différents intervalles qui se chevauchent, alors que je voudrais une suite d'intervalle sans chevauchement et fusionnant les configurations des clapets...

    Avez vous des ressources ou infos sur comment effectuer ces "fusions" et sur l'arithmétique des intervalles en général.

    Ci-dessous un exemple typique produti par mon planificateur. On a un nombre de slabs qui correspond au nombre de dalles. L'élément bar est à oublier, je ne l'utilise plus, toujours à 1 et index 0, pour chaque slab on a un nombre de sections, et chaque section est constitutée d'une configuration d'ouvertures des clapets (X fermé, O ouvert) et d'une position de début et de fin selon l'axe des X.
    Je sais que dans mon cas la toute première section déconne (dans ce cas ici, Xdébut = Xfin) et ce type de problème est corrigé par mon automate qui passe directement à la section suivante lors du bétonnage.

    Merci pour votre aide

    Voici un plan typiquement posant problème, étant donné la complexité de mon programme C++, je souhaite charger mes données résultats dans une classe et effectuer les opérations
    de tri, fusion, recalcul des configurations des clapets, poids et surface avec une nouvelle classe plutôt que de chercher une cause en amont, c'est déjà bien trop compliqué:

    Dans ce cas, dans le sens Xloin vers Xorigine on a dans un sens (loin vers origine)
    [5490,5490] -> [5490,3375] -> [3375,3225] -> [3225,150] -> [14215,11140] -> [11140,10990] -> [10990,8875] -> [8675,5690]
    J'aurais voulu:
    [14215,11140] -> [11140,10990] -> [10990,8875] -> [8675,5690] -> [5490,3375] -> [3375,3225] -> [3225,150]

    Dans le cas retour, donc origine vers loin:
    [150,3225] -> [3225,3375] -> [3375,5490] -> [5690,8675] -> [8875,13825] -> [13825,14215]

    Cela était pour la situation présentée ci dessous, si par exemple j'ai quelque chose comme cela
    [150,3225] -> [3225,3375] -> [3375,5490] -> [3220, 5600] je voudrais
    [150,3220] [3220,3225] [3225,3375] [3375,5490] [5490,5600]

    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    SPREADING FILE
    SlabsQuantity=6
    Slab=0
    Surface=6.64092
    Weight=867.251
    NbBars=1
    SpreadingPlan
    Bar=0
    NbSections=4
    Y=2485
    Section=0
    [5490,5490]
    <X,X,X,X,X,X,X,X>
    EndSection
    Section=1
    [5490,3375]
    <O,O,O,O,O,O,O,O>
    EndSection
    Section=2
    [3375,3225]
    <O,O,O,O,O,O,O,X>
    EndSection
    Section=3
    [3225,150]
    <O,O,O,O,O,O,O,O>
    EndSection
    EndBar
    EndSpreadingPlan
    Slab=1
    Surface=6.64092
    Weight=867.251
    NbBars=1
    SpreadingPlan
    Bar=0
    NbSections=3
    Y=2485
    Section=0
    [14215,11140]
    <O,O,O,O,O,O,O,O>
    EndSection
    Section=1
    [11140,10990]
    <O,O,O,O,O,O,O,X>
    EndSection
    Section=2
    [10990,8875]
    <O,O,O,O,O,O,O,O>
    EndSection
    EndBar
    EndSpreadingPlan
    Slab=2
    Surface=3.72528
    Weight=486.492
    NbBars=1
    SpreadingPlan
    Bar=0
    NbSections=1
    Y=2485
    Section=0
    [8675,5690]
    <O,O,O,O,O,O,O,O>
    EndSection
    EndBar
    EndSpreadingPlan
    Slab=3
    Surface=6.61752
    Weight=864.195
    NbBars=1
    SpreadingPlan
    Bar=0
    NbSections=3
    Y=1248
    Section=0
    [150,3225]
    <O,O,O,O,O,O,O,O>
    EndSection
    Section=1
    [3225,3375]
    <O,O,O,O,O,X,X,O>
    EndSection
    Section=2
    [3375,5490]
    <O,O,O,O,O,O,O,O>
    EndSection
    EndBar
    EndSpreadingPlan
    Slab=4
    Surface=3.72528
    Weight=486.492
    NbBars=1
    SpreadingPlan
    Bar=0
    NbSections=1
    Y=1248
    Section=0
    [5690,8675]
    <O,O,O,O,O,O,O,O>
    EndSection
    EndBar
    EndSpreadingPlan
    Slab=5
    Surface=6.42096
    Weight=838.526
    NbBars=1
    SpreadingPlan
    Bar=0
    NbSections=2
    Y=1248
    Section=0
    [8875,13825]
    <O,O,O,O,O,O,O,O>
    EndSection
    Section=1
    [13825,14215]
    <X,X,X,X,O,O,O,O>
    EndSection
    EndBar
    EndSpreadingPlan
    EndSpreadingFile

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 119
    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 119
    Points : 9 529
    Points
    9 529
    Par défaut
    La question est longue, je ne suis pas allé jusqu'au bout.
    A un moment, tu cherches à trier des couples de nombres. Et ton programme trie en fait des textes. Donc il considère que [1234,56], ça vient avant [56,1234] (tri alphabétique, 1 vient avant 5)

    Tu as 2 pistes pour corriger cela.
    1. Te débrouiller pour que le tri sache que ce sont des nombres.
    2. Au lieu de trier de chaines comme ça : [1234,56], écris les en complétant les nombres à gauche par des 0, sur une longueur fixe :
    [001234,000056] arrive bien avant :
    [000056,001234]

  3. #3
    Membre du Club
    Homme Profil pro
    ingénieur en automatique
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur en automatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Points : 54
    Points
    54
    Par défaut
    Salut,

    Merci de m'avoir lu,

    en fait il ne tri pas des textes, ce que tu vois est la sortie du programme à l'heure actuelle, mais derrière ce sont bien des nombres.

    Voilà 2 situations que je voudrais résoudre pour faire plus court:
    désordre dans ma liste:
    Dans ce cas, dans le sens Xloin vers Xorigine on a dans un sens (loin vers origine)
    [5490,5490] -> [5490,3375] -> [3375,3225] -> [3225,150] -> [14215,11140] -> [11140,10990] -> [10990,8875] -> [8675,5690]
    J'aurais voulu:
    [14215,11140] -> [11140,10990] -> [10990,8875] -> [8675,5690] -> [5490,3375] -> [3375,3225] -> [3225,150]

    Et intervalle qui déborde l'un sur l'autre avec une "mise en place" non trié:
    [150,3225] -> [3225,3375] -> [3375,5490] -> [3220, 5600] je voudrais
    [150,3220] [3220,3225] [3225,3375] [3375,5490] [5490,5600]

    Pour le reste, la configuration des clapets et les calculs de poids, j'arriverai à me débrouiller avec ma nouvelle classe pour les recalculer, je cherche "juste" les algos.
    Merci

  4. #4
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    [001234,000056] arrive bien avant :
    [000056,001234]
    ben ça dépend sur quoi tu tries en premier x ou y

    Et si c'est sur l'ensemble de la chaine, ça me semblerait le second qui arrive en premier, non ? (à moins que tu tries par ordre décroissant)



    Citation Envoyé par tevious Voir le message
    Salut,
    Bon finalement je suis bien content.. Avec ton autre post tu as reussi a faire quelque chose qui marche


    Citation Envoyé par tevious Voir le message
    désordre dans ma liste:
    Dans ce cas, dans le sens Xloin vers Xorigine on a dans un sens (loin vers origine)
    [5490,5490] -> [5490,3375] -> [3375,3225] -> [3225,150] -> [14215,11140] -> [11140,10990] -> [10990,8875] -> [8675,5690]
    J'aurais voulu:
    [14215,11140] -> [11140,10990] -> [10990,8875] -> [8675,5690] -> [5490,3375] -> [3375,3225] -> [3225,150]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if ( Pt1.x > Pt2.x )
       Pt1 avant Pt2
    else
    if ( Pt1.x < Pt2.x )
       Pt1 apres Pt2
    else
    if ( Pt1.y > Pt2.y )
       Pt1 avant Pt2
    else
    if ( Pt1.y < Pt2.y )
       Pt1 apres Pt2

    Citation Envoyé par tevious Voir le message
    Et intervalle qui déborde l'un sur l'autre avec une "mise en place" non trié:
    [150,3225] -> [3225,3375] -> [3375,5490] -> [3220, 5600] je voudrais
    [150,3220] [3220,3225] [3225,3375] [3375,5490] [5490,5600]
    • stocke tout
    • trie
    • élimine doublon
    • 2 à 2

  5. #5
    Membre du Club
    Homme Profil pro
    ingénieur en automatique
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur en automatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Points : 54
    Points
    54
    Par défaut
    Salut,

    merci pour la réponse, de quel autre post tu parles? J'en ai effectivement fait un dans la partie automation où j'avais un problème concernant la conception du régulateur.
    Au final c'est pas mal de bidouille et j'ai laissé tombé les théories de l'école d'ing. Une rampe pour accélérer au démarrage, une pour freiner, un régulateur maitre-esclave basé sur le flux lors du déplacement en "croisière" et ça roule, pour le reste c'est du paramétrage d'offsets et de temporisations et beaucoup de réglages... Plutôt que de faire une super commande, faut faire un système rudimentaire mais avec beaucoup de paramètres variables et facilement modifiables...

    En fait il n'y a pas de Y dans mes intervalles.
    Si on regarde la vidéo, X est le sens de la longueur, Y change une fois en bout de table, c'est le déplacement transversal.

    Je vais tester ta méthode demain, pour la première ça revient pas à faire un tri à bulle sur le premier élément de chaque intervalle (et réciproquement selon qu'on se rapproche ou s'éloigne de l'origine)?
    Pour la 2nde partie je vais réfléchir, comme dit faire sauter les doublons c'est plutôt les fusionner, en faisant un ou sur les <O,X ...> et en sommant les poids et surface. Faut encore que je réfléchisse.

    En tout cas ça montre un autre côté de l'informatique qui change de ce qui se fait en bureau, même si les outils derrière sont les mêmes!

  6. #6
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tevious Voir le message
    merci pour la réponse, de quel autre post tu parles? J'en ai effectivement fait un dans la partie automation où j'avais un problème concernant la conception du régulateur.
    Oui, pour trouver le meilleur moyen de remplir la figure...


    Citation Envoyé par tevious Voir le message
    Je vais tester ta méthode demain, pour la première ça revient pas à faire un tri à bulle sur le premier élément de chaque intervalle (et réciproquement selon qu'on se rapproche ou s'éloigne de l'origine)?
    Pour ça c'est la fonction de tri associée au qsort que j'ai donnée...
    Mais avec ce que tu dis, c'est juste un tri sur la première coordonnée.... (et en cas d'égalité sur la seconde)

    Tu peux pas utiliser qsort ??

    La fonction serait alors :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    if ( pt1.x > pt2.x )
     return -1 ;
    else
    if ( pt1.x < pt2.x )
     return 1 ;
    else
    {
       if ( pt1.y > pt2.y )
         return -1;
       else
       if ( pt1-y > pt2.y )
         return 1 ;
      else
       return 0 ;
    }

    Citation Envoyé par tevious Voir le message
    Pour la 2nde partie je vais réfléchir, comme dit faire sauter les doublons c'est plutôt les fusionner, en faisant un ou sur les <O,X ...> et en sommant les poids et surface. Faut encore que je réfléchisse.
    Non c'est direct une fois que tu tries :

    [150,3225] -> [3225,3375] -> [3375,5490] -> [3220, 5600]

    • L'ensemble :

      150 3225 3225 3375 3375 5490 3220 5600

    • Le tri :

      150 3220 3225 3225 3375 3375 5490 5600

    • Elimination des doublons :

      Code C : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      for ( i = 1, k = 1 ; i < n ; i++ )
         if ( val[i] != val[i-1] )
           {
              val[k] = val[i] ;
              k = k + 1 ;
          }

      150 3220 3225 3375 5490 5600

    • Couples :
      i,i+1

      [150, 3220], [3220, 3225], [3225, 3375], [3375, 5490], [5490, 5600]



  7. #7
    Membre du Club
    Homme Profil pro
    ingénieur en automatique
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur en automatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Points : 54
    Points
    54
    Par défaut
    Ah oui je me souviens,

    tu m'avais bien aidé d'ailleurs, encore merci
    pour l'histoire j'ai dû un peu modifier l'algo de remplissage de figure pour mes besoins, car il y avait des problèmes lorsque ça tapait un sommet.
    J'utilise 3 "rayons" espacés de 1 mm comme la CAO a cette résolution, je mets en oeuvre l'algo que tu avais montré et je fais un OU sur les rayons.

    c'est précis à +/- 1 mm, ce qui est pas si mal pour une machine qui n'est pas une CNC!

    J'essaye ta solution demain Va falloir que je fasse gaffe de pas perdre la configuration de mes clapets et de recalculer mes aires et surfaces en conséquences lors de l'élimination des doublons et ça devrait le faire!
    Par exemple si on a [3222, 5000] avec <O,X,X,X,X> une fois puis [3222, 5000] avec <X,X,X,O,O> j'obtiendrai au final une fois [3222, 5000] avec <O,X,X,O,O> il faudra que j'ai judicieusement préparé mes aires et surfaces et je n'aurai qu'à faire un calcul de proportionnalité pour chaque nouvel intervalle puis faire la somme de chaque doublon avant de l'éliminer.

    Encore merci

  8. #8
    Membre du Club
    Homme Profil pro
    ingénieur en automatique
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur en automatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Points : 54
    Points
    54
    Par défaut
    Petite question avant d'aller cogiter en dormant

    Si on rajoute un élément disjoint, qui plus est pas bien placé (qui donc logiquement après process doit se retrouver au bon endroit dans la liste de sortie, mais ne doit pas avoir fusionné ou être fusionné avec quelque chose d'autres vu qu'il n'y a pas de "recouvrement" avec un autre interval):

    [6000, 6200] -> [150,3225] -> [3225,3375] -> [3375,5490] -> [3220, 5600] -> [50, 120]

    Est-ce que cela marche toujours?

    Désolé si c'est stupide comme question mais j'ai eu tellement de trucs tordus sur ce projet que je veux vraiment plus rien laisser au hasard et être sûr que cela fonctionnera tout le temps, et personnellement je suis incapable de dire oui ou non, pas assez fort en algo!

    Merci

  9. #9
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tevious Voir le message
    Est-ce que cela marche toujours?
    Pour quel cas ?

    • Probleme 2 :

      [6000, 6200] -> [150,3225] -> [3225,3375] -> [3375,5490] -> [3220, 5600] -> [50, 120]
      • tout :
        6000 6200 150 3225 3225 3375 3375 5490 3220 5600 50 120

      • tri
        50 120 150 3220 3225 3225 3375 3375 5490 5600 6000 6200

      • elinination doublons
        50 120 150 3220 3225 3375 5490 5600 6000 6200

      • couples
        [50,120], [120,150], [150, 3220], [3220, 3225], [3225, 3375], [3375, 5490], [5490, 5600], [5600, 6000], [6000, 6200]



    • Probleme 1 :
      [6000, 6200], [3375, 5490], [3225, 3375], [3220, 5600], [150, 3225], [50, 120]

  10. #10
    Membre du Club
    Homme Profil pro
    ingénieur en automatique
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur en automatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Points : 54
    Points
    54
    Par défaut
    Je ne vois pas ce que tu entends par problème 1 et 2?

    En fait, quand un il n'y a pas de recouvrement d'intervalles (il peut y avoir plusieurs recouvrements, même si ici c'est le [3220, 5600] qui recouvre tous les intervalles suivant:
    [3220, 3225] et [3375,5490] ) l'intervalle non recouvert doit être bien placé dans la liste par le tri, mais ne doit pas former un 2 à 2, il y a un espace entre lui et son prédécesseur/successeur, en fait c'est typiquement une dalle isolé sur la table qui n'a pas de voisin immédiat

    [6000, 6200] -> [150,3225] -> [3225,3375] -> [3375,5490] -> [3220, 5600] -> [50, 120]

    devrait donner:

    [50, 120] -> [150,3220] -> [3220,3225] -> [3225,3375] -> [3375,5490] -> [5490,5600] -> [6000, 6200]

    Merci

  11. #11
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tevious Voir le message
    Je ne vois pas ce que tu entends par problème 1 et 2?
    Dans ton post original et le suivant, tu dis qu'il y a 2 pbes..

    Ou alors ce n est pas très clair

  12. #12
    Membre du Club
    Homme Profil pro
    ingénieur en automatique
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur en automatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Points : 54
    Points
    54
    Par défaut
    Effectivement

    Le problème 1 c'était un tri et le 2 c'était le tri avec recouvrement d'intervalle. Si l'on rajoute la disjonction de mon dernier post on a tous les cas possibles.
    Mais là ça commence à devenir flou alors je vais aller me coucher et tester tes idées demain, enfin tout à l'heure

    Merci pour ton aide, je ferai un feedback dans la journée!

  13. #13
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tevious Voir le message
    Effectivement

    Le problème 1 c'était un tri et le 2 c'était le tri avec recouvrement d'intervalle. Si l'on rajoute la disjonction de mon dernier post on a tous les cas possibles.
    Mais là ça commence à devenir flou alors je vais aller me coucher et tester tes idées demain, enfin tout à l'heure

    Merci pour ton aide, je ferai un feedback dans la journée!
    OK, je crois que je commence à comprendre... (c'était pas clair !! ^^)


    Tu as en fait donc 2 types de déplacements :
    • un "discret"
    • un "continu" (permet de faire du 2 à 2)


    Il me semble alors qu'il te faut faire un objet "déplacement" qui contient tes 2 coordonnées et un drapeau (booléen ça suffit) "discret"

    Si dans le tri tu tombes sur un "discret" tu le "splittes" pas, tu le gardes tel quel..
    Donc tu vas juste stocker, splitter, trier, et coupler les "continu".
    Tu vas aussi trier les "discret" (2 listes)

    Ensuite, tu passes à travers la liste de ceux qui sont restés sur le carreau comme "discret" et tu les insères à la bonne place dans la première liste..

    Avec ton exemple :

    [6000, 6200] -> [150,3225] -> [3225,3375] -> [3375,5490] -> [3220, 5600] -> [50, 120]

        couple         attribut "discret"
     
    [6000, 6200]             1
      [150, 235]             0
    [3255, 3375]             0
    [3375, 5490]             0
    [3220, 5600]             0
       [50, 120]             1
    
    list1 = [6000, 6200], [50,120]
    list2 = [150, 235], [3255, 3375], [3375, 5490] [3220, 5600]

    • Application de l'algo sur list2 :

      • Ensemble :

        150 235 3255 3375 3375 5490 3220 5600

      • Tri

        150 235 3220 3225 3375 3375 5490 5600

      • Elimination doublons

        150 235 3220 3225 3375 5490 5600

      • Construction couples

        [150, 235] [235, 3220] [3220, 3225] [3225, 3375] [3375, 5490] [5490, 5600]


    • List1 :

      • Tri list1

        [50, 120] [6000, 6200]


    • Fabrication totale :


      pour deplacement dans list1

      trouve position dans list1
      insere

      fin pour
      ou en C :

      Code C : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      Pos = 0 ;
      for ( i = 0 ; i < nlist1 ; i++ )
        {
            Found = False ;
       
            for ( j = Pos ; j < nlist2 ; j++ )
              if ( list1[i].x1 < list2[j].x1 )
                 {
                      Found = True ;
       
                      for ( k = (nlist2-1) ; k >= j ; k-- )    /* Pousse la liste a droite */
                         list2[k+1] = list2[k] ;
       
                      list2[j] = list1[i] ;
                      Pos = j + 1 ;
                      nlist2 = nlist2 + 1 ;
                 }
       
            if ( ! Found )
               {
                      list2[nlist2] = list1[i] ;
                      nlist2 = nlist2 + 1 ;
               }
        }

      Résultat :

      [50, 120] [150, 235] [235, 3220] [3220, 3225] [3225, 3375] [3375, 5490] [5490, 5600] [6000, 6200]

  14. #14
    Membre du Club
    Homme Profil pro
    ingénieur en automatique
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur en automatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Points : 54
    Points
    54
    Par défaut
    Merci pour ton message et ta grande aide, il est très complet.

    J'implémente tout aujourd'hui et je te dirai quand il fonctionnera

  15. #15
    Membre du Club
    Homme Profil pro
    ingénieur en automatique
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur en automatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Points : 54
    Points
    54
    Par défaut
    Bonjour,

    J'ai utilisé les méthodes que tu m'as donné, combinés aux algos de la STL sur les vectors je n'ai pas eu besoin de réimplémenter les tris
    J'ai testé sur mes jeux de données, de toute évidence cela fonctionne, on a envoyé le programme sur l'automate, maintenant on attend de voir ce qu'on obtient sur la machine!

    Merci beaucoup pour ton aide!

  16. #16
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Super !!

    Bon alors je croise les doigts pour le test grandeur nature...


    PS: pour les tris, ben oui, il y a vraiment peu de langages pour lesquels il faudrait les reprogrammer.. En général on ne fournit que la fonction de tri (ce que j'avais mis ci-dessus), et pfuiit...

Discussions similaires

  1. passage à l'arithmétique par intervalle avec Boost
    Par NGeVtC87 dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 22/11/2011, 16h01
  2. Réponses: 4
    Dernier message: 22/09/2011, 08h20
  3. Meilleure façon pour protéger une application industrielle
    Par 3aychoucha dans le forum Sécurité
    Réponses: 2
    Dernier message: 10/03/2011, 08h28
  4. Réponses: 2
    Dernier message: 10/02/2009, 09h03
  5. [Avis]Projet industriel avec application C/S
    Par Masmeta dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/03/2008, 11h44

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