Eine der besten Lösungen basiert wahrscheinlich auf einer linearen Programmierrelaxation oder einer direkten ganzzahligen Programmierung . Für letztere ist das Verzweigen und Zurückverfolgen implizit und Sie müssen es nicht selbst verwalten.
Ich habe gesehen, wie es mit dieser Technik auf zwei Arten gelöst wurde. Wir können auch Ihren Begrenzungsalgorithmus leicht verbessern.
Die Lehrbuchmethode
Mit den binären Variablen die , können Sie kontinuierliche Variablenxi jf( i ) = jf( i ) =∑nj = 1jxi j
Fügen Sie die Einschränkungen und darstellen, dass einer Position nur ein Knoten zugewiesen ist.∑ichxi j= 1∑jxi j= 1
Für jede Kante haben die Kosten zwei Einschränkungen: und , und Sie möchten minimierencece≥ f( i ) - f( j )ce≥ f( j ) - f( i )∑ece
Sie können dieses Problem einem ganzzahligen Programmierlöser geben, der gerne das Backtracking für Sie und mehr übernimmt - oder Sie können die lineare Programmierentspannung jedes Mal selbst lösen (nur wenn Sie lernen möchten, optimiert der Löser sie intern).
Noch eine Entspannung
Anstatt die Positionen als binäre Variablen zu verwenden, können Sie dh Knoten geht vor Knoten . Dies ist besser geeignet, wenn Sie die Verzweigung selbst durchführen und diese Variablen nicht explizit angeben möchten.f( i ) < f( j )ichj
Mit diesem Ansatz kann es manchmal vorkommen, dass an jedem Knoten ein schnelleres Problem zu lösen ist. Hier kann es als einfacheres Problem mit minimalem Kostenfluss gelöst werden, wie in diesem Dokument gezeigt . Ich würde es nicht empfehlen, wenn Sie nicht bereit sind, viel Zeit zu untersuchen und Ihr Problem zu untersuchen.
Andere Techniken
Für Branch-and-Bound reicht jede Untergrenze Ihrer Kostenfunktion aus. Für kleine Probleme ist Ihr Bounding-Ansatz vollkommen in Ordnung.
Sie könnten es enger machen: Wählen Sie für jede Kante mit einem nicht platzierten Knoten die bestmögliche kostenlose Beschriftung aus, um die Kosten abzuschätzen. Mehrere Kanten verwenden möglicherweise dieselbe Platzierung für verschiedene Knoten. Dies ist jedoch besser, als ihre Kosten auf 0 zu schätzen.
Es gibt viele mögliche Variationen dieses Schemas: Wählen Sie die beste freie Beschriftung für jeden unbeschrifteten Knoten (unabhängig von Überlappungen) oder berücksichtigen Sie Überlappungen nur innerhalb kleiner Gruppen von Knoten.