예제 #1
0
        public void InputDomainToExcel(string path)
        {
            DataTable labelDt = new DataTable();

            for (int i = 0; i < highbounds[0] - lowbounds[0] + 1; i++)
            {
                labelDt.Columns.Add(i.ToString(), Type.GetType("System.Double"));
            }

            for (int i = 0; i < labelMatrix.RowCount; i++)
            {
                var row = labelDt.NewRow();
                row.ItemArray = labelMatrix.Row(labelMatrix.RowCount - i - 1).Select(x => (object)x).ToArray();
                labelDt.Rows.Add(row);
            }

            DateTime time     = DateTime.Now;
            string   format   = "MM-dd-HH-mm-ss";
            string   timeStr  = time.ToString(format);
            string   filePath = path;

            if (File.Exists(filePath))
            {
                File.Delete(filePath);
            }

            ExcelOperation.dataTableListToExcel(new List <DataTable>()
            {
                labelDt
            }, false, filePath, true);
            Console.WriteLine("Finish Write Labels to Excel");
        }
예제 #2
0
        static public void GenerateStatisticsInExcelForDataPerNumOfLabels(int numOfLabels, string rootPath)
        {
            DataTable dt = new DataTable();

            dt.Columns.Add("Max", Type.GetType("System.Double"));
            dt.Columns.Add("Q3", Type.GetType("System.Double"));
            dt.Columns.Add("Median", Type.GetType("System.Double"));
            dt.Columns.Add("Q1", Type.GetType("System.Double"));
            dt.Columns.Add("Min", Type.GetType("System.Double"));
            dt.Columns.Add("Avg", Type.GetType("System.Double"));

            string[] Files           = Directory.GetFiles(rootPath);
            string[] targetFileNames = Files.Where(x => x.Contains("Data_" + numOfLabels.ToString()) == true).ToArray();
            for (int i = 0; i < targetFileNames.Length; i++)
            {
                Console.WriteLine(targetFileNames[i]);
                var      statistics = ProcessDataExcel(targetFileNames[i]);
                DataRow  dr         = dt.NewRow();
                object[] statData   = new object[6]
                {
                    statistics.Item1,
                    statistics.Item2,
                    statistics.Item3,
                    statistics.Item4,
                    statistics.Item5,
                    statistics.Item6
                };
                dr.ItemArray = statData;
                dt.Rows.Add(dr);
            }
            ExcelOperation.dataTableListToExcel(new List <DataTable>()
            {
                dt
            }, true,
                                                @"\\khensu\Home06\yangs\Desktop\Non-Concutive" + "stat_" + numOfLabels.ToString() + ".xlsx", true);
        }
예제 #3
0
        static public Tuple <double, double, double, double, double, double> ProcessDataExcel(string filePath)
        {
            DataSet       ds                = ExcelOperation.ReadExcelFile(filePath);
            DataTable     dt                = ds.Tables[1];
            var           enumerableDt      = dt.AsEnumerable();
            List <double> goodnessOfFitRuns = new List <double>();

            for (int i = 0; i < dt.Columns.Count / 2; i++)
            {
                if ((double)dt.Rows[2].ItemArray[2 * i] != 0)
                {
                    double finalGoodnessOfFit = (double)enumerableDt.Min(x =>
                    {
                        if ((double)x.ItemArray[2 * i] != 0)
                        {
                            return((double)x.ItemArray[2 * i]);
                        }
                        else
                        {
                            return(99999.0);
                        }
                    });
                    goodnessOfFitRuns.Add(finalGoodnessOfFit);
                    Console.WriteLine("Run:#{0}, GOF: #{1}", i, finalGoodnessOfFit);
                }
            }

            double median = -1;
            double Q1     = -1;
            double Q3     = -1;

            goodnessOfFitRuns.Sort();
            if (goodnessOfFitRuns.Count % 2 == 0)
            {
                double medianA = goodnessOfFitRuns[goodnessOfFitRuns.Count / 2 - 1];
                double medianB = goodnessOfFitRuns[goodnessOfFitRuns.Count / 2];
                median = (medianA + medianB) / 2;
            }
            else
            {
                median = goodnessOfFitRuns[goodnessOfFitRuns.Count / 2];
            }
            if ((goodnessOfFitRuns.Count / 2) % 2 == 0)
            {
                double Q1A = goodnessOfFitRuns[(goodnessOfFitRuns.Count / 2) / 2 - 1];
                double Q1B = goodnessOfFitRuns[(goodnessOfFitRuns.Count / 2) / 2];
                Q1 = (Q1A + Q1B) / 2;
                double Q3A = goodnessOfFitRuns[(goodnessOfFitRuns.Count / 2) + (goodnessOfFitRuns.Count / 2) / 2 - 1];
                double Q3B = goodnessOfFitRuns[(goodnessOfFitRuns.Count / 2) + (goodnessOfFitRuns.Count / 2) / 2];
                Q3 = (Q3A + Q3B) / 2;
            }
            else
            {
                Q1 = goodnessOfFitRuns[(goodnessOfFitRuns.Count / 2) / 2];
                Q3 = goodnessOfFitRuns[(goodnessOfFitRuns.Count / 2) / 2 + (goodnessOfFitRuns.Count / 2)];
            }
            double avg = goodnessOfFitRuns.Average();

            List <double> outLiers  = new List <double>();
            double        lowLimit  = Q1 - 1.5 * (Q3 - Q1);
            double        highLimit = Q3 + 1.5 * (Q3 - Q1);

            outLiers = goodnessOfFitRuns.Where(x => x <lowLimit || x> highLimit).ToList();

            for (int i = 0; i < outLiers.Count; i++)
            {
                goodnessOfFitRuns.Remove(outLiers[i]);
            }

            double max = goodnessOfFitRuns.Max();
            double min = goodnessOfFitRuns.Min();

            return(new Tuple <double, double, double, double, double, double>(max, Q3, median, Q1, min, avg));
        }
        public static void BestMoveExperimentsB()
        {
            rootPath = @"C:\Users\shiya\Desktop\realSUT\bestMove\";
            maxGen   = 3000;
            // Real SUT
            RealSUT bestMove = new RealSUT();

            bestMove.sutBestMove(); // Setup triggering probabilities in bins
            GALS gals = new GALS(maxGen, bestMove.numOfLabels, bestMove);

            record record = new record();

            record.fitnessGen       = new double[maxGen];
            record.goodnessOfFitGen = new double[maxGen];
            record.bestSolution     = new solution();

            gals.ExpectedTriggeringProbSetUp();
            gals.GAInitialization();
            gals.AlgorithmStart(record);

            //Write adjusted and overall fitnesses into excel
            DataTable dataTable = new DataTable();

            dataTable.Columns.Add("adjustedFitness", Type.GetType("System.Double"));
            dataTable.Columns.Add("overallFitness", Type.GetType("System.Double"));
            for (int u = 0; u < record.fitnessGen.Length; u++)
            {
                object[] rowData = new object[2];
                rowData[0] = (object)record.fitnessGen[u];
                rowData[1] = (object)record.goodnessOfFitGen[u];
                var row = dataTable.NewRow();
                row.ItemArray = rowData;
                dataTable.Rows.Add(row);
            }
            string filePath = rootPath + "fitnesses.xlsx";

            if (!File.Exists(filePath))
            {
                ExcelOperation.dataTableListToExcel(new List <DataTable>()
                {
                    dataTable
                }, false, filePath, true);
            }
            else
            {
                ExcelOperation.dataTableListToExcel(new List <DataTable>()
                {
                    dataTable
                }, false, filePath, false);
            }

            //Write bins setup into excel
            DataTable dataTablebinssetup = new DataTable();

            dataTablebinssetup.Columns.Add("binssetup", Type.GetType("System.Double"));
            for (int u = 0; u < record.bestSolution.binSetup.Length; u++)
            {
                object[] rowData = new object[1];
                rowData[0] = (object)record.bestSolution.binSetup[u];
                var row = dataTablebinssetup.NewRow();
                row.ItemArray = rowData;
                dataTablebinssetup.Rows.Add(row);
            }
            filePath = rootPath + "binsSetup.xlsx";
            if (!File.Exists(filePath))
            {
                ExcelOperation.dataTableListToExcel(new List <DataTable>()
                {
                    dataTablebinssetup
                }, false, filePath, true);
            }
            else
            {
                ExcelOperation.dataTableListToExcel(new List <DataTable>()
                {
                    dataTablebinssetup
                }, false, filePath, false);
            }

            // Write Set Probabilities into excel
            DataTable dataTableSetProbabilities = new DataTable();

            dataTableSetProbabilities.Columns.Add("Set Prob.", Type.GetType("System.Double"));
            for (int u = 0; u < record.bestSolution.setProbabilities.Length; u++)
            {
                object[] rowData = new object[1];
                rowData[0] = (object)record.bestSolution.setProbabilities[u];
                var row = dataTableSetProbabilities.NewRow();
                row.ItemArray = rowData;
                dataTableSetProbabilities.Rows.Add(row);
            }
            filePath = rootPath + "setProbabilities.xlsx";
            if (!File.Exists(filePath))
            {
                ExcelOperation.dataTableListToExcel(new List <DataTable>()
                {
                    dataTableSetProbabilities
                }, false, filePath, true);
            }
            else
            {
                ExcelOperation.dataTableListToExcel(new List <DataTable>()
                {
                    dataTableSetProbabilities
                }, false, filePath, false);
            }

            // Write total running time into excel
            DataTable totalRunningTimeTable = new DataTable();

            totalRunningTimeTable.Columns.Add("Total Running Time", Type.GetType("System.Double"));
            object[] runningtime    = new object[] { record.bestSolution.totalRunTime };
            var      rowRunningTime = totalRunningTimeTable.NewRow();

            rowRunningTime.ItemArray = runningtime;
            totalRunningTimeTable.Rows.Add(rowRunningTime);
            filePath = rootPath + "runningTime.xlsx";
            if (!File.Exists(filePath))
            {
                ExcelOperation.dataTableListToExcel(new List <DataTable>()
                {
                    totalRunningTimeTable
                }, false, filePath, true);
            }
            else
            {
                ExcelOperation.dataTableListToExcel(new List <DataTable>()
                {
                    totalRunningTimeTable
                }, false, filePath, false);
            }
        }
        public async static void ExperimentsA(int[] numOfLabelArray, double[][] entropy, string root)
        {
            rootPath = root + @"\";
            for (int i = 0; i < numOfLabelArray.Length; i++)
            {
                for (int k = 0; k < entropy[i].Count(); k++)
                {
                    entropy[i][k] *= Math.Log(numOfLabelArray[i], 2);
                }
            }

            string fileName;

            for (int i = 0; i < numOfLabelArray.Count(); i++)
            {
                for (int j = 0; j < entropy[0].Count(); j++)
                {
                    fileName = numOfLabelArray[i].ToString() + "_" + entropy[i][j].ToString() + "_";
                    record[]    recordsRuns = new record[runTimes];
                    List <Task> lTasks      = new List <Task>();
                    for (int run = 0; run < runTimes; run++)
                    {
                        recordsRuns[run]                  = new record();
                        recordsRuns[run].fitnessGen       = new double[maxGen];
                        recordsRuns[run].goodnessOfFitGen = new double[maxGen];
                        recordsRuns[run].bestSolution     = new solution();
                        recordsRuns[run].bestSolution.setProbabilities = new double[numOfLabelArray[i]];
                    }

                    List <Task> taskList = new List <Task>();
                    bool        finish   = false;

                    await Task.Run(() =>
                    {
                        int count = 0;
                        while (finish == false)
                        {
                            if (count < runTimes)
                            {
                                taskList.Add(Task.Run(() =>
                                {
                                    GlobalVar.mutex_K.WaitOne();
                                    int id = count;
                                    count  = count + 1;
                                    if (id > runTimes - 1)
                                    {
                                        GlobalVar.mutex_K.ReleaseMutex();
                                        return;
                                    }
                                    SyntheticSUT sutTypeC = new SyntheticSUT().SUTB(numOfLabelArray[i], entropy[i][j]);
                                    sutTypeC.InputDomainToExcel(rootPath + @"Label_" + fileName + "_" + "r" + id.ToString() + ".xlsx");
                                    GlobalVar.mutex_K.ReleaseMutex();
                                    GALS gals = new GALS(maxGen, numOfLabelArray[i], sutTypeC);
                                    gals.ExpectedTriggeringProbSetUp();
                                    sutTypeC.BinsInitialization();
                                    gals.GAInitialization();
                                    gals.AlgorithmStart(recordsRuns[id]);
                                    Console.WriteLine(id);
                                }));
                            }
                            else
                            {
                                if (taskList.Count == 0)
                                {
                                    finish = true;
                                }
                                for (int ti = 0; ti < taskList.Count; ti++)
                                {
                                    if (taskList[ti].Status == TaskStatus.RanToCompletion)
                                    {
                                        taskList.Remove(taskList[ti]);
                                        break;
                                    }
                                }
                            }

                            while (taskList.Count == numberOfConcurrentTasks)
                            {
                                for (int ti = 0; ti < taskList.Count; ti++)
                                {
                                    if (taskList[ti].Status == TaskStatus.RanToCompletion)
                                    {
                                        taskList.Remove(taskList[ti]);
                                        break;
                                    }
                                }
                            }
                        }
                    });

                    // Data Print to Excel
                    DataTable dataTable = new DataTable();

                    for (int k = 0; k < runTimes * 2; k++)
                    {
                        dataTable.Columns.Add(k.ToString(), Type.GetType("System.Double"));
                    }

                    for (int u = 0; u < recordsRuns[0].goodnessOfFitGen.Count(); u++)
                    {
                        object[] rowData = new object[runTimes * 2];

                        for (int k = 0; k < runTimes; k++)
                        {   // Remember, calculating true or goodnessOfFit can't be used in
                            // Total Running Time calculation
                            rowData[k * 2 + 0] = (object)recordsRuns[k].goodnessOfFitGen[u];
                            rowData[k * 2 + 1] = (object)recordsRuns[k].fitnessGen[u];
                        }
                        var row = dataTable.NewRow();
                        row.ItemArray = rowData;
                        dataTable.Rows.Add(row);
                    }

                    string filePath = rootPath + @"Data_" + fileName + ".xlsx";
                    if (File.Exists(filePath))
                    {
                        File.Delete(filePath);
                    }
                    ExcelOperation.dataTableListToExcel(new List <DataTable>()
                    {
                        dataTable
                    }, false, filePath, true);

                    //Write solution to Excel
                    //Input label mapping
                    for (int k = 0; k < runTimes; k++)
                    {
                        DataTable dataTable2 = new DataTable();
//Record Solution

                        for (int u = 0; u < numOfLabelArray[i] + 1; u++)
                        {
                            dataTable2.Columns.Add(u.ToString(), Type.GetType("System.Double"));
                        }
#if false
                        int xLength = recordsRuns[k].bestSolution.inputsinSets.Length;
                        int yLength = recordsRuns[k].bestSolution.inputsinSets[0].Length;
                        for (int u = 0; u < xLength * yLength; u++)
                        {
                            object[] rowData2 = new object[3];
                            rowData2[0] = (object)(u % xLength);
                            rowData2[1] = (object)(u / yLength);
                            rowData2[2] = (object)recordsRuns[k].bestSolution.inputsinSets[u % xLength][u / yLength];
                            var row2 = dataTable2.NewRow();
                            row2.ItemArray = rowData2;
                            dataTable2.Rows.Add(row2);
                        }
#endif
                        //Set Probabilities
                        var rowData3 = recordsRuns[k].bestSolution
                                       .setProbabilities.Select(x => (object)x).ToArray();
                        var row3 = dataTable2.NewRow();
                        row3.ItemArray = rowData3;
                        dataTable2.Rows.Add(row3);

                        //Total RunTime
                        object[] rowData5 = new object[1];
                        rowData5[0] = (object)recordsRuns[k].bestSolution.totalRunTime;
                        var row5 = dataTable2.NewRow();
                        row5.ItemArray = rowData5;
                        dataTable2.Rows.Add(row5);

                        filePath = rootPath + @"Solution_" + fileName + ".xlsx";

                        if (!File.Exists(filePath))
                        {
                            ExcelOperation.dataTableListToExcel(new List <DataTable>()
                            {
                                dataTable2
                            }, false, filePath, true);
                        }
                        else
                        {
                            ExcelOperation.dataTableListToExcel(new List <DataTable>()
                            {
                                dataTable2
                            }, false, filePath, false);
                        }
                    }
                }
            }
        }