Primal-Duale Verfahren
Unterklasse der Innere-Punkte-Verfahren .
Lineares Programm in Standardform mit vollem Zeilenrang.
Duales Programm mit Schlupfvariablen :
max b ⊤ λ u.d.N. A ⊤ λ + s = c s ≥ 0 \begin{array}{ll}
\max & b^{\top} \lambda \\
\text { u.d.N. } & A^{\top} \lambda+s=c \\
& s \geq 0
\end{array} max u.d.N. b ⊤ λ A ⊤ λ + s = c s ≥ 0
mit KKT :
A x = b , A ⊤ λ + s = c , x i s i = 0 , i = 1 , … n x , s ≥ 0 \begin{aligned}
&A x=b, \\
&A^{\top} \lambda+s=c, \\
&x_{i} s_{i}=0, \quad i=1, \ldots n \\
&x, s \geq 0
\end{aligned} A x = b , A ⊤ λ + s = c , x i s i = 0 , i = 1 , … n x , s ≥ 0
Da wir wissen, dass die Zielfunktion konvex ist und die Nebenbedingungen affin-linear sind, ist ein Punkt, der die KKT Bedingungen erfüllt direkt ein globales Optimum.
Deswegen definieren wir eine Funktion über alle zulässigen Punkte und Lagrange-Multiplikatoren um genau diese KKT-Punkte zu finden:
F ( x , λ , s ) : = ( A ⊤ λ + s − c A x − b X S e ) F(x, \lambda, s):=\left(\begin{array}{c}
A^{\top} \lambda+s-c \\
A x-b \\
X S e
\end{array}\right) F ( x , λ , s ) := A ⊤ λ + s − c A x − b X S e
mit X = diag ( x 1 , … , x n ) , S = diag ( s 1 , … , s n ) und e = ( 1 , … , 1 ) ⊤ X=\operatorname{diag}\left(x_{1}, \ldots, x_{n}\right), S=\operatorname{diag}\left(s_{1}, \ldots, s_{n}\right) \text { und } e=(1, \ldots, 1)^{\top} X = diag ( x 1 , … , x n ) , S = diag ( s 1 , … , s n ) und e = ( 1 , … , 1 ) ⊤
Damit folgt für die KKT :
F ( x , λ , s ) = 0 x , s ≥ 0 \begin{aligned}
&F(x, \lambda, s)=0 \\
&x, s \geq 0
\end{aligned} F ( x , λ , s ) = 0 x , s ≥ 0
Allgemeines Vorgehen
Suchrichtung bestimmen → mit Newton Verfahren
Maß für den wünschenswertesten Punkt entlang der Suchrichtung → Dualitätsmaß
Neue Suchrichtung erhalten wir mit Jacobi Matrix basierend auf dem Newton Verfahren :
J F ( x , λ , s ) ( Δ x Δ λ Δ s ) = − F ( x , λ , s ) J_{F}(x, \lambda, s)\left(\begin{array}{c}
\Delta x \\
\Delta \lambda \\
\Delta s
\end{array}\right)=-F(x, \lambda, s) J F ( x , λ , s ) Δ x Δ λ Δ s = − F ( x , λ , s )
Wir verwenden r b = A x − b , r c = A ⊤ λ + s − c r_{b}=A x-b, \quad r_{c}=A^{\top} \lambda+s-c r b = A x − b , r c = A ⊤ λ + s − c
und schreiben somit:
( 0 A ⊤ I A 0 0 S 0 X ) ( Δ x Δ λ Δ s ) = ( − r c − r b − X S e ) \left(\begin{array}{ccc}
0 & A^{\top} & I \\
A & 0 & 0 \\
S & 0 & X
\end{array}\right)\left(\begin{array}{c}
\Delta x \\
\Delta \lambda \\
\Delta s
\end{array}\right)=\left(\begin{array}{c}
-r_{c} \\
-r_{b} \\
-X S e
\end{array}\right) 0 A S A ⊤ 0 0 I 0 X Δ x Δ λ Δ s = − r c − r b − X S e
Wobei die erste Matrix die Jacobi Matrix von F F F ist.
Üblicherweise würde ein solcher Schritt x , s ≥ 0 x,s\ge0 x , s ≥ 0 verletzen weswegen wir
( x , λ , s ) + α ( Δ x , Δ λ , Δ s ) (x, \lambda, s)+\alpha(\Delta x, \Delta \lambda, \Delta s) ( x , λ , s ) + α ( Δ x , Δ λ , Δ s )
für einen Liniensuchparameter α ∈ [ 0 , 1 ) \alpha\in[0,1) α ∈ [ 0 , 1 ) mit sehr kleinem α \alpha α verwenden.
Da man so aber nur sehr langsam voran kommt wählen wir x i s i = σ μ x_{i} s_{i}=\sigma \mu x i s i = σ μ wobei μ \mu μ das Dualitätsmaß ist und σ ∈ [ 0 , 1 ] \sigma\in[0,1] σ ∈ [ 0 , 1 ] der Zentrierungsparameter. Damit gilt
( 0 A ⊤ I A 0 0 S 0 X ) ( Δ x Δ λ Δ s ) = ( − r c − r b − X S e + σ μ e ) \left(\begin{array}{ccc}
0 & A^{\top} & I \\
A & 0 & 0 \\
S & 0 & X
\end{array}\right)\left(\begin{array}{c}
\Delta x \\
\Delta \lambda \\
\Delta s
\end{array}\right)=\left(\begin{array}{c}
-r_{c} \\
-r_{b} \\
-X S e+\sigma \mu e
\end{array}\right) 0 A S A ⊤ 0 0 I 0 X Δ x Δ λ Δ s = − r c − r b − X S e + σ μ e
Algorithmus
Primal-duales pfadfolgendes Innere-Punkte-Verfahren