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:
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
Partager