Ich habe mich lange vorbereitet und Material gesammelt, ich hoffe, diesmal ist es besser geworden. Ich widme diesen Artikel den grundlegenden Methoden zur Lösung mathematischer Optimierungsprobleme mit EinschrÀnkungen. Wenn Sie also gehört haben, dass die Simplex-Methode eine
sehr wichtige Methode ist, aber immer noch nicht wissen, was sie bewirkt, wird Ihnen dieser Artikel wahrscheinlich helfen.
PS Der Artikel enthĂ€lt mathematische Formeln, die vom Makro-Editor hinzugefĂŒgt wurden. Sie sagen, dass sie manchmal nicht angezeigt werden. Es gibt auch viele Animationen im GIF-Format.
PrÀambel
Das Problem der mathematischen Optimierung ist ein Problem der Form âFind in the set
mathcalK das Element
xâ so dass fĂŒr alle
x von
mathcalK durchgefĂŒhrt
f(xâ) leqf(x) ", Was in der wissenschaftlichen Literatur wahrscheinlich so etwas geschrieben ist
\ begin {array} {rl} \ mbox {minimieren} & f (x) \\ \ mbox {bereitgestellt} & x \ in \ mathcal {K}. \ end {array}
\ begin {array} {rl} \ mbox {minimieren} & f (x) \\ \ mbox {bereitgestellt} & x \ in \ mathcal {K}. \ end {array}
Historisch gesehen funktionieren beliebte Methoden wie der Gradientenabstieg oder die Newtonsche Methode nur in linearen RĂ€umen (und vorzugsweise beispielsweise in einfachen)
mathbbRn ) In der Praxis gibt es hĂ€ufig Probleme, bei denen Sie ein Minimum finden mĂŒssen, das nicht im linearen Raum liegt. Zum Beispiel mĂŒssen Sie das Minimum einer Funktion fĂŒr solche Vektoren finden
x=(x1, ldots,xn) fĂŒr welche
xi geq0 Dies kann daran liegen, dass
xi bezeichnen die LĂ€ngen von Objekten. Oder zum Beispiel, wenn
x Stellen Sie die Koordinaten eines Punktes dar, der nicht gröĂer als sein sollte
r von
y d.h.
|xây | leqr . FĂŒr solche Probleme ist der Gradientenabstieg oder die Newton-Methode nicht mehr direkt anwendbar. Es stellte sich heraus, dass eine sehr groĂe Klasse von Optimierungsproblemen zweckmĂ€Ăigerweise durch âEinschrĂ€nkungenâ abgedeckt ist, Ă€hnlich den oben beschriebenen. Mit anderen Worten ist es zweckmĂ€Ăig, die Menge darzustellen
mathcalK in Form eines Systems von Gleichheiten und Ungleichheiten
beginarraylgi(x) leq0, 1 leqi leqm,hi(x)=0, 1 leqi leqk. endarray
Minimierungsprobleme ĂŒber einen Bereich des Formulars
mathbbRn Daher nannten sie sie willkĂŒrlich "uneingeschrĂ€nktes Problem" und Probleme ĂŒber Mengen, die durch Mengen von Gleichheiten und Ungleichheiten definiert sind - "beschrĂ€nkte Probleme".
Technisch absolut jede Menge
mathcalK kann als einzelne Gleichheit oder Ungleichung unter Verwendung der
Indikatorfunktion dargestellt werden , die definiert ist als
I_ \ mathcal {K} (x) = \ begin {FĂ€lle} 0, & x \ notin \ mathcal {K} \\ 1, & x \ in \ mathcal {K}, \ end {FĂ€lle}
Eine solche Funktion hat jedoch keine verschiedenen nĂŒtzlichen Eigenschaften (KonvexitĂ€t, Differenzierbarkeit usw.). Man kann sich jedoch oft vorstellen
mathcalK in Form mehrerer Gleichheiten und Ungleichungen, von denen jede solche Eigenschaften hat. Die Grundtheorie wird unter dem Fall zusammengefasst
\ begin {array} {rl} \ mbox {minimieren} & f (x) \\ \ mbox {bereitgestellt} & g_i (x) \ leq 0, ~ 1 \ leq i \ leq m \\ & Ax = b , \ end {array}
wo
f,gi - konvexe (aber nicht unbedingt differenzierbare) Funktionen,
A - Matrix. Um zu demonstrieren, wie die Methoden funktionieren, werde ich zwei Beispiele verwenden:
- Lineare Programmieraufgabe
$$ display $$ \ begin {array} {rl} \ mbox {minimieren} & -2 & x ~~~ - & y \\ \ mbox {bereitgestellt} & -1.0 & ~ x -0.1 & ~ y \ leq -1.0 \ \ & -1,0 & ~ x + ~ 0,6 & ~ y \ leq -1,0 \\ & -0,2 & ~ x + ~ 1,5 & ~ y \ leq -0,2 \\ & ~ 0,7 & ~ x + ~ 0,7 & ~ y \ leq 0,7 \\ & ~ 2,0 & ~ x -0,2 & ~ y \ leq 2,0 \\ & ~ 0,5 & ~ x -1,0 & ~ y \ leq 0,5 \\ & -1,0 & ~ x -1,5 & ~ y \ leq - 1.0 \\ \ end {array} $$ display $$
Im Wesentlichen besteht dieses Problem darin, den am weitesten entfernten Punkt des Polygons in der Richtung (2, 1) zu finden. Die Lösung des Problems ist der Punkt (4.7, 3.5) - der ârichtigsteâ im Polygon. Aber das Polygon selbst

- Minimierung einer quadratischen Funktion mit einer quadratischen Bedingung
\ begin {array} {rl} \ mbox {minimieren} & 0,7 (x - y) ^ 2 + 0,1 (x + y) ^ 2 \\ \ mbox {bereitgestellt} & (x-4) ^ 2 + ( y-6) ^ 2 \ leq 9 \ end {array}
Simplex-Methode
Von allen Methoden, die ich in diesem Test behandele, ist die Simplex-Methode wahrscheinlich die bekannteste. Die Methode wurde speziell fĂŒr die lineare Programmierung entwickelt und ist die einzige, die in einer endlichen Anzahl von Schritten die exakte Lösung erreicht (vorausgesetzt, die exakte Arithmetik wird fĂŒr Berechnungen verwendet, in der Praxis ist dies normalerweise nicht der Fall, aber theoretisch ist dies möglich). Die Idee einer Simplex-Methode besteht aus zwei Teilen:
- Systeme linearer Ungleichungen und Gleichheiten definieren mehrdimensionale konvexe Polyeder (Polytope). Im eindimensionalen Fall ist dies ein Punkt, ein Strahl oder ein Segment, im zweidimensionalen Fall ein konvexes Polygon, im dreidimensionalen Fall ein konvexes Polyeder. Das Minimieren der linearen Funktion bedeutet im Wesentlichen, den âam weitesten entferntenâ Punkt in einer bestimmten Richtung zu finden. Ich denke, die Intuition sollte darauf hinweisen, dass dieser am weitesten entfernte Punkt ein bestimmter Höhepunkt sein sollte, und das ist in der Tat so. Im Allgemeinen fĂŒr ein System aus m Ungleichungen in n -dimensionaler Raum Ein Scheitelpunkt ist ein Punkt, der ein System erfĂŒllt, fĂŒr das genau n aus diesen Ungleichungen werden Gleichheiten (vorausgesetzt, unter den Ungleichungen gibt es keine Ăquivalente). Es gibt immer eine begrenzte Anzahl solcher Punkte, obwohl es viele davon geben kann.
- Jetzt haben wir eine endliche Menge von Punkten. Im Allgemeinen können Sie sie einfach auswĂ€hlen und sortieren, dh so etwas tun: fĂŒr jede Teilmenge von n Ungleichungen, lösen Sie das System linearer Gleichungen, das aus den gewĂ€hlten Ungleichungen zusammengestellt wurde, ĂŒberprĂŒfen Sie, ob die Lösung zum ursprĂŒnglichen Ungleichungssystem passt, und vergleichen Sie sie mit anderen solchen Punkten. Dies ist eine ziemlich einfache ineffiziente, aber funktionierende Methode. Die Simplex-Methode bewegt sich anstelle der Iteration entlang der Kanten von oben nach oben, sodass sich die Werte der Zielfunktion verbessern. Es stellt sich heraus, dass ein Scheitelpunkt, der keine âNachbarnâ hat, in denen die Werte der Funktion besser sind, optimal ist.
Die Simplex-Methode ist iterativ, dh sie verbessert die Lösung nacheinander geringfĂŒgig. FĂŒr solche Methoden mĂŒssen Sie irgendwo beginnen, im allgemeinen Fall erfolgt dies durch Lösen eines Hilfsproblems
\ begin {array} {rl} \ mbox {minimieren} & s \\ \ mbox {bereitgestellt} & g_i (x) \ leq s, ~ 1 \ leq i \ leq m \\ \ end {array}
Wenn, um dieses Problem zu lösen
xâ,sâââ so dass
sâ leq0 dann ausgefĂŒhrt
gi(xâ) leqs leq0 Andernfalls wird das ursprĂŒngliche Problem im Allgemeinen auf einem leeren Satz angegeben. Um das Hilfsproblem zu lösen, können Sie auch die Simplex-Methode verwenden, aber der Ausgangspunkt kann genommen werden
s= maxigi(x) mit willkĂŒrlich
x . Das Finden des Startpunkts kann willkĂŒrlich als die erste Phase des Verfahrens bezeichnet werden, das Finden der Lösung fĂŒr das ursprĂŒngliche Problem kann willkĂŒrlich als die zweite Phase des Verfahrens bezeichnet werden.
Die Flugbahn der Zwei-Phasen-Simplex-MethodeDie Trajektorie wurde mit scipy.optimize.linprog generiert.
Projektiver Gradientenabstieg
Ăber den Gradientenabstieg habe ich kĂŒrzlich einen separaten
Artikel geschrieben, in dem ich diese Methode auch kurz beschrieben habe. Jetzt ist diese Methode ziemlich lebhaft, wird aber im Rahmen eines allgemeineren
proximalen Gradientenabfalls untersucht . Die Idee der Methode ist ziemlich banal: Wenn wir einen Gradientenabstieg auf eine konvexe Funktion anwenden
f Dann erhalten wir mit der richtigen Auswahl der Parameter ein globales Minimum
f . Wenn nach jedem Schritt des Gradientenabfalls der erhaltene Punkt korrigiert wird, wird stattdessen seine Projektion auf eine geschlossene konvexe Menge vorgenommen
mathcalK Als Ergebnis erhalten wir das Minimum der Funktion
f auf
mathcalK . Nun, oder formal gesehen, ist der projektive Gradientenabstieg ein Algorithmus, der sequentiell berechnet
beginFĂ€llexk+1=ykâ alphak nablaf(yk)yk+1=P mathcalK(xk+1), EndeFĂ€lle
wo
P mathcalK(x)= mboxargminy in mathcalK |xây |.
Die letzte Gleichheit definiert den Standardoperator der Projektion auf die Menge, tatsÀchlich ist es eine Funktion, die gemÀà dem Punkt
x berechnet den nÀchstgelegenen Punkt zur Menge
mathcalK . Hier spielt die Rolle der Distanz
| ldots | Es ist erwÀhnenswert, dass hier jede
Norm verwendet werden kann. Projektionen mit unterschiedlichen Normen können jedoch unterschiedlich sein!
In der Praxis wird der projektive Gradientenabstieg nur in besonderen FĂ€llen verwendet. Das Hauptproblem besteht darin, dass die Berechnung der Projektion noch schwieriger sein kann als die ursprĂŒngliche, und sie muss viele Male berechnet werden. Der hĂ€ufigste Fall, fĂŒr den es zweckmĂ€Ăig ist, einen projektiven Gradientenabstieg zu verwenden, sind "Box-EinschrĂ€nkungen", die die Form haben
elli leqxi leqri, 1 leqi leqn.
In diesem Fall wird die Projektion fĂŒr jede Koordinate sehr einfach berechnet
[P _ {\ mathcal {K}} (x)] _ i = \ begin {FĂ€lle} r_i, & x_i> r_i \\ \ ell_i, & x_i <\ ell_i \\ x_i, & x_i \ in [\ ell_i, r_i ]. \ end {FĂ€lle}
Die Verwendung des projektiven Gradientenabfalls fĂŒr lineare Programmierprobleme ist völlig bedeutungslos. Wenn Sie dies jedoch tun, sieht es ungefĂ€hr so ââaus
Projektive Gradientenabstiegstrajektorie fĂŒr ein lineares Programmierproblem Und hier ist die Flugbahn des projektiven Gradientenabfalls fĂŒr das zweite Problem, wenn
WĂ€hlen Sie eine groĂe Schrittweite und wenn
WĂ€hlen Sie eine kleine SchrittgröĂe Ellipsoid-Methode
Diese Methode ist insofern bemerkenswert, als sie der erste Polynomalgorithmus fĂŒr lineare Programmierprobleme ist und als mehrdimensionale Verallgemeinerung
der Halbierungsmethode angesehen werden kann . Ich werde mit einer allgemeineren
Methode zum Trennen der Hyperebene beginnen :
- Bei jedem Schritt der Methode gibt es einen Satz, der die Lösung des Problems enthÀlt.
- Bei jedem Schritt wird eine Hyperebene erstellt, wonach alle Punkte, die auf einer Seite der ausgewĂ€hlten Hyperebene liegen, aus der Menge entfernt werden und einige neue Punkte zu dieser Menge hinzugefĂŒgt werden können
Bei Optimierungsproblemen basiert die Konstruktion der "trennenden Hyperebene" auf der folgenden Ungleichung fĂŒr konvexe Funktionen
f(y) geqf(x)+ nablaf(x)T(yâx).
Wenn behoben
x dann fĂŒr eine konvexe Funktion
f halber Raum
nablaf(x)T(yâx) geq0 enthĂ€lt nur Punkte mit einem Wert, der nicht kleiner als an einem Punkt ist
x Das heiĂt, sie können abgeschnitten werden, da diese Punkte nicht besser sind als die, die wir bereits gefunden haben. Bei Problemen mit EinschrĂ€nkungen können Sie auch Punkte entfernen, die garantiert gegen eine der EinschrĂ€nkungen verstoĂen.
Die einfachste Version der Methode zum Trennen von Hyperebenen besteht darin, einfach HalbrĂ€ume abzuschneiden, ohne Punkte hinzuzufĂŒgen. Infolgedessen haben wir bei jedem Schritt ein bestimmtes Polyeder. Das Problem bei diesem Verfahren besteht darin, dass die Anzahl der FlĂ€chen des Polyeders wahrscheinlich von Schritt zu Schritt zunimmt. DarĂŒber hinaus kann es exponentiell wachsen.
Die Ellipsoidmethode speichert tatsĂ€chlich bei jedem Schritt ein Ellipsoid. Genauer gesagt wird nach dem Aufbau der Hyperebene ein Ellipsoid mit minimalem Volumen konstruiert, das einen der Teile des Originals enthĂ€lt. Dies kann durch HinzufĂŒgen neuer Punkte erreicht werden. Ein Ellipsoid kann immer wie folgt durch eine positive bestimmte Matrix und einen Vektor (Zentrum eines Ellipsoids) definiert werden
\ mathcal {E} (P, x) = \ {z ~ | ~ (z-x) ^ TP (z-x) \ leq 1 \}.
Die Konstruktion eines minimalen Ellipsoids im Volumen, das den Schnittpunkt des Halbraums und eines anderen Ellipsoids enthÀlt, kann unter Verwendung von
mĂ€Ăig umstĂ€ndlichen Formeln erfolgen . Leider war diese Methode in der Praxis immer noch so gut wie die Simplex-Methode oder die interne Punktmethode.
Aber eigentlich wie es funktioniert
und fĂŒr
quadratische Programmierung Inside Point-Methode
Diese Methode hat eine lange Entwicklungsgeschichte. Eine der ersten Voraussetzungen trat ungefÀhr zur gleichen Zeit auf, als die Simplex-Methode entwickelt wurde. Zu diesem Zeitpunkt war es jedoch noch nicht effektiv genug, um in der Praxis eingesetzt zu werden. SpÀter im Jahr 1984 wurde eine
Variante der Methode speziell fĂŒr die lineare Programmierung entwickelt, die sowohl in der Theorie als auch in der Praxis gut war. DarĂŒber hinaus ist die interne Punktmethode im Gegensatz zur Simplex-Methode nicht nur auf die lineare Programmierung beschrĂ€nkt, sondern jetzt der Hauptalgorithmus fĂŒr konvexe Optimierungsprobleme mit EinschrĂ€nkungen.
Die Grundidee der Methode besteht darin, die BeschrĂ€nkungen durch eine GeldbuĂe in Form der sogenannten
Barrierefunktion zu ersetzen. Funktion
F:Int mathcalK rightarrow mathbbR die
Barrierefunktion fĂŒr das Set genannt
mathcalK wenn
F(x) rightarrow+ infty mboxatx rightarrow teilweise mathcalK.
Hier
Int mathcalK - innen
mathcalK ,
teilweise mathcalK - Grenze
mathcalK . Anstelle des ursprĂŒnglichen Problems wird vorgeschlagen, das Problem zu lösen
mboxMinimierenumx varphi(x,t)=tf(x)+F(x).
F und
varphi nur auf der Innenseite gegeben
mathcalK (TatsÀchlich kommt hier der Name her), die Eigenschaft der Barriere stellt dies sicher
varphi Zumindest
x existiert. DarĂŒber hinaus desto mehr
t Je gröĂer die Wirkung
f . Unter vernĂŒnftigen Bedingungen können Sie dies erreichen, wenn Sie zielen
t bis unendlich dann das Minimum
varphi wird zur Lösung des ursprĂŒnglichen Problems konvergieren.
Wenn das Set
mathcalK als eine Reihe von Ungleichungen gegeben
gi(x) leq0, 1 leqi leqm dann ist die Standardwahl der Barrierefunktion die
logarithmische BarriereF(x)=â summi=1 ln(âgi(x)).
Mindestpunkte
xâ(t) die Funktionen
varphi(x,t) fĂŒr anders
t bildet eine Kurve, die ĂŒblicherweise als
zentraler Pfad bezeichnet wird. Die innere Punktmethode versucht sozusagen, diesem Pfad zu folgen. So sieht es aus
Beispiele fĂŒr lineare Programmierung
Das Analysezentrum ist gerecht
xâ(0) SchlieĂlich hat die interne Punktmethode selbst die folgende Form
- WÀhlen Sie eine anfÀngliche AnnÀherung x0 , t0>0
- WĂ€hlen Sie eine neue NĂ€herung mit der Newton-Methode
xk+1=xkâ[ nabla2x varphi(xk,tk)]â1 nablax varphi(xk,tk)
- Zum VergröĂern anklicken t
tk+1= alphatk, alpha>1
Die Verwendung der Newton-Methode ist hier sehr wichtig: Tatsache ist, dass mit der richtigen Wahl der Barrierefunktion der Schritt der Newton-Methode einen Punkt erzeugt
, der innerhalb unserer Menge bleibt , wir haben experimentiert, er gibt nicht immer in dieser Form aus. Und schlieĂlich die Flugbahn der internen Punktmethode
Lineare ProgrammieraufgabeDer springende schwarze Punkt ist
xâ(tk) d.h. Punkt, zu dem wir versuchen, uns dem Schritt der Newton-Methode im aktuellen Schritt zu nĂ€hern.
Quadratisches Programmierproblem