//Fitness degerlerini dosya tipine gore hesaplayan fonksiyon //fitness fonksiyonumuz uzaklik hesabi oldugundan problemin tipi fitness fonksiyonumuzu da belirliyor. public void CalculateFitnessFunction(TspFile tspFile, EdgeWeightType edgeWeightType) { switch (edgeWeightType) { case EdgeWeightType.EUC_2D: tspFile.EuclidDistance(); break; case EdgeWeightType.MAX_2D: tspFile.MaximumDistance(); break; case EdgeWeightType.MAN_2D: tspFile.ManhattanDistance(); break; case EdgeWeightType.CEIL_2D: tspFile.CeilDistance(); break; default: break; } }
// Dosya okuma Fonksiyonu //Butun satirlari okuyup lines`a atiyor. // daha sonra string islemleri ile tspfile classina tanimliyoruz. void ReadFile() { listBox1.Items.Clear(); OpenFileDialog openFileDialog = new OpenFileDialog(); if (openFileDialog.ShowDialog() == DialogResult.OK) { string[] lines = File.ReadAllLines(openFileDialog.FileName); tspFile = new TspFile(); bool startCoordinat = false; bool rightFile = true; char[] seperators = new char[] { ' ' }; for (int i = 0; i < lines.Length; i++) { string line = lines[i].Trim(); if (line != "NODE_COORD_SECTION" && startCoordinat == false) { string before = line.Split(':')[0].Trim(); string after = line.Split(':')[1].Trim(); if (before == "NAME") { tspFile.name = after; } else if (before == "TYPE") { if (after == "TSP") { tspFile.type = after; } else { rightFile = false; /////// Dosya TSP degil ise yanlis dosya tipi break; } } else if (before == "COMMENT") { tspFile.comment = after; } else if (before == "DIMENSION") { tspFile.dimension = int.Parse(after); } else if (before == "EDGE_WEIGHT_TYPE") //tipi 2d olmayanlari okumuyor. { try { tspFile.edgeWeightType = (EdgeWeightType)Enum.Parse(typeof(EdgeWeightType), after); } catch (Exception) { rightFile = false; MessageBox.Show("Yanlış Dosya Formatı. Geçerli formatlar EUC_2D - MAX_2D - MAN_2D - CEIL_2D"); break; } } } else if (line == "NODE_COORD_SECTION") { startCoordinat = true; } else if (line != "EOF") { line = lines[i].Trim(); string[] splitLine = line.Split(seperators, StringSplitOptions.RemoveEmptyEntries); int index = int.Parse(splitLine[0]); double x = double.Parse(splitLine[1].Replace('.', ',')); double y = double.Parse(splitLine[2].Replace('.', ',')); tspFile.AddCity(index, x, y); } } if (rightFile) // Dosya tsp ve tipi 2d ise { listBox1.Items.Add(tspFile.name); listBox1.Items.Add(tspFile.comment); listBox1.Items.Add(tspFile.type); listBox1.Items.Add(tspFile.dimension); listBox1.Items.Add(tspFile.edgeWeightType); listBox1.Items.Add(tspFile.MaximumDistance()); for (int i = 0; i < tspFile.cityList.Count; i++) { listBox1.Items.Add(tspFile.cityList[i].index + ".city " + tspFile.cityList[i].x + " , " + tspFile.cityList[i].y); } } } }