public TSPSolution solve(TSPInput input) { GreedySolver s = new GreedySolver(); best = s.solve(input).computeDistance() + 1; bestSolution = new int[input.nodesCount]; List <int> current = new List <int>(); current.Add(0); List <int> remaining = new List <int>(); for (int i = 1; i < input.nodesCount; i++) { remaining.Add(i); } trySolve(input, current, remaining, 0); TSPSolution result = new TSPSolution(input); for (int i = 0; i < input.nodesCount - 1; i++) { result.setSuccessor(bestSolution[i], bestSolution[i + 1]); } result.setSuccessor(bestSolution[input.nodesCount - 1], 0); return(result); }
public void applyToTSPSolution(TSPSolution sol) { for (int i = 0; i < size - 1; i++) { sol.setSuccessor(perm[i], perm[i + 1]); } sol.setSuccessor(perm[size - 1], perm[0]); }
public TSPSolution convertToTSPSol() { TSPSolution sol = new TSPSolution(input); for (int i = 0; i < size - 1; i++) { sol.setSuccessor(perm[i], perm[i + 1]); } sol.setSuccessor(perm[size - 1], perm[0]); return(sol); }
private TSPSolution convertPlan(List <int> plan, SASPlan.Domain domain, TSPInput input) { TSPSolution sol = new TSPSolution(input); int j = 0; foreach (var item in plan) { SASPlan.Operator op = domain.operators[item]; sol.setSuccessor(j, op.effects[0].effectValue); j = op.effects[0].effectValue; } sol.setSuccessor(j, 0); return(sol); }
internal static TSPSolution fromString(string result, TSPInput inp) { string[] points = result.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); if (points.Length != inp.nodesCount) { System.Windows.Forms.MessageBox.Show("Spatna delka reseni.\nReseni ma mit delku " + inp.nodesCount + ". Vase reseni ma delku " + points.Length); return(null); } TSPSolution sol = new TSPSolution(inp); for (int i = 0; i < points.Length - 1; i++) { sol.setSuccessor(int.Parse(points[i]) - 1, int.Parse(points[i + 1]) - 1); } sol.setSuccessor(int.Parse(points[points.Length - 1]) - 1, int.Parse(points[0]) - 1); return(sol); }
public TSPSolution solve(TSPInput input) { computeCentroid(input); int[] points = new int[input.nodesCount]; for (int i = 0; i < input.nodesCount; i++) { points[i] = i; } Array.Sort(points, comparer); TSPSolution sol = new TSPSolution(input); for (int i = 0; i < input.nodesCount - 1; i++) { sol.setSuccessor(points[i], points[i + 1]); } sol.setSuccessor(points[input.nodesCount - 1], points[0]); return(sol); }
public override TSPSolution solve(TSPInput input) { available.Clear(); for (int i = 1; i < input.nodesCount; i++) { available.Add(i); } TSPSolution result = new TSPSolution(input); int j = 0; for (int i = 0; i < input.nodesCount - 1; i++) { int best = findBest(j, input); result.setSuccessor(j, best); j = best; available.Remove(best); } result.setSuccessor(j, 0); return(result); }
public TSPSolution solve(TSPInput input) { available.Clear(); for (int i = 1; i < input.nodesCount; i++) { available.Add(i); } TSPSolution result = new TSPSolution(input); int j = 0; for (int i = 0; i < input.nodesCount - 1; i++) { int randomIndex = r.Next(available.Count); result.setSuccessor(j, available[randomIndex]); j = available[randomIndex]; available.RemoveAt(randomIndex); } result.setSuccessor(j, 0); return(result); }
public TSPSolution solve(TSPInput input) { computeSpanningTree(input); TSPSolution result = new TSPSolution(input); visited.Clear(); labelTreePreOrder(0, result); result.setSuccessor(lastNodeLabeled, 0); return(result); //return null; }
private void addEdgesToResult(TSPSolution result) { int node = 0, succ = 0, pred = -1; for (int i = 0; i < result.inp.nodesCount; i++) { succ = getSuccessor(node, pred); result.setSuccessor(node, succ); pred = node; node = succ; } }
private void labelTreePreOrder(int start, TSPSolution solution) { if (visited.Contains(start)) { return; } lastNodeLabeled = start; visited.Add(start); foreach (var item in successorsList[start]) { if (visited.Contains(item)) { continue; } solution.setSuccessor(lastNodeLabeled, item); labelTreePreOrder(item, solution); } }