LP-Problem - Duale affine Skalierung (Karmarkar)

 
  • Hier soll ein lineares Problem der Form
    cTx = max, Ax=b, x>=0

    gelöst werden.
  • Dieses Programm rechnet mit der Methode der dualen affinen Skalierung, entweder mit dem dualen oder dem dualen erweiterten Problem. Also
    bTy = max, -c-ATy >= 0
    bzw.
    bTy-big*yp+1 = max ,
    -c-AT+e*yp+1 >= 0 , e=(1,...,1)T
    yp+1 >= 0 .

    Ist der Penalisierungsfaktor "big" gross genug gewählt (nämlich >= ||x*||1 ) und das primale Problem beschränkt und zulässig, dann wird die Schlupfvariable yp+1=0 im Optimum. Ist das primale Problem unbeschränkt, dann ist das duale Problem unzulässig und es wird yp+1 > 0 .
  • Das Verfahren korrigiert iterativ die duale Lösung y gemäss
    1. vk = -c -AT yk
    2. Dk = diag( vk1,...,vkn)
    3. (A*Dk-2*AT) hk = b lösen
    4. dk = -AThk
    5. gamma = alpha * min{ -vik/dik: dik <0 }
    6. yk+1 = yk + gamma*hk

  • Nach erfolgreicher Lösung des dualen Problems wird dann noch die Lösung des primalen Problems aus den Optimalitätsbedingungen berechnet. Dies im Falle des erweiterten Problems nur, wenn die Schlupfvariable kleiner als
    sqrt(tiny)=sqrt(2.2d-16*(sum{ |Ai,j|}+sum{|bi|} +p(1+big))
    ist.
  • Es gibt verschiedene Eingabeformen für die Koeffizienten c(i) sowie die Einträge in die Matrix A und den Vektor b. Falls die Matrix vollbesetzt ist, ist die übliche zeilenweise Eingabe sinnvoll. Für den Fall einer schwachbesetzten Matrix gibt es die Möglichkeit, die Nicht-Null-Elemente zusammen mit den entsprechenden Indizes anzugeben. Hierzu gibt es verschiedene Eingabeseiten, um die Seiten übersichtlich zu halten.
 

Es gibt zwei unterschiedliche Eingabeseiten:
Vollbesetzte Matrix und
Schwachbesetzte Matrix

Die Eingaben

 
  • Zuerst muß ein Identifizierungstext eingegeben werden, welcher später mit ausgegeben wird.
  • Die Dimension des Unbekannten-Vektors n (n = dim(x) = dim(c))
    Wichtig : 1 <= n <= 99 !
  • Die Anzahl der Gleichungsrestriktionen p (p = dim(b) = Anzahl Zeilen von A)
    Wichtig : 1 <= p <= n !
  • Es gibt zwei verschiedene Eingabeformen für die Matrix und die Vektoren:
    1. Vollbesetzte Matrix :
      Direkte Vektoreingabe des Koeffizientenvektors c.
      Zeilenweise Eingabe der Matrix A=(a(i,j)) mit dem jeweiligen Wert b(i) pro Zeile. Das heißt konkret: a(i,1),...,a(i,n),b(i), also n+1 Einträge pro Zeile.
    2. Schwachbesetzte Matrix :
      Indexweise Eingabe der Nicht-Null-Elemente der Matrix wie auch der Vektoren.
      Konkret : index, wert, also i, c(i) oder i, b(i)
      bzw. index1, index2, wert, also i, j, a(i,j)
      (Die restlichen Elemente sind mit Null vorinitialisiert.)
      Wichtig : Immer nur ein Index-Wert-Tupel pro Zeile !
  • Auswahl:
    1. Standardparameter: alpha=0.5, epsc=1.d-10, rho=1.1d-16, maxstep=100 oder
    2. Eingabe der Parameter: alpha, epsc, rho, maxstep
    alpha ist oben benutzter Schrittlängenreduktionsfaktor und muss < 2/3 bleiben. Das Verfahren bricht ab, wenn die duale Zielfunktion sich relativ um weniger als epsc unterscheidet. 1/rho ist eine obere Schranke für die Kondition des Diagonalteils der QR-Zerlegung von DkAT. Die QR-Zerlegung dieser Matrix (ihr Dreiecksteil) dient zur Lösung des Gleichungssystems in Schritt 3. maxstep ist die maximal zulässige Schrittzahl.
  • Soll das Problem um eine Variable erweitert werden, so daß ein zulässiger innerer Punkt direkt angebbar ist ?
    1. Wenn ja, muß noch der reelle Parameter big für die Penalisierung der Schlupfvariablen angegeben werden. (big sollte größer als ||x*||1 sein, sonst wird nicht das Originalproblem mitgelöst).
    2. Wenn nein,
      Standardstartwert (als Standard wird der Startwert auf -c gesetzt)
      oder eigene Angabe des dualen Startwertes y(1),...,y(p) mit - c - A'y > 0 (Der Wert wird auf Zulässigkeit geprüft.)
  • Die Anzahl der zu protokollierenden dualen Variablen
 

Die Ausgaben

 
  • Es wird ein Iterationsprotokoll mit dualem Zielfunktionswert und den ausgewählten dualen Lösungskomponenten gedruckt.
  • Die endgültige duale Lösung und das Abbruchkriterium werden ausgegeben. Beim erweiterten Problem wird auch die Schlupfvariable angegeben.
 

Vollbesetzte Matrix

 

Schwachbesetzte Matrix

 
 

Zurück: Restringierte Minimierung

 
Back to the top!

30.01.2009