//[TestCase("tsp3.txt", 14.00)] public void ComputeTest(string fileName, double expected) { var lines = File.ReadAllLines(fileName); var n = int.Parse(lines[0]); var list = new List <(double x, double y)>(); foreach (var ln in lines.Skip(1).Select(l => l.Split(" "))) { var x = double.Parse(ln[0]); var y = double.Parse(ln[1]); list.Add((x, y)); } var clique = new double[n + 1, n + 1]; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { var a = list[i]; var b = list[j]; var dist = TravelingSalesman.EuclideanDistance(a.x, a.y, b.x, b.y);; clique[i + 1, j + 1] = dist; clique[j + 1, i + 1] = dist; } } _algo = new TravelingSalesman(clique, n); var result = _algo.Compute(); Assert.That(Math.Round(result, 2), Is.EqualTo(expected)); }
public void GetAllElementsSetTest() { _algo = new TravelingSalesman(null, 10); var all = _algo.GetAllElementsSet(); Assert.That(all, Is.EqualTo(Convert.ToInt32("1111111111", 2))); }
public void SetWithoutTest() { _algo = new TravelingSalesman(null, 10); var set = Convert.ToInt32("000111", 2); Assert.That(_algo.SetWithout(set, 3), Is.EqualTo(3)); }
public void ContainsTest() { _algo = new TravelingSalesman(null, 10); var set = Convert.ToInt32("000100", 2); Assert.That(_algo.Contains(set, 3), Is.True); Assert.That(_algo.Contains(set, 10), Is.False); Assert.That(_algo.Contains(set, 1), Is.False); }
public void GetElementsTest() { _algo = new TravelingSalesman(null, 10); var elements = _algo.GetElements(Convert.ToInt32("1010100001", 2)); Assert.That(elements.Count, Is.EqualTo(4)); Assert.That(elements.Contains(1), Is.True); Assert.That(elements.Contains(6), Is.True); Assert.That(elements.Contains(8), Is.True); Assert.That(elements.Contains(10), Is.True); }
protected void btnOptimizeRoute_Click(object sender, EventArgs e) { List <airport> lst = new List <airport>(AirportList.ListsFromRoutes(txtAirports.Text).Result[0].UniqueAirports); if (lst.Count == 0) { return; } IEnumerable <IFix> path = TravelingSalesman.ShortestPath(lst); txtAirports.Text = HttpUtility.HtmlEncode(String.Join(" ", path.Select(ap => ap.Code))); btnMapEm_Click(sender, e); }
public void NextSetsTest() { _algo = new TravelingSalesman(null, 10); var next = _algo.NextSets(new List <int>() { 1 }); Assert.That(next.Count, Is.EqualTo(9)); Assert.That(next[0], Is.EqualTo(Convert.ToInt32("11", 2))); Assert.That(next[8], Is.EqualTo(Convert.ToInt32("1000000001", 2))); next = _algo.NextSets(next); Assert.That(next.Count, Is.EqualTo(36)); Assert.That(next.Contains(Convert.ToInt32("0000000111", 2)), Is.True); Assert.That(next.Contains(Convert.ToInt32("1000100001", 2)), Is.True); next = _algo.NextSets(next); Assert.That(next.Contains(Convert.ToInt32("0001000111", 2)), Is.True); Assert.That(next.Contains(Convert.ToInt32("1010100001", 2)), Is.True); Assert.That(next.Count, Is.EqualTo(84)); }
public double Compute(City[] cities) { var n = cities.Count(); var unvisited = new HashSet <int>(); var result = 0d; for (int i = 1; i < n; i++) { unvisited.Add(i); } var last = 0; while (unvisited.Count > 0) { var minDist = double.MaxValue; var minId = n; foreach (var curId in unvisited) { var curDist = TravelingSalesman.EuclideanDistance(cities[last].x, cities[last].y, cities[curId].x, cities[curId].y); if (curDist < minDist || (curDist == minDist && curId < minId)) { minId = curId; minDist = curDist; } } unvisited.Remove(minId); last = minId; result += minDist; } return(result + TravelingSalesman.EuclideanDistance(cities[0].x, cities[0].y, cities[last].x, cities[last].y)); }
static void Main(string[] args) { TravelingSalesman ts = new TravelingSalesman(); ts.City("Greenwich", 0.0, 0.0); }