Je cherche à résoudre un problème d'optimisation contraint où je connais les limites de certaines variables (en particulier une contrainte encadrée).
sujet à
où est un vecteur de variables de conception, est un vecteur de variables d'état et est une contrainte d'égalité (généralement un PDE). Les contraintes inférieures et supérieures et peuvent être spatialement variables.
Quels packages peuvent gérer les systèmes de cette forme?
pde
optimization
nonlinear-programming
Sean Farley
la source
la source
Réponses:
J'ai décidé de modifier radicalement ma réponse en fonction de certains des commentaires.
Je n'ai pas utilisé TAO. D'après la documentation, il semble que le seul moyen pour TAO de gérer les problèmes d'optimisation contraints (à l'exception du cas spécial des seules contraintes de boîte) est de convertir le problème en une inégalité variationnelle en utilisant les conditions de Karush-Kuhn-Tucker (KKT) , qui sont nécessaires sous qualification de contrainte (le type que je vois habituellement est la condition du point de Slater ), et suffisants sous convexité de l'objectif et des contraintes (plus généralement, l'invexité de type 1). SiF est non convexe, la formulation de l'inégalité variationnelle utilisant les conditions KKT N'EST PAS équivalente au problème d'optimisation d'origine, donc à proprement parler, si vous voulez un optimum global pour le problème d'optimisation, vous ne devez pas l'exprimer comme une inégalité variationnelle. Il serait difficile de trouver de toute façon un optimum global pour l'optimisation contrainte par PDE (voir ci-dessous), donc ignorer ce détail est peut-être bien. Étant donné ce que Wolfgang a dit, je serais sceptique quant à l'utilisation de TAO; Je suis déjà sceptique car il n'implémente pas de méthodes pour résoudre des programmes non linéaires (PNL) en tant que PNL, plutôt que des inégalités variationnelles.
Je ne suis pas un expert en optimisation contrainte PDE; mes collègues et associés travaillent sur des problèmes d'optimisation sous contrainte ODE. Je sais que pour les formulations intrusives, Larry Biegler (et d'autres) utilisera des méthodes de collocation pour discrétiser la PDE et en faire une très grande PNL éparse, puis il la résoudra en utilisant des méthodes de point intérieur. Pour vraiment résoudre le problème de l'optimalité globale, vous devez également générer des relaxations convexes, mais pour autant que je sache, cette approche n'est pas adoptée car les problèmes d'optimisation contraints par PDE conduisent à des PNL si importants qu'il serait difficile de les résoudre. optimalité globale. Je mentionne ces détails uniquement parce que la formulation du problème influence fortement le choix du package de solveur. Pour les formulations non intrusives, les résolutions PDE répétées produisent des informations de gradient pour les algorithmes d'optimisation.
Certaines personnes qui étudient les problèmes d'optimisation sous contrainte ODE utilisent une approche similaire pour discrétiser le problème à l'aide de la collocation et d'une méthode numérique, puis assouplir la PNL résultante pour produire une formulation convexe utilisée dans un algorithme d'optimisation globale. Une autre approche de l'optimisation contrainte par ODE consiste à détendre le problème, puis à discrétiser l'ODE, qui est l'approche adoptée dans mon laboratoire. Il pourrait être possible de détendre certaines classes de problèmes d'optimisation contraints par PDE, mais je ne connais aucun travail existant sur ce problème. (C'était un projet potentiel dans mon laboratoire à un moment donné.)
En fin de compte, ce qui importe n'est pas la différentiabilité de l'EDP d'origine, mais la différentiabilité de la discrétisation par rapport aux variables de décision.
Si le problème discrétisé est deux fois différentiable par rapport aux variables de décision, les packages suivants calculent une solution locale:
fmincon
dans Matlab implémente un certain nombre d'algorithmes (y compris le point intérieur et la programmation quadratique séquentielle) pour l'optimisation non linéaireCependant, il est possible que la discrétisation ne soit différenciable qu'une seule fois en ce qui concerne les variables de décision, auquel cas, vous devez utiliser la descente la plus abrupte projetée ou une autre méthode d'optimisation de premier ordre lors du calcul d'une solution locale. Étant donné que de nombreuses études se concentrent sur les problèmes où des méthodes de second ordre peuvent être utilisées (et lorsque vous pouvez les utiliser, leurs propriétés de convergence supérieures en font un meilleur choix), je n'ai pas pu trouver de nombreuses implémentations de descente la plus abrupte qui n'étaient pas des solutions aux problèmes de devoirs. La bibliothèque scientifique GNU a une implémentation, mais ce n'est qu'à des fins de démonstration. Vous auriez probablement besoin de coder votre propre implémentation.
Si le problème n'est que continu en ce qui concerne les variables de décision, vous pouvez utiliser des méthodes directes pour le résoudre localement. Il existe une excellente enquête sur les méthodes directes par Kolda, Lewis et Torczon . La plus connue de ces méthodes est l' algorithme simplex de Nelder-Mead . Il n'est pas garanti de converger vers un minimum local dans plusieurs dimensions, mais il a quand même trouvé une utilisation pratique considérable.
Le choix du package dépend vraiment de la langue que vous souhaitez utiliser pour résoudre le problème, si la résolution du problème lié à la limite n'est qu'une partie d'un algorithme que vous souhaitez implémenter (ou si c'est la seule étape de votre algorithme, auquel cas les langages de modélisation devenir plus viable pour le code de production), le type et la taille du problème, et si vous avez besoin de parallélisme.
la source
Nous avons essayé TAO, mais nous l'avons trouvé peu utile pour les problèmes liés aux inégalités. Il est également essentiellement en mode maintenance depuis au moins 2003, sans aucune nouvelle fonctionnalité en dehors des mises à jour pour suivre les changements dans PETSc sur lesquels il est construit.
la source
OPT ++ est une autre alternative . Il prend en charge les contraintes linéaires et non linéaires avec un solveur de point intérieur non linéaire efficace, permet de contrôler la précision des fonctions (si une différenciation numérique est requise), de contrôler les tailles de pas, etc. J'optimise généralement de grandes fonctions implicites (par exemple FEM) où ces types de les contrôles peuvent être utiles.
la source
Si le problème est formulé comme un problème de complémentarité, vous pouvez utiliser TAO (Toolkit for Advanced Optimization). Certaines des méthodes de TAO, telles que la méthode de l'espace réduit (une variante de la méthode de l'ensemble actif), sont actuellement disponibles dans le cadre de SNES dans PETSc ( SNESVI ).
la source
Je ne pense pas que MINUTE fonctionnera bien pour vos besoins, mais la transformation peut si vous êtes obligé d'écrire une partie ou la totalité du code vous-même.
la source
Comme l'a souligné @Geoff Oxberry, plusieurs packages vous permettent de trouver une solution locale. Si vous voulez pouvoir comparer ces différents solveurs NLP pour un même problème, vous pouvez utiliser RobOptim .
Même si RobOptim a été initialement développé avec des problèmes d'optimisation robotique à l'esprit, il convient à tous les problèmes d'optimisation non linéaire. Il fournit une interface C ++ simple avec des plugins pour plusieurs solveurs NLP (par exemple Ipopt, NAG). Si vous ne pouvez pas fournir de dégradés, le calcul des différences finies peut être effectué automatiquement.
C'est open source, vous pouvez donc consulter le code source sur GitHub: https://github.com/roboptim/
Remarque: je suis l'un des développeurs de ce projet.
la source
Voici une liste partielle des packages d'optimisation contraints par PDE.
Dolfin Adjoint fait partie de FEniCS FEM:
http://dolfin-adjoint.org/
ROL, MOOCHO, Sundance font partie de Trilinos:
https://github.com/trilinos/trilinos/tree/master/packages/rol/
https://github.com/trilinos/trilinos/tree/master/packages/Sundance/
http://trilinos.org/packages/moocho/
Exemple PYOMO pour l'optimisation contrainte par PDE:
https://software.sandia.gov/trac/pyomo/browser/pyomo/trunk/examples/dae
Le manuel TAO donne des exemples de résolution de problèmes d'optimisation contraints par PDE:
http://www.mcs.anl.gov/petsc/petsc-3.5/docs/tao_manual.pdf
la source
Les packages APM MATLAB et APM Python peuvent résoudre à grande échelle (plus de 100 000 variables) des systèmes d'équations algébriques différentielles à nombres mixtes entiers. Le logiciel est disponible en tant que service Web pour une utilisation commerciale ou académique. Si vous résolvez un système PDE, vous pouvez discrétiser une fois pour le mettre sous forme DAE ou ODE pour le mettre dans le langage de modélisation APMonitor. Le langage de modélisation utilise les solveurs APOPT , BPOPT, IPOPT, SNOPT et MINOS.
la source