Home > Informatik > Optimierungsprobleme

Workshop "Nearest neighbour" - 3

Teil 1 - Teil 2 - Teil 3 - Teil 4 - Teil 5

Die Klasse Entfernungstabelle

Zielsetzung

Bei der Optimierung einer Tour müssen immer wieder Entfernungen zwischen zwei Städten berechnet werden. Dies ist ein sehr rechenintensiver Prozess. Es wäre daher unklug, wenn man die Entfernung zwischen Stadt A und Stadt B immer wieder neu berechnen müsste. Viel sinnvoller ist es, die Entfernungen zwischen den Städten einmal zu berechnen und dann in einer zweidimensionalen Tabelle zu speichern.

Die neue Klasse Entfernungstabelle

Attribute

Es gibt nur ein einziges Attribut, nämlich den zweidimensionalen Array tabelle.

Methoden

Der Konstruktor benötigt eine Stadtliste als Parameter, damit er überhaupt weiß, was berechnet werden soll.

Die Methode entfernung liefert die Entfernung zwischen zwei Städten zurück.

Quelltext

public class Entfernungstabelle
{
    double[][] tabelle;
    
    public Entfernungstabelle(Stadtliste s)
    {
       tabelle = new double[16][16];
       for (int v = 0; v < 16; v++)
          for (int n = 0; n < 16; n++)
             tabelle[v][n] = entfernung(s.liste[v],s.liste[n]);
    }
    
    public double entfernung(Stadt von, Stadt nach)
    {
       double dx = nach.x - von.x;
       double dy = nach.y - von.y;
       
       return Math.sqrt(dx*dx + dy*dy);
    }
}
Erläuterung

Es werden 16 x 16 Entfernungen berechnet und in dem Array gespeichert. Mit Hilfe der Methode entfernung() kann jede einzelne Zelle des Arrays ausgelesen werden.

Die Klasse Anwendung

Zielsetzung:

Diese Klasse steht für das Hauptprogramm des Projektes. Hier wird alles verwaltet und am Ende - im Teil 5 - wird die berechnete "optimale" Tour graphisch dargestellt.

Die Entfernungstabelle wurde mit Hilfe der Konsole und des Objektinspektors von BlueJ getestet. Daher macht es hier wenig Sinn, auf die Anwendung einzugehen. Diese wurde in dieser dritten Version nicht verändert.

Aus Zeit- und organisatorischen Gründen konnte ich diesen Workshop leider noch nicht fortsetzen. Ich hoffe aber, dass er in diesem Schuljahr fertig wird, wenn ich das Thema wieder im Informatikunterricht behandle.