Supposer
où est une matrice n \ fois n symétrique , et remodèle en un vecteur unidimensionnel avec entrées.
La partie du programme ci-dessus qui me pose des problèmes est le . (Restreindre les solutions aux matrices symétriques non négatives semble être simple.)
Merci d'avance pour toute aide ou référence!
Réponses:
Edit: Essayons à nouveau cette explication, cette fois quand je suis plus éveillé.
Il y a trois gros problèmes avec la formulation (par ordre de gravité):
Pas de reformulation évidente lisse / convexe / linéaire
Tout d'abord, il n'y a pas de reformulation standard et évidente de chaque contrainte . La suggestion d'Aron s'applique à la contrainte la plus courante , dans laquelle une contrainte comme est remplacée par les deux inégalités équivalentes suivantes:La reformulation n'est pas idéale, chaque contrainte a été remplacée par contraintes linéaires, mais elle convertit un programme non linéaire non lisse en un programme linéaire, qui est des ordres de grandeur plus rapide à résoudre.min U i j ≤ min k { U i k , U k j } U i j ≤ U i k ,max min
Wolfgang signale qu'il pourrait être possible (il n'inclut pas de preuve) de reformuler les contraintes afin qu'elles soient linéaires et lisses en ajoutant des variables lentes. Une variable slack doit être ajoutée pour chaque contrainte dans la formulation d'origine, ce qui signifie que nous ajoutons contraintes dans cette reformulation. De plus, chaque contrainte est remplacée par (ou plus) contraintes linéaires. Le vrai tueur est que la non-douceur est déplacée des contraintes vers l'objectif, de sorte que la formulation de Wolfgang donne toujours un programme non linéaire non lisse.max n 2 max 2 nmax max n2 max 2n
Il n'y a pas de reformulation standard des contraintes dans un problème de minimisation que je connaisse, après avoir vérifié mon manuel de programmation linéaire et fait une recherche documentaire. Cela ne signifie pas qu'une telle reformulation n'existe pas; cela signifie simplement que je ne l'ai pas rencontré. Si je devais deviner, je dirais qu'il n'existe pas de formulation LP.max
Non-douceur
Dans ce contexte, l'absence de douceur signifie qu'au moins une des fonctions de la formulation (l'objectif ou les contraintes) n'est pas deux fois différenciable en continu. Les fonctions non lisses de cette formulation sont les fonctions .max
L'absence de douceur est un énorme problème car:
Étant donné que les fonctions ne sont même pas différenciables en continu, vous ne pouvez même pas utiliser sans difficulté les méthodes traditionnelles de descente de gradient. Les algorithmes de programmation non linéaires non lisses sont plus lents que leurs homologues lisses.max
Non-convexité possible
Votre problème pourrait être non convexe, car sous "forme standard" pour les programmes non linéaires (c'est-à-dire, exprimer toutes les contraintes sous la forme ), les contraintes gênantes dans votre formulation sontg(x)≤0
Ces fonctions sont concaves.
Preuve: Dans ce cas, les fonctions et sont toutes deux convexes. La somme des fonctions convexes est convexe, et la multiplication d'une fonction convexe par -1 entraîne une fonction concave. (QED.) max k { U i k , U k j }- Uje j maxk{ Uje k, Uk j}
Comme le souligne Tim, ce n'est pas parce que n'est pas convexe que votre problème est réellement non convexe, mais si vous essayez de résoudre un problème d'optimisation à l'optimalité globale, vous ne pouvez garantir qu'un solveur d'optimisation convexe retourner un optimum global si votre problème est convexe. Si vous voulez vraiment un optimum global, il vous appartiendrait de déterminer si votre ensemble réalisable est convexe (ou non). En l'absence de telles informations, vous devez supposer que votre problème peut être non convexe et utiliser des algorithmes qui ne reposent pas sur des informations de convexité. Même alors, la non-douceur et l'absence d'une bonne reformulation sont des problèmes beaucoup plus importants.g
Options pour résoudre le problème
Se contenter de trouver éventuellement une solution réalisable. Dans ce cas, faites ce qu'Aron a dit et remplacez par qui peuvent ensuite être ré-exprimés en deux inégalités distinctes en utilisant une reformulation LP standard. Le problème résultant sera une restriction LP du problème que vous souhaitez résoudre; il devrait résoudre rapidement par rapport à votre problème d'origine, et s'il a une solution, cette solution sera réalisable pour votre problème d'origine, et sa valeur de fonction objective sera une borne inférieure sur la valeur de fonction objective optimale de votre problème d'origine.U i j ≤ min
Tentez votre chance sur votre formulation avec un solveur de bundle pour les programmes non lisses. Je n'ai pas beaucoup d'expérience avec ces types de solveurs. (Un de mes collègues les utilise dans ses recherches.) Ils sont probablement lents, car ils ne peuvent pas utiliser d'informations dérivées. (Je pense qu'ils utilisent à la place les informations de dégradé généralisées du sous-gradué ou de Clarke.) Il est également peu probable que vous soyez en mesure de résoudre de grandes instances de problème avec un solveur de bundle.
la source
La solution à votre question est .−∞
Soit Depuis et vos contraintes sont linéaires en , un multiple positif de satisfait aux contraintes. Par conséquent, .A⋅vec(U)Ut±UminV(A
la source
Afin de formuler les contraintes , nous créons variables binaires , , . Soit la borne de la variable , il suffit alors d'ajouter les contraintes suivantes:n b i ∈ { 0 , 1 } 1 ≤f≤max{f1,f2,...,fn} n bi∈{0,1} M f1≤i≤n M f
1)f≤fi+(1−bi)M,∀i
2)∑ibi=1
Normalement, posons si nous pouvons estimer la valeur de .f iM:=maxifi−minifi fi
la source
Vous ne pouvez pas introduire une variable slack? Donc, pour reformuler la contrainte écrivez-la comme suit: Cela aura une solution irréalisable par rapport au problème d'origine si vous choisissez s = infini. Mais je suis presque sûr que vous pouvez montrer que si vous ajoutez un terme à la fonction objectif (c'est-à-dire que vous voulez avoir aussi petit que possible, de préférence zéro) et suffisamment grand, vous obtiendrez alors une solution réalisable si le problème d'origine avait des solutions réalisables avec une valeur objective inférieure à l'infini.
(Une preuve irait dans le sens de montrer que si et si , alors la solution est irréalisable; en d'autres termes, est une mesure d'infaisabilité par rapport à le problème d'origine. Si le problème est stable, il devrait y avoir une amélioration finie de la valeur de la fonction objectif pour une violation finie de la faisabilité. Si vous choisissez c plus grand que le rapport entre le changement de la valeur objective et la violation de la faisabilité, la modification la fonction objective se développerait pour les problèmes qui vont dans la région infaisable.)si>=max(ai) xi=si si−max(ai)
la source
Je ne trouve pas le bouton de commentaire ...
Comme Geoff l'a souligné, il s'agit d'une fonction de contrainte concave. Cependant, peu importe si la fonction elle-même est concave ou non. Les fonctions concaves sous contraintes linéaires peuvent être des ensembles convexes (par exemple ).log(x)<5
S'il s'agit d'un ensemble convexe, vous pouvez effectuer une descente de gradient sur votre fonction objectif, en utilisant quelque chose comme Dykstra's_projection_algorithm pour projeter de nouveau sur l'espace des contraintes.
la source
Y a-t-il d'autres contraintes d'inégalité qui ne sont pas mentionnées? Comme indiqué, le problème est de minimiser une fonction linéaire sur un cône, de sorte que la valeur optimale est toujours soit ou .−∞ 0
Même avec la contrainte , le problème se réduit à un problème de décision discret. Considérez la fonction linéaire comme correspondant aux poids positifs / négatifs des bords du graphique complet sur sommets. S'il existe un graphe de diamètre 2 reliant tous les sommets à la somme de ses poids strictement négatifs, alors la valeur optimale est , sinon la valeur optimale est .U≥0 A n −∞ 0
Un rapide croquis sur la façon de le prouver. Notons tout d'abord que si , alors implique . Ainsi, les inégalités impliquent que pour chaque triple , exactement l'un des éléments suivants doit être vrai:c ≤a≤b≤c c≤max(a,b) b=c i,j,k
Donc, si vous fixez un seuil et formez un graphe avec une arête où , alors tous les 3 sommets doivent avoir exactement 0,2, ou 3 arêtes les reliant. Donc, si , alors pour chaque autre sommet , nous devons avoir soit ou . Donc si le graphe a des arêtes, il doit être de diamètre 2.G ( t ) U i j = t U i j = U j k = t ℓ U j ℓ = t U i ℓ = U k ℓ = t G ( t )t G(t) Uij=t Uij=Ujk=t ℓ Ujℓ=t Uiℓ=Ukℓ=t G(t)
la source