Problème de faisabilité de programmation linéaire avec des contraintes de positivité strictes

15

Il existe un système de contraintes linéaires Axb . Je souhaite trouver un vecteur strictement positif x>0 qui satisfait ces contraintes. Cela signifie que est requis pour chaque composant de . Comment puis-je utiliser un solveur LP pour trouver un vecteur aussi strictement positif (ou confirmer qu'aucun n'existe)? Je ne peux pas simplement introduire un autre système de contraintes , car l'égalité doit toujours être autorisée dans un LP - mais je peux utiliser le solveur LP plusieurs fois, avec des fonctions d'objectif changeantes. Je pense que je devrais utiliser la méthode variable variable, mais je ne sais pas comment.x i x xxi>0xixxx i > 0xxi>0

Sara
la source

Réponses:

15

Vous pouvez contourner le problème du choix d'un petit ϵ>0 en étant un peu plus ambitieux: essayez de trouver X tel que UNEXb et que la plus petite entrée de X soit la plus grande possible.

À cette fin, introduisez une nouvelle variable

y=[Xϵ]Rn+1
(si X était dans Rn ) et résolvez le problème suivant par un solveur LP
maxy[00 1]yst[UNE 0]ybet0[100-1010-101-1]y.

Il s'agit d'une reformulation du problème suivant:

maxϵstUNEXbetXϵ1.

Poignard
la source
bien fait, cela équivaut à une astuce d'un coauteur et je viens d'utiliser dans un article récent, et certainement supérieur à l'approche que j'ai suggérée.
Aron Ahmadia
D'accord. Bien joué, monsieur.
Geoff Oxberry du
Le problème reformulé peut avoir un objectif illimité dans les cas où la réponse au problème d'origine est triviale. Par exemple, si le système de contraintes est juste . C'est très bien tant que vous vérifiez que le statut de retour de votre solveur lp est faisable, optimal ou illimité, ou que vous liez explicitement le ϵ . X-1ϵ
David Nehme
@DavidNehme: On peut ajouter la contrainte pour obtenir un objectif borné. yn+11
Arnold Neumaier
5

Pour un problème de faisabilité LP, je n'utiliserais pas de simplex standard. Les algorithmes simplex primaux (ou doubles) standard ne visiteront que les sommets de l'ensemble faisable des problèmes primaux (ou doubles).

Soit l'ensemble faisable du problème que vous voulez réellement résoudre , et supposez plutôt que vous deviez résoudre le problème ( F ε ):F={x:Axb,x>0}Fε

minx0s.t.Axbxε1.

L'approximant le plus proche du problème que vous souhaitez résoudre est , qui admet un peu trop de points. Le problème est que la frontière de l'orthant positif (c'est-à-dire l'ensemble B = { x : x0 , i : x i = 0 } pourrait constituer une partie de la frontière de l'ensemble réalisable de F 0. Nous tiens à exclure ces points. Une façon de le faire est de faire ce que Aron a suggéré, qui est de définir εF0B={x:x0,i:xi=0}F0εà une petite valeur positive, puis utilisez n'importe quel algorithme LP standard. Cette stratégie est bonne et fonctionnera probablement dans une grande variété de situations. Cependant, il échouera si est irréalisable. Nous savons que F 0F F ε pour tout ε > 0 (pour abuser de la notation et se référer à un ensemble faisable par son problème correspondant), et il est possible que même si vous choisissez de petites valeurs positives de ε , le solveur LP indiquera que votre LP est irréalisable.FεF0FFεε>0ε

Pour un solveur LP, j'utiliser tout algorithme de point intérieur pour LPs qui commence par un point réalisable et séjours possibles, ce qui est une autre façon d'exclure des points en . Vous n'avez pas besoin de fournir un point réalisable à ces algorithmes; les solveurs standard le feront pour vous. Des méthodes telles que la mise à l'échelle affine, la réduction du potentiel et les méthodes de barrière mettent en place des LP auxiliaires qui trouveront des solutions réalisables, et les itérations de ces algorithmes traversent l'intérieur de la région réalisable. Vous n'avez besoin de localiser qu'un seul point dans votre région réalisable, donc tant que les problèmes auxiliaires utilisés par les solveurs LP localisent un point faisable pour votre problème, et que ce point faisable est strictement positif, vous devriez être d'accord. Si la résolution de F ε échoue pour de petites valeurs positives de εBFεε, vous pouvez toujours utiliser ces méthodes pour localiser un point réalisable strictement positif dans .F0

N'utilisez pas simplex, cependant, car il n'explorera que les sommets de , ce qui est exactement ce que vous voulez éviter de faire.Fε

Geoff Oxberry
la source
4

Les problèmes de faisabilité sont un jeu un peu plus délicat que les problèmes linéaires généraux que vous avez notés. Si vous résolvez approximativement (en utilisant une représentation en virgule flottante du système d'équations et de contraintes), il est légitime d'exiger , où ϵ est une très petite valeur numérique, suffisamment grande pour garantir que x i réellement vit en + , mais suffisamment petit pour qu'une solution à la frontière ne soit pas envisagée.Xje> =ϵϵXje+

Vous devrez peut-être ajuster , et votre solution sera qualifiée pour "dans un facteur de ϵ ", mais cela suffit pour de nombreuses situations.ϵϵ

Aron Ahmadia
la source
2

La réponse donnée par aeismail doit être lue attentivement, en ce qui concerne le lp

max(X1+X2)

st

X1+X21

X1,X20

Il a des solutions et ( 0 , 1 ) ainsi que d'autres (dégénérées). La généralité de la question implique que ces cas doivent également être traités.(1,0)(0,1)

Puisque vous pouvez choisir votre fonction objective, vous pouvez essayer de la modifier de manière itérative. Par exemple, commencez avec tous les coefficients pour toutes les variables égales à un, vérifiez si vous obtenez une solution appropriée. Si une variable est nulle, augmentez son coefficient et recommencez ...

Bien que je ne puisse pas donner une preuve mathématique que cela fonctionne (ou une procédure bien définie comment modifier la fonction objectif). J'espère que ça aide :)

Dan
la source
Cependant, si vous avez un grand nombre de solutions dégénérées, comment gérez-vous cela numériquement? Est-ce que pratiquement aucun solveur numérique ne lance un avertissement (ou pire) sur la résolution de ce problème?
aeismail
Non, ils ne le feront pas; ils vont juste retourner la première solution optimale rencontrée. La façon dont vous continueriez à générer des solutions consiste à ajouter des plans de coupe (ou d'autres contraintes) qui excluent les solutions optimales précédemment calculées. Dans ce cas, l'ajout de tels plans de coupe vous permettrait de renvoyer une approximation discrète de l'ensemble infini de solutions optimales.
Geoff Oxberry
Je considérerais cela comme une décision de programmation étrange; pourquoi ne voudriez-vous pas dire à l'utilisateur que la fonction objectif faisait quelque chose de bizarre dans le voisinage de la solution signalée? Pour un solveur non linéaire, je pouvais voir qu'il y avait un problème avec la détermination de ce qui se passait; mais cela ne devrait-il pas être plus facile à dire avec un système linéaire?
aeismail
Je devrais réfléchir à la façon dont on pourrait détecter la dégénérescence en construisant réellement des problèmes, mais généralement, les utilisateurs veulent une solution optimale, donc les informations les plus importantes pour un LP sont de renvoyer si la solution est optimale, faisable (mais pas optimale), irréalisable ou illimité. (Ces statuts sont, en fait, ce qu'un solveur comme CPLEX retournerait.) La dégénérescence est principalement un problème théorique; la seule raison pour laquelle il serait discuté dans un contexte numérique est soit dans la conception d'algorithmes soit dans la pratique, pour noter que la dégénérescence ralentit généralement un solveur.
Geoff Oxberry