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 :

Recherche de pistes pour un problème d'optimisation


Sujet :

Algorithmes et structures de données

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 22
    Points : 13
    Points
    13
    Par défaut Recherche de pistes pour un problème d'optimisation
    Bonjours à tous.

    Je pose le problème :
    - Un programme P1 calcul les grandeurs caractéristiques d'un ressort en fonction de données constructeur (Longueurs, raideur du ressort etc...). Ce programme se sert uniquement des lois physiques "basiques" [type : la force du ressort : F=G.d^4.s/(8.D^3.n)]

    - Un programme P2 calcul la géométrie du ressort en fonction des données de P1. Ce programme de calcul par élément fini donne une solution "Virtuellement réelle", i.e. un modèle [donc virtuel] précis du ressort en situation réelle [d'où le "réelle"]. Parfois, le ressort solution serait impossible : le distance entre deux spires est négative, ce qui implique que dans une position, le ressort voit sa structure déformée.

    --> Alors, un ingénieur, fort de son expérience, modifie localement un peu le diamètre (les ressorts fabriqués ne sont pas Cylindriques) et les hauteurs (la pente de l'hélice n'est pas constante), et lance le programme P2 pour avoir un nouveau ressort solution.

    Mon programme doit pouvoir, éventuellement en deux ou trois utilisations successives, "remplacer" l'expérience de l'ingénieur, et produire des ressorts solution aux distances inter spires toutes positives.


    Mes problèmes d'algorithmies sont les suivants :
    Q1 : - Existe-t-il
    --soit une méthode fiable (scientifique, utilisations de cas particuliers...) de test pour valider mes lois d'évolutions empiriques. (ou je doit lancer une [très longues!!] série d'essais sur les ressort défectueux existants??).
    --soit une méthode pour définir ces lois d'évolutions de facon mathématiques sans passer par le calcul d'intégrale ou d'élément fini (ce n'est pas l'objet du programme)

    De plus, pour mes lois, j'ai besoin de définir la "distance disponible" entre deux spires, i.e. de combien je peux déplacer la spire à problème. Pour cela je dispose des coordonnées des points, et de secteurs.
    -> Je peux modifier un secteur num. n de -0,05% en hauteur et 3% en rayon par exemple. Cela en fonction de la "distance disponible", de la distance à problème (entre une spire n et m, et négative) calculée avec les coordonnées des points.

    Problème :
    Ma méthode empirique pour déterminer cette distance ne me satisfait pas à 200% (et puis j'ai suffisament de temps devant moi pour la changer). J'avais commencer par prendre le maximum des distances positives entre deux spires consécutives, puis la moyenne de ces distances, et les résultats sont "satisfaisants" en utilisant 2/3 de cette même moyenne.
    Q2 : Y aurait-t-il une facon d'obtenir, indépendament ou non de cas (ex.: spires en contact ou non, grande différence de pente de l'hélice ou non etc...), la "distance disponible" optimale.

    Je n'attend évidemment pas de "code solution" mais des idées, ou des pistes... Ce n'est pas un problème "Chemin de voyageur de commerce" ou de "colonie de Fourmis" (c'est des méthodes de traitement, des algo, vus dans des sites, dans le Forum etc...), je ne peux pas me servir ni de méthode de calcul d'éléments finis, ni même des méthodes "d'optimisation avec contraintes" (Pb de calcul d'intégrales irréalisable...).
    Toute proposition, toute piste est la bienvenue, même si je me rend bien compte que le domaine abordé par ce post rebuttera la pluspars des lecteurs

  2. #2
    Membre régulier Avatar de nin2
    Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 109
    Points
    109
    Par défaut
    ni même des méthodes "d'optimisation avec contraintes" (Pb de calcul d'intégrales irréalisable...).
    C'est dommage, parce que c'est ce que je t'aurais proposé en premier ! Pourtant la programmation par contraintes semble une bonne solution pour résoudre ton problème ...
    Personnellement, j'ai réalisé cette année (dans le cadre de mes études) une petite application déterminant les caractéristiques d'une aile d'avion en fonction de différents paramètres (géométrie du profil de l'aile, forces du vent, portance ...) et faisant de la simulation. On a utilisé pour cela un système de contraintes géométriques.
    Donc à par des contraintes, je ne vois pas trop ... Désolé
    J'espère que d'autres personnes auront des super idées. En tout cas, bonne continuation dans ton travail

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    En fait, quand je dit "Pb de calcul d'intégrales irréalisable", c'est peut être pas si vrai... En fait, je suis étudiant aussi, et un de mes "Maître de stage" m'a dit qu'il avait rencontrer de gros problème avec le calcul d'intégrale pour son programme, et m'a dit en gros "débrouille toi comme tu veux [comme tu peux surtout ;P] mais évite le calcul d'intégrales!" Mais si tu as réussi, je pourrai peut-être aussi m'y mettre! son conseil était peut-être sans autre fondement qu'un dégout personnel!!!

    Est-ce que tu pourrais me dire si sans aucune notion des bibliothèques nécessaires, et du calcul intégrale en géneral, je pourrait mettre la méthode d'"optimisation avec contraintes" en oeuvre (c'est précisement en quoi consiste mon programme quand même!) ???

  4. #4
    Membre régulier Avatar de nin2
    Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 109
    Points
    109
    Par défaut
    Resalut !

    La première chose, c'est que si tu n'as jamais fait de programmation par contraintes, ca risque de pas être très facile ... Enfin bon, je vais détailler un peu plus le projet que j'ai réalisé à propos de l'aile d'avion et t'expliquer les grands principes des contraintes et des méthodes pour les mettre en oeuvre dans une application telle que celle que tu développes.

    L'objectif du projet que j'ai réalisé est le suivant :
    Etant donnés les caractéristiques géométriques d'une aile d'avion et des données plus générales telles que les forces appliquées à cette aile (force du vent, portance ...), il fallait calculer la trajectoire optimum de l'aérofrein de cette aile pour différentes phases de vol (décollage, vol normal, atterrissage). Ce problème, comme le tien d'ailleurs, est basé sur un problème de satisfaction de contraintes géométriques.

    Comment résoudre un tel problème ?
    1 - Définir un modèle de donnée pour représenter le problème. Par exemple, dans mon cas, j'avais créé un objet AILE, un objet AEROFREIN, des objets FORCES , un objet TRAJECTOIRE ... Dans ton cas, il faut que tu définisses par exemple un modèle pour ton ressort (en gros il faut que ton modèle stoque toutes les données dont tu as besoin)
    2- Un fois ton modèle défini, il faut que tu fasses bien la différence entre tes données variables et tes données constantes. Ensuite, tu modélises ton problème à l'aide d'équation (dans ton cas, des lois physiques associées au ressort par exemple). Tu ajoutes aussi des équations (basées sur les variables et constantes que tu as défini) qui définissent des contraintes (par exemple, tu dis que la distance entre deux spires doit être positive, ou encore tu défini une raideur minimum pour le ressort). Tu peux aussi mettre des contraintes en rapport avec les forces appliquées au ressort. Bref, c'est toi qui voit ce dont tu as besoin ...
    3 - Un fois ton ensemble de contraintes défini, tu le donne à un solveur de contraintes qui te calcule des solutions. Tu peux récupérer l'ensemble des solutions ou une seule, c'est toi qui choisis en général.
    4 - Si la solution te conviens, tu la conserve. Sinon, tu modifies un peu les paramètres de ton problème et tu relance le solveur.

    Voila en gros le principe ... Si des trucs ne sont pas clairs, dis moi et j'essairai de répondre un peu plus en détail.

    En ce qui concerne les solveurs de contraintes, il en existe plusieurs sur le marché. A vrai dire, je ne les connais pas tous.
    Pour mon projet, j'ai utilisé un solveur de contrainte qui s'appelle Elisa et qui est à la base du produit Realpaver. Plus d'infos à cette adresse : http://sourceforge.net/projects/elisa/
    C'est une librairie C++, donc si tu programmes dans un autre langage, ca va pas être possible. Mais en cherchant un peu, tu devrait pouvoir trouver d'autres choses.

    Donc je résume les grandes étapes :

    1 - Définition du modèle de données
    2 - Définition du problème de satisfaction de contraintes à l'aide de variables et d'équations
    3 - Fixer les domaines des variables du problème. Définir éventuellement des constantes
    4 - Calcul de solutions à l'aide d'un solveur
    5 - si OK -> c'est fini. si PAS OK -> modifier les valeurs des paramètres pour affiner et relancer la résolution.

    Sur ce, bon courage à toi. Ce que tu entreprends n'est pas un problème trivial. J'espère que j'aurais pu t'aider un peu à avancer...

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    En fait, je n'entreprend que "la fin" du travail :
    A partir des fichiers donnés par le programme P2 dont j'ai parlé dans mon premier post, mon programme s'execute, récupère toutes les données nécessaires (longueurs, diamètre du fil etc.).

    Je ne traite pas "un ressort" mais d'une part
    - des points (les [près de] 1500 points de calcul [ex.: incrément de 1° pour un ressort de 4,1 spires]) contenant les informations de Wdg, et de la distance avec la spire la plus proche dessous ET dessus ( et qui ne sont pas forcément les spires n-1 et n+1). Ce sont ces points dont P2 se sert pour "ses éléments fini".

    -des secteurs (ex.: 7, soient 8 points)pour la hauteur et pour le diamètre dans deux fichiers séparés. Ces secteurs servent à définir des design spéciaux. Je ne touche "qu'à" ces fichier.

    Dans l'idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Point {double Rayon, double hauteur};
    liste chainée d' "EnsemblePoints ";
    liste chaînée d' "EnsembleSecteurs";
     
    EnsemblePoints DistanceDeplacementMaximal; // Donnees Lues puis traitées
     
    EnsemblePoints PointsAProbleme; //Donnees lues puis traitées
    EnsembleSecteurs SecteursInitiauxHauteur;
    EnsembleSecteurs SecteursInitiauxRayon;
     
    [lois d'évolutions]
    EnsembleSecteurs SecteursFinauxHauteur;
    EnsembleSecteurs SecteursFinauxRayon;
    Donc, j'ai déjà déterminer toutes les variables, le programme lit bien les fichiers, détecte les erreurs de lecture, traite les points pour ne copier que les points à probleme ailleurs etc...
    Je test actuellement mes lois, se basant sur 9 cas différents, et je change les paramètre empiriquement pour : ne pas trop dénaturer le ressort du départ (Des fois faut voir le résultat, ca vaut le détours!), pour qu'il ne pose plus problème etc...

    Mais si je peux effectivement avoir une méthode rigoureuse pour faire (points problèmes)+(distances maximales de déplacement)--->(nouveau ressort), ce serait peut-être plus efficace.
    J'ai des résultats encourageants, mais rien de définitivement fiable. Entre deux tests (assez longs -> Du calcul d'element fini sur un P233 [j'exagère à peine, merci à ma boite ]) j'irai me renseigner sur ta proposition.
    Donc merci à toi, et si maintenant que je suis plus précis, tu as de nouvelles idées...
    En tout cas merci bien à toi!

  6. #6
    Membre régulier Avatar de nin2
    Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 109
    Points
    109
    Par défaut
    Donc si j'ai bien compris ton travaille se place après celui du programme P2, qui correspond en quelque sorte au solveur de contraintes dont je parlais tout à l'heure.
    Pour le reste, je pense que mes compétences s'arrêtent là ... Je n'ai pas les connaissances nécessaires en physique pour aller plus loin. Désolé de ne pas pouvoir t'aider plus.
    En tout cas, le problème que tu traites n'est pas du tout trivial et en général, dès qu'on parle de programmation par contraintes, on rencontre toujours des difficultés.
    Je te souhaite bon courage pour la suite

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    OK...
    Je te remerci.
    Comme je pense que je ne vais pas plus développer le calcul avec contrainte, et que ce qui a été dit ne fera avancer significativement personne, j'appose le "truc" Delestage, mais merci bien de ton intér^t pour ma question...

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/01/2012, 00h42
  2. Réponses: 1
    Dernier message: 27/07/2011, 19h00
  3. Réponses: 9
    Dernier message: 16/12/2010, 16h12
  4. Recherche d'informations pour optimiser une requête
    Par zaza78 dans le forum Administration
    Réponses: 2
    Dernier message: 20/08/2010, 15h00
  5. recherche des algorythmes pour images 2d
    Par exxos dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 24/05/2002, 13h46

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