Ganzzahlige lineare Optimierung
Die
ganzzahlige lineare Optimierung (auch
ganzzahlige Optimierung) ist ein Teilgebiet der angewandten
Mathematik. Wie die
Lineare Optimierung beschäftigt sie sich mit der
Optimierung linearer Zielfunktionen über einer
Menge, die durch lineare Gleichungen und
Ungleichungen eingeschränkt ist. Der Unterschied liegt darin, dass in der
ganzzahligen Optimierung einige oder alle Variablen nur
ganzzahlige Werte annehmen dürfen und nicht beliebige reelle Werte wie in der
linearen Optimierung. Die
ganzzahlige Optimierung lässt sich geometrisch als
Optimierung über einem konvexen Polyeder (einem höherdimensionalen
Vieleck) auffassen und ist damit ein Spezialfall der konvexen
Optimierung. Im Unterschied zur
linearen Programmierung ist allerdings das zugrundeliegende Polyeder meist nicht genau bekannt, was das Problem aus komplexitätstheoretischer Sicht NP-schwer macht.
Da die
Menge der zulässigen Lösungen
diskret, also nicht kontinuierlich ist, ist auch der Begriff
diskrete Optimierung gebräuchlich. Eine weitere häufige Bezeichnung ist
ganzzahlige (lineare) Programmierung (von engl.
integer (linear) programming), wobei der Begriff
Programm im Sinne von
Planung zu verstehen ist und nicht im Sinne eines Computerprogramms. Er wurde schon in den 1940er Jahren von George Dantzig geprägt, bevor Computer zur Lösung von Optimierungsproblemen eingesetzt wurden.
Noch stärker als die lineare hat sich die
ganzzahlige Optimierung seit ihren Anfängen in den 1950er Jahren zu einem Modellierungs- und Optimierungswerkzeug für viele praktische Probleme entwickelt, für die keine speziellen
Algorithmen bekannt sind. Durch bedeutende Fortschritte in der Entwicklung der Lösungsverfahren in den 1980er und 1990er Jahren hat die
ganzzahlige Optimierung heute viele Anwendungen, beispielsweise in der Produktion, in der Planung von Telekommunikations- und Nahverkehrsnetzen und in der Tourenplanung.
Zur Lösung
ganzzahliger Optimierungsprobleme gibt es einerseits exakte Lösungsverfahren wie beispielsweise
Branch-and-Bound und
Schnittebenenverfahren, die auf der Lösung vieler ähnlicher
linearer Programme basieren, und andererseits eine Vielzahl von Heuristiken. Trotzdem ist die Lösung
ganzzahliger linearer Programme in der Praxis immer noch eine schwere Aufgabe, die je nach Größe und Struktur des zu lösenden Problems eine geschickte Modellierung und mehr oder weniger speziell entwickelte oder angepasste
Algorithmen erfordert. Oft werden daher mehrere Lösungsverfahren kombiniert.
Problemdefinition
Mathematische Formulierung
Ein
ganzzahliges Programm (engl.
integer program,
IP) hat die gleiche Form wie ein
lineares Programm (LP), mit dem Unterschied, dass die Variablen
ganzzahlig sein müssen:
- max{cTx∣Ax≤b,x≥0,x∈Zn}
Dabei ist
A eine reelle
Matrix und
b und
c sind Vektoren passender
Dimension. Die Bedingung
Ax≤b ist komponentenweise zu verstehen, also als
- ai⋅x=j=1∑naijxj≤bi
für alle Zeilen
i der
Matrix A. Genauso bedeutet die Bedingung
x≥0, dass alle Einträge des Vektors
x nichtnegativ sein müssen. Gelten die Ganzzahligkeitsbedingungen nur für einen Teil der Variablen, spricht man auch von einem
gemischt-ganzzahligen Programm (engl.
mixed-integer program,
MIP). Auch die Präzisierung
ganzzahliges lineares Programm (engl.
integer linear program, ILP) ist gebräuchlich. Wie auch in der
linearen Optimierung gibt es mehrere äquivalente Formulierungen, die sich ineinander transformieren lassen (siehe dort).
Geometrische Interpretation
Die
ganzzahlige Optimierung lässt sich, wie die lineare Variante, zu einem großen Teil geometrisch interpretieren. Die
Menge
- P:={x∣Ax≤b,x≥0},
die durch Weglassen der Ganzzahligkeitsbedingungen entsteht, bildet ein konvexes Polyeder im
n-dimensionalen Raum, dessen beschränkende Hyperebenen den Zeilen des Ungleichungssystems entsprechen.
P enthält u. a. alle zulässigen
Punkte des Ausgangssystems, also alle
ganzzahligen Punkte, die die Bedingungen
Ax≤b erfüllen, aber im Unterschied zur
linearen Optimierung sind nicht alle
Punkte in
P zulässig. Das
lineare Programm
- max{cTx∣x∈P}
wird als
LP-Relaxierung des
ganzzahligen Problems bezeichnet und spielt eine bedeutende Rolle für einige Lösungsverfahren (siehe unten).
Wie
lineare Programme können auch
ganzzahlige Programme unlösbar oder unbeschränkt sein. In allen anderen Fällen gibt es mindestens eine Optimallösung. Im Unterschied zu LPs ist allerdings die
Menge der Optimallösungen eines IPs keine Seitenfläche des Polyeders
P, so dass es neben genau einer oder
unendlich vielen optimalen Lösungen auch andere endliche Anzahl (größer als 1) davon geben kann.
Beispiel
Im nebenstehenden Bild ist das ganzzahlige lineare Programm
- max−x3x2xx,y∈Z+y+y+2y+3y≤1≤12≤12
dargestellt. Die zulässigen
ganzzahligen Punkte sind rot eingezeichnet, und die rot gestrichelten Linien kennzeichnen ihre
konvexe Hülle, also das kleinste Polyeder, das alle diese
Punkte enthält. Über diesem Polyeder soll eigentlich optimiert werden, aber es ist meist nicht genau bekannt. Die blauen Linien zusammen mit den Koordinatenachsen begrenzen das Polyeder
P der LP-Relaxierung, das durch das Ungleichungssystem ohne Ganzzahligkeitsbedigungen gegeben ist. Ziel der
Optimierung ist es, die schwarz gestrichelte Linie so weit
parallel nach oben (in Richtung des Vektors
c=(0;1)) zu verschieben, dass sie das jeweilige Polyeder gerade noch berührt. Die Optimallösungen des
ganzzahligen Problems sind also die
Punkte (1;2) und
(2;2) mit dem Zielfunktionswert
cTx=(0;1)T(1;2)=2. Die - in diesem Fall eindeutige - optimale Lösung der LP-Relaxierung mit dem Zielfunktionswert 2,8 ist der blau markierte
Punkt LPopt=(1,8;2,8), der nicht
ganzzahlig und damit auch nicht zulässig für das IP ist.
Anwendungen
Die Ganzzahligkeitsbedingungen erweitern die Modellierungsmöglichkeiten für praktische Probleme gegenüber der
linearen Optimierung beträchtlich. Es gibt zwei Hauptgründe für
ganzzahlige Variablen:
- Die Variablen müssen aus praktischen Gründen ganzzahlig sein. Beispielsweise können nicht 3,7 Flugzeuge gebaut werden, sondern nur eine ganze Anzahl.
- Die ganzzahligen Variablen sind auf die Werte 0 oder 1 beschränkt (sogenannte Binärvariablen) und repräsentieren Entscheidungen. Beispielsweise kann ein Bus nicht zu einem Drittel fahren, sondern nur entweder ganz oder gar nicht.
Oft treten auch beide Fälle zusammen auf. Die ganzzahlige Optimierung kann in vielen praktischen Anwendungsfeldern eingesetzt werden, von denen nachfolgend einige kurz beschrieben werden sollen.
Produktionsplanung
In der
Produktionsplanung taucht oft das Problem auf, Produktionsmengen für mehrere Produkte zu bestimmen, die sich gemeinsame Ressourcen (Maschinen, Arbeitszeit, Lagerkapazitäten,...) teilen. Ziel ist beispielsweise die Maximierung des gesamten Deckungsbeitrags, ohne die vorhanden Ressourcen zu überschreiten. In einigen Fällen lässt sich dies mit Hilfe eines
linearen Programms ausdrücken, aber oft müssen die Variablen aus praktischen Gründen
ganzzahlig sein (s.o.).
Öffentlicher Nahverker
Bei der Dienst- und Umlaufplanung im öffentlichen Nahverkehr geht es darum, beispielsweise Busse oder U-Bahnen so auf die einzelnen Linien zu verteilen, dass der Fahrplan erfüllt werden kann, und sie mit Fahrern auszustatten. Hier spielen binäre Entscheidungsvariablen eine große Rolle, die z. B. ausdrücken, ob ein bestimmter Bustyp eine Linie befährt oder nicht, oder ob ein U-Bahn-Fahrer einem bestimmten Zug zugewiesen wird oder nicht.
Telekommunikationsnetze
Ziel der
Kapazitäts- und Routing-Planung in landesweiten Telekommunikationsnetzen ist es, Kapazität auf den
Knoten und Leitungen eines Netzes so zu installieren und Kommunikationsbedarfe darin so zu routen, dass alle Bedarfe erfüllt werden und die Gesamtkosten des Netzes minimal sind. Die Kapazität kann in der Regel nicht in beliebigen Anteilen installiert werden, sondern nur in bestimmten
ganzzahligen Einheiten. Meist gibt es, abhängig von der verwendeten Technologie, noch weitere Beschränkungen, die sich als lineare
Ungleichungen mit
ganzzahligen oder binären Variablen modellieren lassen.
Mobilfunknetze
Die Aufgabe der Frequenzplanung in GSM-Mobilfunknetzen besteht darin, die verfügbaren Frequenzen so auf die Antennen zu verteilen, dass alle Nutzer bedient werden können und die störende Interferenz zwischen den Antennen minimiert wird. Dieses Problem lässt sich als ganzzahliges lineares Programm formulieren, bei dem u. a. Binärvariablen repräsentieren, ob eine Frequenz einer bestimmten Antenne zugewiesen wird oder nicht.
Tourenplanung
Die
Tourenplanung, speziell das
Problem des Handlungsreisenden, ist ein klassisches Beispiel der
ganzzahligen Optimierung, dessen Untersuchung viel zur Entwicklung allgemeiner Lösungsverfahren beigetragen hat. Anschaulich geht es darum, eine kürzeste Rundreise zwischen einer gegebenen
Menge von Städten zu finden. Dieses Problem kann als
ganzzahliges lineares Programm mit exponentiell vielen
Ungleichungen modelliert werden. Verschiedene erweiterte Varianten der Tourenplanung tauchen in der Praxis beispielsweise beim Bohren von Leiterplatten auf, oder auch bei der Planung der Fahrtrouten für Außendienstmitarbeiter (z. B. eines technischen Kundendienstes oder einer Versicherung), die alle ihre Kunden mit möglichst kurzen Wegen bedienen wollen.
Geschichte
Der Beginn der
ganzzahligen Optimierung hängt eng mit der Entwicklung der
linearen Optimierung Mitte der 1940er Jahre zusammen. Im Jahre 1947 veröffentlichte George Dantzig mehrere entscheidende Arbeiten zur
Linearen Optimierung und zum
Simplex-Verfahren, die er in den darauffolgenden Jahren zusammen mit John von Neumann und anderen weiterentwickelte.
Als mit dem Aufkommen von Computern in den 1950er Jahren die ersten praktisch einsetzbaren Computerprogramme zur Lösung
linearer Programme entwickelt wurden, rückte auch die Lösbarkeit
ganzzahliger Optimierungsprobleme in erreichbare Nähe. Mitte der 1950er Jahre arbeiteten D.R. Fulkerson, G. Dantzig, und S. Johnson an ersten Schnittebenen für das
Problem des Handlungsreisenden. Ohne Kenntnis dieser Arbeiten und motiviert durch ehemalige Kollegen der US Navy, die an
ganzzahligen Lösungen interessiert waren, entwickelte Ralph Gomory im Jahre 1958 während seines Aufenthaltes in Princeton das erste allgemein einsetzbare
Schnittebenenverfahren, das (zumindest theoretisch) die vollständige Lösbarkeit beliebiger
ganzzahliger Programme erlaubte. Auch wenn sich dies praktisch nur teilweise umsetzen ließ, stellte dieses Verfahren einen entscheidenen algorithmischen Fortschritt dar.
Kurz danach, im Jahre 1960, stellten A.H. Land und A.G. Doig das Branch-and-Bound-Verfahren vor, das auf einer geschickten Enumeration des Suchraumes basiert. 1965 gab R.J. Dakin einen einfach implementierbaren
Algorithmus dazu an. Später wurde
Branch-and-Bound mit
Schnittebenenverfahren zu
Branch-and-Cut kombiniert, was die Lösung deutlich größerer
ganzzahliger linearer Programme erlaubte.
In den 1980er Jahren arbeiteten Manfred Padberg und andere an Schnittebenen für oft auftauchende Teilstrukturen wie Rucksackprobleme, die oft auch in allgemeinerem Kontext eingesetzt werden können. Die enormen algorithmischen Fortschritte in der
linearen Optimierung in den 1990er Jahren schlugen sich auch in einer deutlich besseren Lösbarkeit
ganzzahliger Programme nieder, da beispielsweise bei der Anwendung von
Schnittebenenverfahren und Branch-and-Bound-Algorithmen sehr viele
lineare Programme gelöst werden müssen. Neben besseren Modellierungen und Lösungstechniken für häufig auftauchende Teilprobleme, wie beispielsweise Netzwerkflüsse, wurden
parallel dazu viele Heuristiken, also Näherungsverfahren, entwickelt, die meist in kurzer Zeit zulässige Lösungen berechnen. Sie können u. a. auch als Teil von Branch-and-Cut-Verfahren eingesetzt werden, um diese zu beschleunigen. All diese Verfahren sind noch Gegenstand aktueller Forschung.
Komplexität und Lösungsverfahren
Im Unterschied zu linearen Programmen, die beispielsweise mit
Innere-Punkte-Verfahren in Polynomialzeit optimal gelöst werden können, ist das Finden einer beweisbaren Optimallösung für
ganzzahlige Programme ein NP-schweres Problem. Dies macht sich auch in der Praxis bemerkbar. Während selbst große
lineare Programme heute weitgehend mit Standardmethoden gelöst werden können, hängt die Lösbarkeit
ganzzahliger Programme sehr viel stärker von den spezifischen Eigenheiten des jeweiligen Planungsproblems und von der gewählten Modellierung ab. Ein Optimierungsproblem mit hundert
ganzzahligen Variablen kann aus praktischer Sicht unlösbar sein, während andere Probleme mit tausenden
ganzzahliger Variablen innerhalb weniger Sekunden gelöst werden. Es gibt zwar auch in der
ganzzahligen Optimierung Standardmethoden, mit denen durch große algorithmische Fortschritte innerhalb der letzten zehn Jahre mittlerweile viele praktische Planungsprobleme als IP gelöst werden können, aber gerade die Lösung großer
ganzzahliger Programme in annehmbarer Zeit erfordert oft eine geschickte Modellierung und eine
Kombination mehrerer Lösungsverfahren mit problemspezifischen Anpassungen.
Exakte und heuristische Verfahren
Bei der Klassifizierung der
Algorithmen ist zu unterscheiden zwischen exakten und heuristischen Lösungsverfahren.
Heuristische Verfahren liefern typischerweise zulässige Lösungen in relativ kurzer Zeit, aber keine Information darüber, wie gut diese im Vergleich zu einer Optimallösung sind. Wenn eine Heuristik keine Lösung findet, ist nicht bekannt, ob dies am
Algorithmus liegt oder ob das betrachtete Optimierungsproblem prinzipiell unlösbar ist. Heuristische Verfahren sind meist an das zu lösende Problem angepasst, wie beispielsweise die k-Opt-Heuristiken für das
Problem des Handlungsreisenden. Bei Metaheuristiken wie Tabu Search ist zwar der grundsätzliche Ablauf generisch, aber die einzelnen Schritte des
Algorithmus müssen abhängig vom betrachteten Problem definiert werden.
Exakte Verfahren finden beweisbar stets eine optimale Lösung oder stellen fest, dass das Problem unlösbar oder unbeschränkt ist, vorausgesetzt, man lässt den
Algorithmus beliebig lange laufen. Beispiele hierfür sind
Branch-and-Bound,
Schnittebenenverfahren sowie deren
Kombination Branch-and-Cut. In der Praxis kann man diese Verfahren durch Anpassung an das zu lösende Problem und durch
Kombination mit Heuristiken oft deutlich beschleunigen.
Duale Schranken und Optimalitätsbeweis
Alle praktisch relevanten exakten Verfahren beruhen auf der iterativen Lösung und Modifikation einer
Relaxierung, also eines einfacheren Problems, dessen Lösungsmenge alle Lösungen des Ursprungsproblems enthält. Beispielsweise verwenden
Branch-and-Bound und
Schnittebenenverfahren die LP-Relaxierung, lassen also zunächst die Ganzzahligkeitsbedingungen weg. Dies lässt sich auch geometrisch interpretieren: Eigentlich ist eine optimale Ecke des IP-Polyeders
PI (im obigen Bild rot gestrichelt) gesucht, das von allen zulässigen
ganzzahligen Punkten aufgespannt wird. Da dieses Polyeder meist nicht genau bekannt ist, wird stattdessen eine optimale Ecke des Polyeders
P der LP-Relaxierung gesucht, das
PI enthält (im obigen Beispiel blau umrandet). Dies geht verhältnismäßig einfach, z. B. mit dem
Simplex-Verfahren.
Da in der Relaxierung mehr Lösungen zugelassen sind als im Ausgangsproblem, ist ihr Optimalwert mindestens so hoch (bei einem Maximierungsproblem) wie der - unbekannte - Optimalwert des IPs, liefert also für diesen eine obere (allgemein:
duale) Schranke. Gleichzeitig definiert der Wert jeder zulässigen
ganzzahligen Lösung
L eine untere (allgemein:
primale) Schranke für den Wert einer Optimallösung, da diese ja per Definition mindestens so gut ist wie
L. Durch Vergleich der oberen und
unteren Schranken kann ein maximaler relativer Abstand, der sogenannte
Optimalitätsgap, zwischen dem Wert einer gefundenen Lösung und dem Optimalwert angegeben werden, ohne letzteren genau zu kennen.
Im obigen Beispiel beträgt der optimale Wert der LP-Relaxierung 2,8. Der Optimalwert des
ganzzahligen Problems kann nicht höher sein, da dort weniger Lösungen zugelassen sind als in der LP-Relaxierung. Der
Punkt (1;1) (den man beispielsweise durch Raten oder über eine Heuristik gefunden haben kann) ist eine zulässige Lösung des
ganzzahligen Problems und hat den Zielfunktionswert 1. Eine
optimale Lösung ist per Definition mindestens genauso gut wie die gefundene Lösung. Der Optimalwert des
ganzzahligen Problems muss also zwischen 1 und 2,8 liegen. Der
absolute Optimalitätsgap ist die
Differenz zwischen der oberen und
unteren Schranke, hier also
(2,8−1)=1,8 Der häufiger angegebene
relative Optimalitätsgap ergibt sich durch Normierung dieses Wertes mit der
unteren Schranke, in diesem Fall also als
1,8/1=1,8=180% Er besagt, dass der Optimalwert des
ganzzahligen Programms um höchstens 180% höher liegt als der Wert der Lösung
(1;1). Dies erlaubt eine (in diesem Fall nicht besonders gute) Qualitätsabschätzung der Lösung. Der tatsächliche Unterschied beträgt
(2−1)/1=1=100%, d. h. der Optimalwert ist doppelt so hoch wie der Wert der gefundenen Lösung.
Im Laufe des
Algorithmus wird die Relaxierung schrittweise verschärft (beispielsweise durch Hinzufügen zusätzlicher
Ungleichungen), so dass die sich daraus ergebende
obere Schranke immer kleiner wird. Gleichzeitig wird versucht, bessere zulässige Lösungen zu finden, um die
untere Schranke anzuheben. Dies ist in der nebenstehenden
Abbildung illustriert. Sind der Wert einer gefundenen Lösung und die duale Schranke gleich (im Beispiel beim Wert 2), ist dies der Beweis, dass die gefundene Lösung optimal ist.
Im folgenden werden einige wichtige exakte Lösungsverfahren aufgezählt:
Lagrange-Relaxierung
Die
Lagrange-Relaxierung ist ein Verfahren aus der nichtlinearen
Optimierung, das auch auf die
ganzzahlige Optimierung angewandt werden kann. Die Grundidee besteht darin, "störende"
Ungleichungen wegzulassen, so dass das verbleibende Problem (mit Ganzzahligkeitsbedingungen) leicht lösbar ist, und statt dessen die Verletzung dieser
Ungleichungen, gewichtet mit sogenannten Lagrange-Multiplikatoren, in der Zielfunktion zu bestrafen.
Eine Lösung dieses einfacheren Problems wird in den meisten Fällen die in die Zielfunktion relaxierten Bedingungen nicht erfüllen. Um dies zu ändern, werden die Lagrange-Multiplikatoren mit Hilfe eines Subgradientenverfahrens abhängig von der aktuellen (unzulässigen) Lösung so angepasst, dass ein erneutes Lösen mit den neuen Gewichten eine etwas "zulässigere" Lösung erzeugt, welche die relaxierten
Ungleichung weniger stark verletzt. Dieser Prozess wird iterativ wiederholt, bis alle Bedingungen erfüllt sind. Man kann zeigen, dass jede Lösung einer Lagrange-Relaxierung eine duale Schranke für das ursprüngliche IP liefert, und dass dieses Verfahren bei geeigneter Anpassung der Multiplikatoren konvergiert.
Heuristiken
Für fast jedes Optimierungsproblem lassen sich leicht eine Vielzahl von Heuristiken finden, die für dieses spezielle Problem schnell zulässige Lösungen finden. Dagegen ist die Entwicklung heuristischer Verfahren, die zuverlässig gute Lösungen finden, und das möglichst auch noch für eine ganze
Klasse verwandter Optimierungsprobleme und nicht nur für ein spezielles Problem, eine nicht triviale Aufgabe.
Beispiele für problemspezifische Heuristiken beim
Problem des Handlungsreisenden sind die Minimum-Spanning-Tree-Heuristik zur Konstruktion einer zulässigen Tour mit Hilfe eines minimal aufspannenden Baumes und die k-Opt-Heuristiken zur Verbesserung einer bereits gefundenen Tour. Dieses Optimierungsproblem ist auch eines der wenigen Beispiele, bei denen sich leicht heuristische duale Schranken angeben lassen. Beispielsweise enthält jede Tour durch
n Knoten auch genau
n Kanten, so dass eine kürzeste Tour mindestens so lang sein muss wie die Summe der
n kürzesten Kantenlängen. Im allgemeinen ist es deutlich schwieriger, gute duale Schranken anzugeben.
Neben solchen speziell für ein Problem entwickelten Verfahren gibt es sogenannte Metaheuristiken, die auf problemunabhängige Weise Strategien zur Suche zulässiger Lösungen beschreiben. Die einzelnen Schritte dieser
Algorithmen müssen allerdings speziell auf das zu lösende Problem angepasst werden. Beispiele hierfür sind das Runden von LP-Lösungen, lokale Suche, Tabu-Suche, Genetische
Algorithmen, Simulated Annealing und Ameisenalgorithmen. Einige dieser Verfahren haben Prozesse wie die natürliche Selektion oder das Verhalten von Ameisen auf der Suche nach Futter zum Vorbild; inwieweit das für die Lösungsqualität und die Lösungszeiten in der Praxis von Vorteil ist, ist umstritten.
Als alleiniges Lösungsverfahren haben all diese
Algorithmen den Nachteil, dass sie erstens nicht immer eine Lösung finden, und zweitens meistens nichts über die Qualität gefundener Lösungen im Vergleich zu einer Optimallösung bekannt ist. Sie können aber beispielsweise sehr sinnvoll im Rahmen eines Branch and Cut-Ansatzes eingesetzt werden, um an verschiedenen
Knoten des Suchbaumes beispielsweise aus der aktuellen LP-Lösung gute zulässige Lösungen zu generieren und so evtl. Teile des Baumes abschneiden zu können.
Literatur
- Leena Suhl und Taieb Mellouli: "Optimierungssysteme: Modelle, Verfahren, Software, Anwendungen", Springer, Berlin, 2006, ISBN 3-540-26119-2
- J. Kallrath: "Gemischt-Ganzzahlige Optimierung: Modellierung in der Praxis", Vieweg, Wiesbaden, 2002
- Richard Kipp Martin: Large Scale Linear and Integer Optimization - A Unified Approach, Kluwer Academic Publishers, 1999
- R.J. Dakin: A tree-search algorithm for mixed integer programming problems. In: The Computer Journal, Volume 8, S. 250-255, 1965.
- Ralph Gomory: Early Integer Programming. In: Operations Research, Volume 50, Nummer 1, S. 78-81, 2002.
- A.H. Land und A. G. Doig: An automatic method of solving discrete programming problems. In: Econometrica Volume 28, S. 497- 520, 1960.
- George Nemhauser und Laurence Wolsey: Integer and Combinatorial Optimization. Wiley Interscience, 1988, ISBN 0-471-35943-2.
Die ganzen Zahlen hat der liebe Gott geschaffen, alles andere ist Menschenwerk.
Leopold Kronecker
Anbieterkеnnzeichnung: Mathеpеdιa von Тhοmas Stеιnfеld
• Dοrfplatz 25 • 17237 Blankеnsее
• Tel.: 01734332309 (Vodafone/D2) •
Email: cο@maτhepedιa.dе