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

Mathématiques Discussion :

Initier une variable satisfaisant les contraintes d'un problème d'optimisation


Sujet :

Mathématiques

  1. #1
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut Initier une variable satisfaisant les contraintes d'un problème d'optimisation
    Bonjour,

    J'espère que je suis dans la bonne section. Si ce n'est pas le cas n'hésitez pas à déplacer ce message.

    Je bosse sur un problème d'optimisation: la répartition optimale de vecteurs pousées sur un navire (positionnement dynamique). Ce problème s'écrit comme suit:

    Nom : CodeCogsEqn.gif
Affichages : 188
Taille : 956 octets

    Le problème est résolu en temps réel, c'est à dire toutes les x secondes. Les contraintes d'inégalité reflètent les contraintes physiques des propulseurs (variations max d'un pas de temps à l'autre), autrement dit les bornes du problème. Le problème est convexe par construction.

    J'utilise un module d'optimisation Python pour problèmes de ce genre qui fonctionne très bien (cvxpy, pour info). Cependant ce module nécessite pas mal de dépendances qui ne sont pas aisées à installer pour un néophyte en Python. C'est pourquoi je souhaite proposer une alternative en utilisant un autre solver: la méthode SLSQP de optimize du module SciPy (A noter, j'ai parfaitement conscience que cette dernière est bien moins adaptée à mon problème). Or pour ce module j'ai besoin d'initialiser la variable u. Et c'est là que je sèche.

    Jusqu'à présent je me contentais de definir u0, l'initial guess de la fonction d'optimisation, comme étant la solution trouvée au pas de temps précédent. La solution ne devant pas changer énormément d'un pas de temps à l'autre. Or, certaines contraintes des propulseurs font que mon problème doit être scindé en plusieurs sous problèmes convexes. Toutes les combinaisons de sous-problèmes sont testées, et la meilleure est conservée. La conséquence est que u0 ne satisfait pas nécessairement les contraintes (les bornes) du problème. Ce qui a pour effet de rallonger le temps de calcul, voir de créer une instabilité dans la résolution du problème.

    D'où ma question, existe-il une solution mathématique permettant de définir une valeur pour u0 qui soit déjà à l'intérieur des bornes du problème? Je pense peut-être à trouver u minimisant A.u - b (les contraintes en question).

    En me relisant j'ai l'impression que mon message n'est pas hyper clair... je peux apporter plus de précision si besoin.

    Merci!

    Ju

  2. #2
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    Si tu mets des formules, il faut en expliciter les termes.
    Pour attester que tu sais de quoi tu parle.
    Savoir pour comprendre et vice versa.

  3. #3
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Pas de soucis. Mais honêtement je ne pense pas que cela apporte quoi que ce soit, si ce n'est de la confusion. La formulation utilisée est la forme classique d'un problème d'optimisation quadratique. Seul le choix du nom des variables change.

    Dans le cas présent:
    • u est un vecteur colonne 2Nx1, avec N le nombre de propulseurs. u est composé de couples uix, uiy avec i l'indice du propulseur. Je traite le problème dans un repère cartésien. C'est u que l'on cherche.
    • W est une matrice de poids, 2Nx2N.
    • B est la matrice de configuration de taille 3x2N. Elle relie u au torseur global des efforts produits (Fx, Fy et Mz). B.u=Tau est la contrainte d'égalité à satisfaire, soit que le torseur des efforts produit soit égal à celui demandé.
    • A et b sont les matrices représentant les contraintes d'inégalités. Elles sont contruites en définissant un polygone convexe pour chaque propulseur représentant l'espace dans lequel la solution peut se trouver. La dimension du polygone pouvant varier, les dimensions de A et b également.


    J

  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 601
    Points
    188 601
    Par défaut


    Peut-être en résolvant un autre problème d'optimisation ? Idéalement, linéaire, histoire de ne pas y perdre trop de temps. Je pense à ceci :

    Formule mathématique
    Formule mathématique

    Tu seras sûr de respecter les contraintes s'il existe une solution à ton problème initial. Là, SciPy te propose des fonctions d'optimisation linéaire qui n'ont pas besoin de point initial.
    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
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Utiliser une première optimisation c'est une solution en effet. Dans ce cas je me contenterais de trouver u minimisant A.u. En effet, je ne suis pas assuré de trouver une solution satisfaisant la contrainte d'égalité. Pour pallier à ce problème j'utilise une variable de relachement (slack variable en anglais) non décrite dans mon précédent post.

    Une autre solution serait de modifier la solution précédente en la projetant dans l'espace admissible. Si la solution n'est pas faisable (A.u>b), alors modifier u de sorte à ce que ce soit le cas.

    Je me disais que ce genre de considération doit être assez courant et qu'une méthode préconisée existe déjà.

    J

  6. #6
    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 601
    Points
    188 601
    Par défaut
    À te lire, je pense à des choses comme un gradient projeté, tu pourrais reprendre l'étape de projection ? Surtout, si tu projettes sur des contraintes linéaires, c'est encore assez gentil.
    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 !

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/08/2007, 17h04
  2. Réponses: 3
    Dernier message: 01/08/2007, 22h50
  3. Réponses: 4
    Dernier message: 18/04/2007, 10h22
  4. Réponses: 9
    Dernier message: 30/05/2006, 10h33
  5. Partage d'une variable entre les processus fils
    Par Mehdi Feki dans le forum Linux
    Réponses: 7
    Dernier message: 09/01/2005, 13h34

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