Umgang mit Einschränkungen der Normungleichheit

8


Ich möchte die (konvexe) Optimierungsaufgabe lösen:

maxr,zr

rxixiTz0i=1,,N
r 0z1
r0

r ist ein Skalar, z ist ein Vektor, die xi sind Vektoren derselben Dimension und ist die einfache eukl. Norm. Man kann davon ausgehen, dass der realisierbare Bereich nicht leer ist.

Gibt es eine einfache Möglichkeit, dies zu lösen? Ich denke, das sollte einfach sein, denn ohne die Einschränkung z1 ist dies nur ein lineares Programm. Bevor Sie sich auf Softwarepakete beziehen, können Sie einen Hinweis auf den allgemeinen Ansatz geben, der für diese Art von Aufgabe nützlich ist?
Danke DG

dgray
quelle

Antworten:

3

Sie haben ein paar Möglichkeiten, je nachdem, wie wichtig es ist, dass Sie die euklidische Norm von .z

  1. Verwenden Sie Ihre Formulierung so wie sie ist, mit einer kleinen Änderung:

    r x i- x T i z 0maxr,zr
    unterliegt den folgenden zwei Einschränkungen
    z T z 1 r 0rxixiTz0i=1,,N
    zTz1
    r0

    Dieses Problem ist ein Programm mit quadratischen Einschränkungen, für das es viele schnelle Löser gibt, wie z. B. CPLEX und Gurobi. Dieses spezielle Programm ist auch ein Kegelprogramm zweiter Ordnung, ein semidefinites Programm und ein konvexes nichtlineares Programm, sodass Sie auch einen dieser Löser verwenden können. Der Grund, warum ich die euklidische Normbedingung durch ein Punktprodukt ersetzt habe, ist, dass die beiden Einschränkungen äquivalent sind, die letztere jedoch differenzierbar ist, während die erstere dies nicht ist. Nicht differenzierbare Funktionen erfordern teurere Algorithmen, und für dieses Problem ist diese Art von Maschinen nicht erforderlich. Vermeiden Sie sie daher am besten.

  2. Ändern Sie die Norm von . Die 1-Norm und die Unendlichkeitsnorm sind beide lineare Funktionen der Elemente von . Wenn Sie die euklidische Norm in Ihrer Formulierung durch eine dieser Normen ersetzen, erhalten Sie ein lineares Programm, für das die besten Löser in der Regel kommerziell sind (Gurobi, CPLEX) ), aber langsamere freie Löser existieren (GLPK, Löser in der COIN-OR-Suite). Die Verwendung der 1-Norm bedeutet, dass jede Lösung für diese Formulierung auch eine praktikable Lösung Ihrer aktuellen Formulierung wäre (dh die Verwendung der 1-Norm würde eine Einschränkung Ihrer aktuellen Formulierung ergeben). Die Verwendung der Unendlichkeitsnorm bedeutet, dass jede Lösung für Ihre aktuelle Formulierung auch in der Unendlichkeitsnormformulierung möglich wäre (dh die Verwendung der Unendlichkeitsnorm würde zu einer Lockerung Ihrer aktuellen Formulierung führen).zz

Obwohl es stimmt, dass lineare Programmierlöser sehr effizient sind, würde ich Option 1 auswählen, da quadratisch beschränkte Programmierlöser auch sehr effizient sind (im Vergleich zu konvexen Programmierlösern und anderen Arten nichtlinearer Programmierlöser) und große Formulierungen lösen können (at mindestens Hunderttausende von Entscheidungsvariablen, das letzte Mal, als ich mir die Literatur angesehen habe). Sofern Ihre Formulierung nicht erstaunlich groß war, sollten Sie einen quadratisch beschränkten Programmierlöser in Serie verwenden und die Norm in Ihrer Formulierung nicht ändern müssen, es sei denn, Sie müssen dies unbedingt tun.

Eine letzte Bemerkung: Ich würde die Vektoren vor dem Aufbau Ihrer Formulierung so skalieren , dass sie alle eine Einheitsnorm haben, was wahrscheinlich bei der Konditionierung Ihrer Formulierung hilft, wenn Sie sie numerisch lösen. Es ist ein weiterer Trick, der Sie praktisch nichts kostet, Sie aber vor numerischen Schwierigkeiten schützt.xi

Geoff Oxberry
quelle
Sie sollten dies nicht als semidefinites Programm bezeichnen. Es ist ein quadratisch eingeschränktes Programm oder etwas allgemeiner ein Kegelprogramm zweiter Ordnung. Das Nennen eines semidefiniten Programms wäre vergleichbar mit dem Nennen eines linearen Programms eines Kegelprogramms zweiter Ordnung (nach dem linearen Programm der Klassen - quadratisch beschränktes Programm - Kegelprogramm zweiter Ordnung - semidefinites Programm)
Johan Löfberg
Sie haben Recht, dass es besser wäre, es als QP zu bezeichnen. Aus irgendeinem Grund sah ich einen Gramian (sogar einen kleinen) und sprang auf das Muster.
Geoff Oxberry
Ich denke, ein quadratisches Programm sendet die falschen Signale. Es ist normalerweise auf Probleme mit quadratischen objektiven und linearen Einschränkungen beschränkt. quadratisch eingeschränktes Problem oder, vielleicht am häufigsten, aber etwas allgemeiner als das Problem hier, ein Kegelprogramm zweiter Ordnung.
Johan Löfberg
1

Wie wir in Geoffs Antwort sehen, ist dies ein sehr einfaches quadratisch beschränktes Problem oder allgemeiner ein Kegelprogramm zweiter Ordnung. Wenn Sie keine extremen Leistungsanforderungen oder enormen Abmessungen haben, funktioniert die Lösung mit einem nichtlinearen Standardlöser in der quadratischen Form oder mit einem SOCP-Löser in der Normformulierung einwandfrei fein.z 1zTz1z1

Wenn Sie die Leistung verbessern müssen, gibt es Methoden, um die Einzelkegelfunktion auszunutzen. Hier ist ein Beispiel

SIAM J. Optim., 17 (2), 459–484. (26 Seiten) Eine aktive Setzmethode für Einzelkegelprogramme zweiter Ordnung E. Erdougan und G. Iyengar

Ich möchte darauf hinweisen, dass das Ersetzen der Norm durch eine 1-Norm wahrscheinlich nicht gut funktioniert. Die quadratische Norm hat ihren Ursprung im geometrischen Hintergrund dieses Problems (was ich als Finden eines Vektors interpretiere, der den kleinsten Winkel zu einem gegebenen Satz von Vektoren hat).

Interessanterweise scheint eine QP-Annäherung des Problems sehr gut zu funktionieren. Entfernen Sie die quadratische Einschränkung und fügen Sie dem Ziel stattdessen eine Strafe . Es würde mich nicht wundern, wenn es möglich ist, etwas darüber zu beweisen.αzTz

Im folgenden Code, der mit YALMIP (Disclaimer, von mir entwickelt) in MATLAB implementiert wurde und CPLEX als Löser verwendet, liegt der durchschnittliche Abstand zwischen dem wahren und dem der mit den QP-Heuristiken berechnet wurde, in der Größenordnung von , während der Abstand zur Lösung von der LP-Formulierung (1-Norm) in der Größenordnung von .z 10 - 6 10 - 1zz106101

z = sdpvar(5,1);
r = sdpvar(1);

err1 = [];
err2 = [];
for i = 1:1000
    X = randn(5,10);
    Con = [r*sqrt(sum(X.^2,1)) <= z'*X,norm(z,2) <= 1]
    sol = solvesdp(Con,-r)
    if sol.problem == 0 & double(r)>1e-3
        zSOCP = double(z);
        Con = [r*sqrt(sum(X.^2,1)) <= z'*X];
        sol = solvesdp(Con,-r+0.001*z'*z);
        zQP = double(z/norm(double(z)));
        err1 = [err1 norm(zQP-zSOCP)];
        Con = [r*sqrt(sum(X.^2,1)) <= z'*X, norm(z,1)<=1];
        sol = solvesdp(Con,-r);
        zLP = double(z/norm(double(z)));
        err2 = [err2 norm(zLP-zSOCP)];
    end
end

Schließlich könnte die Verwendung geometrischer Erkenntnisse zu einem viel besseren Ansatz zur Lösung dieses Problems führen. Sie suchen im Wesentlichen nach einem besonders definierten Zentrum einer Reihe von Punkten auf der Einheitskugel.

Johan Löfberg
quelle