/// <summary> /// erstellt die Liste aller Verbindungen, anhand aller Einträge /// in der CTSPPointList /// </summary> public void generateFromPointList(CTSPLibFileParser.E_EDGE_WEIGHT_TYPE edgeWeightType) { if (edgeWeightType == CTSPLibFileParser.E_EDGE_WEIGHT_TYPE.E_EXPLICIT) { throw new Exception("Unbekannter Fehler in der Verarbeitung."); } // jetzt kann die Liste neu gefüllt werden CTSPPointList pointList = CTSPPointList.getInstance(); // die Liste neu initialiseren initList(pointList.length()); for (int originCityIndex = 0; originCityIndex < pointList.length(); originCityIndex++) { for (int destinationCityIndex = originCityIndex + 1; destinationCityIndex < pointList.length(); destinationCityIndex++) { addConnection(new CConnection(pointList.getPoint(originCityIndex), pointList.getPoint(destinationCityIndex), edgeWeightType)); Debug.WriteLineIf(length() % 100000 == 0, length()); } // Zeit für die GC lassen // Sonst gibt es Fehler, weil diese nicht genug Zeit bekommt ihr Ding zu machen System.Threading.Thread.Sleep(1); } Debug.WriteLine("Verbindungen erstellt: " + length()); }
/// <summary> /// Konstruktor /// </summary> /// <param name="tspPoint1">Punkt 1 der Verbindung</param> /// <param name="tspPoint2">Punkt 2 der Verbindung</param> /// <param name="distanceCalculation">Gibt an auf welche Art die Entfernung zwischen den Punkten berechnet werden soll</param> /// <param name="initialPheromone">Pheromon das die Verbindung von Beginn an haben soll</param> public CConnection(CTSPPoint tspPoint1, CTSPPoint tspPoint2, CTSPLibFileParser.E_EDGE_WEIGHT_TYPE distanceCalculation, float initialPheromone = 0) { mTSPPoint1 = tspPoint1; mTSPPoint2 = tspPoint2; mDistanceCalculation = distanceCalculation; if (initialPheromone <= 0) { mPheromone = MIN_PHEROMONE; } else { mPheromone = initialPheromone; } calculateDistance(); // es wurde eine Verbindung erzeugt .. also ein Schritt erfolgreich abgearbeteitet CProgressManager.stepDone(); }