Savings-Algorithmus
# Savings-Algorithmus

Als Savings-Algorithmus (auch Sparalgorithmus, Savings-Heuristik oder Einsparheuristik) bezeichnet man im Operations Research ein heuristisches Lösungsverfahren in der Tourenplanung. Das 1964 von Clarke und Wright erstmals publizierte Verfahren ist in der Praxis eines der am häufigst eingesetzten.
Die Heuristik versucht dem kürzesten Pfad zwischen einem Ausgangs- und Endknoten und verschiedenen Zwischenknoten möglichst nahezukommen (Problem des Handlungsreisenden). Die Lösung kann weiteren Verbesserungsverfahren, wie etwa den k-Opt-Heuristiken, als Ausgangslösung dienen.
Beim Savings-Algorithmus erfolgen Tourenbildung und Reihenfolgebestimmung innerhalb der Touren simultan. Man kann zwei Versionen des Verfahrens unterscheiden: eine parallele und eine sequentielle Vorgehensweise.

## Algorithmus

Eine symmetrische Entfernungsmatrix ist eine der Voraussetzungen für den Algorithmus.
* Verbinde jeden Knoten (Kunden) mit dem Ausgangsknoten (Depot) über eine Hin- und Rückkante (Weg); es entstehen Pendeltouren.
* Löse bei allen möglichen Kombinationen jeweils eine Hin- und eine Rückkante und verbinde die beiden Knoten mit einer Kante.
* Bewerte alle im Schritt 2 entstandenen Savings gemäß $S_{\text{i,j}}=d_{\text{i,rück}}+d_{\text{j,hin}}-d_{\text{i,j}}$
* Sortiere alle Savings in absteigender Reihenfolge.
* Verbinde die beiden Knoten die das beste verbliebene Saving haben und noch mindestens eine Kante zum Ausgangspunkt.
* Wiederhole Schritt 5 solange noch mehr als zwei Kanten zum Ausgangspunkt existieren.
* Existieren nur noch zwei Kanten zum Ausgangspunkt ist eine Lösung erreicht.

## Beispiel

Dieses Beispiel verdeutlicht die Berechnung der Einsparungen durch den Saving-Algorithmus. In nebenstehender Grafik stellen i und j die Kunden und 0 das Depot dar. Der Weg nach i kostet hin und zurück je 5 Einheiten, der Weg nach j 7 Einheiten. Der Weg zwischen i und j kostet 3 Einheiten.
Nun berechnet man für alle Kundenpaare (in diesem Fall nur eines) die mögliche Einsparung:
    $S_{ij}=C_{i0}+C_{0j}-C_{ij}$
In diesem Fall ergeben sich beim Zusammenlegen der beiden Touren aus dem linken Graph Einsparungen in Höhe von 9 Einheiten. Existieren mehrere Kundenpaare ordnet man im nächsten Schritt die Paare absteigend nach der möglichen Einsparung und beginnt dann oben die Touren zusammenzufügen.