Example #1
0
        static void branches(int[,] matrix, CompareResults cr)
        {
            Stopwatch branchesWatch = new Stopwatch();
            branchesWatch.Start();
            List<Salesman> ways = new List<Salesman>();
            Salesman slm = new Salesman(matrix, N, null);
            Salesman best_way = slm;
            slm.step = N;
            slm.Prepare();
            bool end = false;
            int min = INF;
            while (!end)
            {
                //включаем вершину
                Salesman sal1 = new Salesman(decreaseMatrix(slm), N, slm);
                sal1.matrix[slm.index_i, slm.index_j] = INF;
                sal1.step = slm.step - 1;
                slm.childs.Add(sal1);
                sal1.Prepare();
                sal1.rootEstimation += slm.rootEstimation;
                //Console.WriteLine(sal1.rootEstimation + "   " + sal1.step.ToString());
                ways.Add(sal1);

                //не включаем вершину
                Salesman sal2 = new Salesman(slm.matrix, N, slm);
                sal2.matrix[slm.index_i, slm.index_j] = INF;
                sal2.step = slm.step - 1;
                slm.childs.Add(sal2);
                sal2.Prepare();
                sal2.rootEstimation = slm.secondSanction + slm.rootEstimation;
                //Console.WriteLine(sal2.rootEstimation + "   " + sal2.step.ToString());
                ways.Add(sal2);

                //проверка
                min = INF;
                foreach (Salesman s in ways)
                {
                    if ((s.rootEstimation < min) && (s.childs.Count == 0))
                    {
                        slm = s;
                        min = s.rootEstimation;
                    }
                }
                if ((slm.step == 0))// && (slm == sal1))//&& (sal2.rootEstimation>=INF))
                    end = true;
            }
            branchesWatch.Stop();
            cr.branchesTime = branchesWatch.Elapsed.TotalMilliseconds;
            cr.branchesWight = slm.rootEstimation;
        }
Example #2
0
        static void Main(string[] args)
        {
            List<CompareResults> results = new List<CompareResults>();
            CompareResults res = new CompareResults();
            StreamWriter strw = File.AppendText("max_values_test.txt");
            for ( N = 6; N < 16; N++)
            {
                int[,] matrix = new int[N, N];
                int[,] m2 = new int[N, N];
                string filename = String.Format("just_results_test_{0}.txt", N.ToString());
                StreamWriter writer = File.AppendText(filename);
                for (int j = 0; j < highB; j++)
                {
                    matrix = ReadMatrixFromFile(N, j);
                    optimalPath = new int[N];
                    markedCities = new bool[N];
                    path = new int[N];
                    m2 = matrix;
                    CompareResults cr = new CompareResults();
                    cr.matrix = matrix;
                    FullSearch(matrix, cr);
                    Greedy(matrix, cr);
                    branches(m2, cr);
                    results.Add(cr);

                    writer.WriteLine(String.Format("{0},{1},{2}", cr.fullsearchWeight, cr.greedyWeight, cr.branchesWight));
                    writer.WriteLine(String.Format("{0},{1},{2}", cr.fullsearchTime, cr.greedyTime, cr.branchesTime));
                    writer.WriteLine("********************");

                    Console.WriteLine(String.Format("FS = {0}, GR = {1}, BB = {2}", cr.fullsearchWeight, cr.greedyWeight, cr.branchesWight));
                    Console.WriteLine(String.Format("FS = {0}, GR = {1}, BB = {2}", cr.fullsearchTime, cr.greedyTime, cr.branchesTime));
                    Console.WriteLine("********************");
                }
                writer.WriteLine("average/{0}/{1}/{2}", results.Sum(x => x.fullsearchTime) / highB, results.Sum(x => x.greedyTime) / highB, results.Sum(x => x.branchesTime) / highB);
                writer.WriteLine(" ");
                int m_b = 0;
                int m_g = 0;
                foreach (CompareResults r in results)
                {
                    if (r.branchesWight == r.fullsearchWeight)
                        m_b++;
                    if (r.greedyWeight == r.fullsearchWeight)
                        m_g++;
                }
                writer.WriteLine("Accuracy GR: {0}", 100 * m_g / results.Count);
                writer.WriteLine("Accuracy BR: {0}", 100 * m_b / results.Count);

                writer.Close();
                //strw.WriteLine(N.ToString());
                strw.Write("{3}/{0}/{1}/{2}", results.Max(x => x.fullsearchTime), results.Max(x => x.greedyTime), results.Max(x => x.branchesTime), N.ToString());
                strw.WriteLine();
                results.Clear();
            }
            strw.Close();
            Console.WriteLine("Done");
            Console.ReadKey();
        }
Example #3
0
 // жадный
 static void Greedy(int[,] matrix, CompareResults cr)
 {
     List<int> Path = new List<int>();
     Path.Add(0);
     Stopwatch watchTCP = new Stopwatch();
     watchTCP.Start();
     while (Path.Count != N)
     {
         int minIndex = MinIndex(Path[Path.Count-1], matrix, Path);
         Path.Add(minIndex);
     }
     watchTCP.Stop();
     cr.greedyTime = watchTCP.Elapsed.TotalMilliseconds ;
     cr.greedyWeight = CalculateWeight(Path.ToArray(), matrix);
 }
Example #4
0
 static void FullSearch(int [,] matrix, CompareResults cr)
 {
     for (int i = 0; i < N; i++)
     {
         markedCities[i] = false;
     }
     Stopwatch watchFS = new Stopwatch();
     watchFS.Start();
     markedCities[0] = true;
     weight = INF;
     int[] path = new int[N];
     FS(matrix, 0, path);
     watchFS.Stop();
     cr.fullsearchWeight = weight;
     cr.fullsearchTime = watchFS.Elapsed.TotalMilliseconds;
 }
Example #5
0
 static void show()
 {
     List<CompareResults> results = new List<CompareResults>();
     CompareResults res = new CompareResults();
     N = 6;
     int[,] matrix = new int[N, N];
     int[,] m2 = new int[N, N];
     //matrix = GenerateMatrix(N);
     for (int i = 13; i < 14; i++)
     {
         matrix = ReadMatrixFromFile(N, i);
         optimalPath = new int[N];
         markedCities = new bool[N];
         path = new int[N];
         m2 = matrix;
         CompareResults cr = new CompareResults();
         cr.matrix = matrix;
         FullSearch(matrix, cr);
         Greedy(matrix, cr);
         branches(m2, cr);
         results.Add(cr);
     }
         foreach (CompareResults r in results)
         {
             Console.WriteLine(String.Format("FS = {0}, GR = {1}, BB = {2}", r.fullsearchTime, r.greedyTime, r.branchesTime));
             Console.WriteLine(String.Format("FS = {0}, GR = {1}, BB = {2}", r.fullsearchWeight, r.greedyWeight, r.branchesWight));
         }
     Console.WriteLine("Done");
     Console.ReadKey();
 }
Example #6
0
        static void old_main()
        {
            List<CompareResults> results = new List<CompareResults>();
            CompareResults res = new CompareResults();
            StreamWriter strw = File.AppendText("max_values_test.txt");
            for (N = 3; N < 8; N++)
            {
                int[,] matrix = new int[N, N];
                int[,] m2 = new int[N, N];
                for (int j = 0; j < highB; j++)
                {
                    matrix = ReadMatrixFromFile(N, j);
                    //matrix = GenerateMatrix(N);
                    optimalPath = new int[N];
                    markedCities = new bool[N];
                    path = new int[N];
                    m2 = matrix;
                    CompareResults cr = new CompareResults();
                    cr.matrix = matrix;
                    FullSearch(matrix, cr);
                    Greedy(matrix, cr);
                    branches(m2, cr);
                    results.Add(cr);

                    //Console.WriteLine(String.Format("FS = {0}, GR = {1}, BB = {2}", cr.fullsearchWeight, cr.greedyWeight, cr.branchesWight));
                    //Console.WriteLine(String.Format("FS = {0}, GR = {1}, BB = {2}", cr.fullsearchTime, cr.greedyTime, cr.branchesTime));
                    //Console.WriteLine("********************");
                }
                int m_b = 0;
                int m_g = 0;
                foreach (CompareResults r in results)
                {
                    if (r.branchesWight == r.fullsearchWeight)
                        m_b++;
                    else
                        Console.WriteLine(String.Format("FS = {0}, BB = {1}", r.fullsearchWeight, r.branchesWight));
                    if (r.greedyWeight == r.fullsearchWeight)
                        m_g++;
                }
                Console.WriteLine("Dimension: {0}", N.ToString());
                Console.WriteLine("Accuracy GR: {0}", 100 * m_g / results.Count);
                Console.WriteLine("Accuracy BB: {0}", 100 * m_b / results.Count);
                Console.WriteLine("******************");
                results.Clear();
            }
            strw.Close();
            Console.WriteLine("Done");
            Console.ReadKey();
        }