示例#1
0
        public void create_Optimal_of_One_Max_Tree(string file_Name, int num_Vertex)
        {
            Random   rnd       = new Random();
            Evaluate eva_class = new Evaluate();

            int[] prufer_Number = initialize_Prufer(num_Vertex, rnd);
            int[,] edge_Weight = eva_class.convert_Prufer_to_Tree(prufer_Number, num_Vertex);

            ReadWriteFile ioFile = new ReadWriteFile();

            ioFile.write_Optimal_of_One_Max_Tree(file_Name, num_Vertex, edge_Weight);
            ioFile.draw_Plot_in_Matlab(Path.GetFileNameWithoutExtension(file_Name) + @".m", num_Vertex, edge_Weight);
        }
示例#2
0
        public void Heuristic_Clustered_Tree(string[] args)
        {
            #region Khai bao
            string instance_Name,
                   input_File_Data = "",
                   out_File_Data,
                   tempPath,
                   folder_Results = " ";
            int[] bstTour;
            double[,] edge_Matrix;  //Ma tran ket qua

            double[] bestFitness;

            string pattern = " ";
            Regex  myRegex = new Regex(pattern);
            Regex  rg      = new Regex(@"\s+");
            #endregion

            #region Read parameters
            try
            {
                if (args.Length <= 0)
                {
                    Console.Write("Number of parameters is incorrect, require > 9 parameters (you provided %d).\n\n", args.Length);
                    //print_Usage();
                    Console.ReadKey();
                }

                input_File_Data = args[1].Trim();
            }
            catch
            {
                Console.Write("Error parsing parameters.\n\n");
                //print_Usage();
            }

            //Đọc dữ liệu từng bài toán
            //Index đầu tiên là: problem_index (kiểu bài toán) ---> index tiếp theo là:  tên file dữ liệu -> bai toan 1 - 8 thi bo qua ten file du lieu

            if (!File.Exists(input_File_Data))
            {
                Console.WriteLine("Do not exist file: " + input_File_Data);
                return;
            }


            #endregion

            double[,] weight_Matrix;
            int[][] vertex_In_Cluster;
            int     num_Cluster,
                    num_Vertex,
                    source_Vertex;

            ioFile.read_File_Clusted_Tree(input_File_Data, out weight_Matrix, out vertex_In_Cluster, out num_Vertex, out num_Cluster, out source_Vertex);

            instance_Name = Path.GetFileName(input_File_Data);
            int alg_Index = Convert.ToInt32(args[0]);

            switch (alg_Index)
            {
            case 3:
                folder_Results = @"Results\BFS_Dijstra_Clustered_Tree";
                break;

            case 4:
                folder_Results = @"Results\Prim_Prim_Clustered_Tree";
                break;
            }

            Directory.CreateDirectory(folder_Results);

            folder_Results = folder_Results + @"\" + Path.GetFileNameWithoutExtension(instance_Name);
            Directory.CreateDirectory(folder_Results);

            //Neu da co file ket qua thi ko chay tiep
            out_File_Data = folder_Results + @"\" + Path.GetFileNameWithoutExtension(instance_Name) + @".opt";
            if (File.Exists(out_File_Data))
            {
                Console.WriteLine();
                return;
            }

            //Điều kiện dừng



            edge_Matrix = new double[1, 1];
            stGA.Start();
            switch (alg_Index)
            {
            case 3:
                Console.WriteLine("-----------------------------------------------------------------------------");
                Console.WriteLine("|   Algorithm        |           Instances            |            Best Cost|");
                Console.WriteLine("-----------------------------------------------------------------------------");

                Console.Write(String.Format("| {0,-18} | {1,-30} | {2, 19} |", "BFS_Dijstra", instance_Name, ""));
                BFS_Dijstra_Clustered_Tree(weight_Matrix, num_Vertex, num_Cluster, vertex_In_Cluster, source_Vertex, out edge_Matrix);
                break;

            case 4:
                Console.WriteLine("-----------------------------------------------------------------------------");
                Console.WriteLine("|   Algorithm        |           Instances            |            Best Cost|");
                Console.WriteLine("-----------------------------------------------------------------------------");

                Console.Write(String.Format("| {0,-18} | {1,-30} | {2, 19} |", "Prim_Prim", instance_Name, ""));
                Prim_Clustered_Tree(weight_Matrix, num_Vertex, num_Cluster, vertex_In_Cluster, source_Vertex, out edge_Matrix);
                break;
            }
            stGA.Stop();

            //Tinh cost
            double cost_Opt = eval_Class.clustered_Tree_Evaluate(edge_Matrix, weight_Matrix, num_Vertex, source_Vertex);

            int[,] aaa = new int[num_Vertex, num_Vertex];
            for (int i = 0; i < num_Vertex; i++)
            {
                for (int j = 0; j < num_Vertex; j++)
                {
                    aaa[i, j] = (int)edge_Matrix[i, j];
                }
            }
            ioFile.write_Opt_Solution_File(out_File_Data, -1, aaa, num_Vertex, cost_Opt, stGA.Elapsed.ToString(), false);

            ioFile.draw_Plot_in_Matlab(folder_Results + @"\" + Path.GetFileNameWithoutExtension(instance_Name) + @".m", num_Vertex, aaa);

            Console.SetCursorPosition(60, Console.CursorTop);
            Console.Write(string.Format("{0,18}", cost_Opt.ToString("0.00")));
            Console.WriteLine();
        }