コード例 #1
0
ファイル: OptimalSolver.cs プロジェクト: vvancak/ai
        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);
        }
コード例 #2
0
 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]);
 }
コード例 #3
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);
        }
コード例 #4
0
ファイル: PlannerWrapper.cs プロジェクト: vvancak/ai
        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);
        }
コード例 #5
0
ファイル: TSPSolution.cs プロジェクト: vvancak/ai
        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);
        }
コード例 #6
0
ファイル: CentroidBubbleSolver.cs プロジェクト: vvancak/ai
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
ファイル: RandomSolver.cs プロジェクト: vvancak/ai
        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);
        }
コード例 #9
0
ファイル: TreeAproximativeSolver.cs プロジェクト: vvancak/ai
        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;
        }
コード例 #10
0
        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;
            }
        }
コード例 #11
0
ファイル: TreeAproximativeSolver.cs プロジェクト: vvancak/ai
 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);
     }
 }