コード例 #1
0
        private static double?GetTemparatureChecker(string i, CalucationData cal)
        {
            switch (i)
            {
            case "TemparatureAdaptive1":
                return(cal.Adaptive1);

            case "TemparatureAdaptive2":
                return(cal.Adaptive2);

            case "TemparatureAdaptive3":
                return(cal.Adaptive3);

            case "TemparatureAdaptive4":
                return(cal.Adaptive4);

            case "TemparatureExponential":
                return(cal.Exponential);

            case "TemparatureGeometric":
                return(cal.Geometric);

            case "TemparatureLinear":
                return(cal.Linear);

            case "TemparatureLogarithmic":
                return(cal.Logarithmic);

            default: throw new Exception(string.Format("Unexpected parameter name {0} for generating temparature test.", i));
            }
        }
コード例 #2
0
 private static void TemparatureTesting(string name, List <Air> airs, List <CalucationData> cUnitTest)
 {
     if (cUnitTest != null)
     {
         double tempartureChecker = Program.UserTZero;
         int    i = 0;
         //double prevSigmaT = -1;
         //bool changed = true;
         while (tempartureChecker >= Program.UserStopTemparation)
         {
             CalucationData iCal = Simulate(name + "_" + tempartureChecker, i, cUnitTest, Program.GetFlightData().ToArray());
             tempartureChecker = Program.GetTemparatureChecker(name, iCal).Value;
             //if (prevSigmaT != iCal.SigmaT.Value)
             //{
             //    prevSigmaT = iCal.SigmaT.Value;
             //    changed = true;
             //}
             //else
             //{
             //    changed = false;
             //}
             i++;
         }
     }
 }
コード例 #3
0
        public static CalucationData GetRawCalculationData(int iteration, List <Maintainance> maintainances)
        {
            int            countCal = Program.CalculationSeq++;
            CalucationData calData  = null;
            double         t        = 0;
            double         tt       = 0;



            for (int i = 0; i < maintainances.Count; i++)
            {
                Maintainance iM = maintainances[i];
                for (int j = 0; j < Program.MAX_AIR; j++)
                {
                    if (iM.Slot[j] != null)
                    {
                        ++t;
                    }
                }
            }


            for (int i = 0; i < Program.MAX_AIR; i++)
            {
                double iSlot = 0;
                for (int j = 0; j < maintainances.Count; j++)
                {
                    if (maintainances[j].Slot[i] != null)
                    {
                        ++iSlot;
                    }
                }
                tt += Math.Pow(iSlot, 2);
            }


            calData = new CalucationData(
                countCal,
                t,
                tt,
                iteration,
                maintainances
                );

            return(calData);
        }
コード例 #4
0
        public static CalucationData Simulate(string name, int iteration, List <CalucationData> cCalculation, params Air[] airs)
        {
            CalucationData       prevCalculation = cCalculation.LastOrDefault();
            List <MatrixCompare> checkList       = new List <MatrixCompare>();
            //Init matrix.
            List <Maintainance> cMaintain = null;
            CalucationData      cal       = null;

            if (iteration == 0)
            {
                Program.Reset();
                Program.TestNo = DateTime.Now.ToString("ddMMyyyy_hhmmss");

                List <Air> cAir      = new List <Air>(airs);
                int        countTick = 0;
                while ((_EndTime - Program.CurrentTime).TotalMinutes > -1)
                {
                    cAir.ForEach(f =>
                    {
                        if (f.DepartureTime >= Program.CurrentTime &&
                            f.Status != AirStatus.M
                            )
                        {
                            f.UpdateStatus();
                        }
                    });
                    Program.CurrentTime = Program.CurrentTime.AddMinutes(_Tick);

                    countTick++;
                }
                cMaintain = Matrix.Fixation(Matrix.MaintainanceCollection);
                cal       = ComputationUnit.GetRawCalculationData(iteration, cMaintain);
                cal.StartCalculation(0);
                cCalculation.Add(cal);



                FileHelper.AppendText(name.Replace(".", iteration + "."), "First Matrix", cal, checkList);
            }
            else
            {
                cMaintain = Program.Clone(prevCalculation.Schedules);

                int count = 0;
                foreach (var i in cMaintain)
                {
                    for (int j = 0; j < Program.MAX_AIR; j++)
                    {
                        if (i.Slot[j] != null)
                        {
                            checkList.Add(new MatrixCompare()
                            {
                                Before   = i.Slot[j].WaitingDurationLog,
                                Position = string.Format("({0},{1})", count, j)
                            });
                        }
                    }
                    count++;
                }


                List <ColumnRank> cPoorRank = Matrix.GetRankedColumns((cMaintain));
                //cMaintain = Matrix.FixPoorRank(cMaintain, cPoorRank);

                count = 0;
                foreach (var i in cMaintain)
                {
                    for (int j = 0; j < Program.MAX_AIR; j++)
                    {
                        if (i.Slot[j] != null)
                        {
                            MatrixCompare iCompare = checkList.Find(f => f.Position == string.Format("({0},{1})", count, j));
                            if (iCompare != null)
                            {
                                iCompare.After = i.Slot[j].WaitingDurationLog;
                            }
                        }
                    }

                    count++;
                }
                Console.WriteLine("========================================");
                Console.WriteLine("Iteration No.{0}", iteration);
                foreach (var i in checkList.Where(f => f.Changed))
                {
                    Console.WriteLine(string.Format(
                                          "{3}\r\nBefore = {0}, After = {1}, Changed = {2}",
                                          i.Before,
                                          i.After,
                                          i.Changed,
                                          i.Position
                                          ));
                }
                cal = ComputationUnit.GetRawCalculationData(iteration, cMaintain);
                string msg = "";
                if (prevCalculation.TotalWatingTime < cal.TotalWatingTime)
                {
                    cal = prevCalculation;
                }
                else
                {
                    msg = "New matrix was better!";
                    Console.WriteLine(msg);
                }

                cal.StartCalculation(prevCalculation.SigmaT.Value);
                cCalculation.Add(cal);

                FileHelper.AppendText(name.Replace(".", iteration + "."), msg, cal, checkList);
            }

            return(cal);
        }
コード例 #5
0
        public static void AppendExcel(string fileName, string msg, CalucationData cal, List <MatrixCompare> cCompare)
        {
            string excelPath = fileName;

            if (!File.Exists(excelPath))
            {
                File.Copy("c:/simu/data/calculation.xls", fileName);
            }


            //Iteration	T	TT	SigmaT	DeltaT	TZero	AlphaExpoential	K	Gramma	CurrentT	PreviouseT	TotalWatingTime	Adaptive1	Adaptive2	Adaptive3	Adaptive4	Exponential	Geometric	Linear	Logarithmic	ProbAdaptive1	ProbAdaptive2	ProbAdaptive3	ProbAdaptive4	ProbExponential	ProbGeometric	ProbLinear	ProbLogarithmic
            string columns = "Iteration,T,TT,SigmaT,DeltaT,TZero,AlphaExpoential,K,Gramma,CurrentT,PreviouseT,TotalWatingTime,Adaptive1,Adaptive2,Adaptive3,Adaptive4,Exponential,Geometric,Linear,Logarithmic,ProbAdaptive1,ProbAdaptive2,ProbAdaptive3,ProbAdaptive4,ProbExponential,ProbGeometric,ProbLinear,ProbLogarithmic";
            string values  = "@Iteration,@T,@TT,@SigmaT,@DeltaT,@TZero,@AlphaExpoential,@K,@Gramma,@CurrentT,@PreviouseT,@TotalWatingTime,@Adaptive1,@Adaptive2,@Adaptive3,@Adaptive4,@Exponential,@Geometric,@Linear,@Logarithmic,@ProbAdaptive1,@ProbAdaptive2,@ProbAdaptive3,@ProbAdaptive4,@ProbExponential,@ProbGeometric,@ProbLinear,@ProbLogarithmic";

            string updateExPression = "Iteration = @Iteration, T = @T,TT = @TT,SigmaT = @SigmaT,DeltaT = @DeltaT,TZero = @TZero,AlphaExpoential = @AlphaExpoential,K = @K,Gramma = @Gramma,CurrentT = @CurrentT,PreviouseT = @PreviouseT,TotalWatingTime = @TotalWatingTime,Adaptive1 = @Adaptive1,Adaptive2 = @Adaptive2,Adaptive3 = @Adaptive3,Adaptive4 = @Adaptive4,Exponential = @Exponential,Geometric = @Geometric,Linear = @Linear,Logarithmic = @Logarithmic,ProbAdaptive1 = @ProbAdaptive1,ProbAdaptive2 = @ProbAdaptive2,ProbAdaptive3 = @ProbAdaptive3,ProbAdaptive4 = @ProbAdaptive4,ProbExponential = @ProbExponential,ProbGeometric = @ProbGeometric,ProbLinear = @ProbLinear,ProbLogarithmic = @ProbLogarithmic";

            string cmdInsert = string.Format("insert into [Results$] ({0}) values ({1})", columns, values);
            string cmdUpdate = string.Format("update [Results$] set {0} where Iteration = @Iteration", updateExPression);

            string connectionString = string.Format(
                @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;""",
                excelPath);

            using (OleDbConnection connection = new OleDbConnection(connectionString))
            {
                if (connection.State != System.Data.ConnectionState.Closed)
                {
                    connection.Close();
                }
                connection.Open();
                int count = 0;
                try
                {
                    OleDbCommand cmd     = new OleDbCommand(string.Format("select count(*) from [Results$] where Iteration = '{0}'", cal.Iteration), connection);
                    int          counter = Convert.ToInt32(cmd.ExecuteScalar());
                    if (counter > 0)
                    {
                        cmd.CommandText = cmdUpdate;
                    }
                    else
                    {
                        cmd.CommandText = cmdInsert;
                    }
                    #region Parameters

                    cmd.Parameters.AddWithValue("Iteration", GetParamValue(cal.Iteration));
                    cmd.Parameters.AddWithValue("T", GetParamValue(cal.T));
                    cmd.Parameters.AddWithValue("TT", GetParamValue(cal.TT));
                    cmd.Parameters.AddWithValue("SigmaT", GetParamValue(cal.SigmaT));
                    cmd.Parameters.AddWithValue("DeltaT", GetParamValue(cal.DeltaT));
                    cmd.Parameters.AddWithValue("TZero", GetParamValue(cal.TZero));
                    cmd.Parameters.AddWithValue("AlphaExpoential", GetParamValue(cal.AlphaExpoential));
                    cmd.Parameters.AddWithValue("K", GetParamValue(cal.K));
                    cmd.Parameters.AddWithValue("Gramma", GetParamValue(cal.Gramma));
                    cmd.Parameters.AddWithValue("CurrentT", GetParamValue(cal.CurrentT));
                    cmd.Parameters.AddWithValue("PreviouseT", GetParamValue(cal.PreviouseT));
                    cmd.Parameters.AddWithValue("TotalWatingTime", GetParamValue(cal.TotalWatingTime));
                    cmd.Parameters.AddWithValue("Adaptive1", GetParamValue(cal.Adaptive1));
                    cmd.Parameters.AddWithValue("Adaptive2", GetParamValue(cal.Adaptive2));
                    cmd.Parameters.AddWithValue("Adaptive3", GetParamValue(cal.Adaptive3));
                    cmd.Parameters.AddWithValue("Adaptive4", GetParamValue(cal.Adaptive4));
                    cmd.Parameters.AddWithValue("Exponential", GetParamValue(cal.Exponential));
                    cmd.Parameters.AddWithValue("Geometric", GetParamValue(cal.Geometric));
                    cmd.Parameters.AddWithValue("Linear", GetParamValue(cal.Linear));
                    cmd.Parameters.AddWithValue("Logarithmic", GetParamValue(cal.Logarithmic));
                    cmd.Parameters.AddWithValue("ProbAdaptive1", GetParamValue(cal.ProbAdaptive1));
                    cmd.Parameters.AddWithValue("ProbAdaptive2", GetParamValue(cal.ProbAdaptive2));
                    cmd.Parameters.AddWithValue("ProbAdaptive3", GetParamValue(cal.ProbAdaptive3));
                    cmd.Parameters.AddWithValue("ProbAdaptive4", GetParamValue(cal.ProbAdaptive4));
                    cmd.Parameters.AddWithValue("ProbExponential", GetParamValue(cal.ProbExponential));
                    cmd.Parameters.AddWithValue("ProbGeometric", GetParamValue(cal.ProbGeometric));
                    cmd.Parameters.AddWithValue("ProbLinear", GetParamValue(cal.ProbLinear));
                    cmd.Parameters.AddWithValue("ProbLogarithmic", GetParamValue(cal.ProbLogarithmic));

                    #endregion Parameters

                    int result = cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }



            //Process.Start(ConfigurationManager.AppSettings["IE"], "-private " + iDestination);
        }
コード例 #6
0
        public static void AppendText(string fileName, string msg, CalucationData cal, List <MatrixCompare> cCompare)
        {
            if (!Directory.Exists("c:/simu"))
            {
                Directory.CreateDirectory("c:/simu");
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendFormat("<html><head>{0}</head><body>", CSS);

            sb.AppendLine(string.Format("<h2>{0}</h2>", fileName));

            sb.AppendLine("<div style='float:left'><table class='sample'>");

            sb.AppendFormat(BODY, "T", cal.T);
            sb.AppendFormat(BODY, "TT", cal.TT);
            sb.AppendFormat(BODY, "Iteration", cal.Iteration);
            sb.AppendFormat(BODY, "SigmaT", cal.SigmaT);
            sb.AppendFormat(BODY, "DeltaT", cal.DeltaT);
            sb.AppendFormat(BODY, "TZero", cal.TZero);
            sb.AppendFormat(BODY, "AlphaExpoential", cal.AlphaExpoential);
            sb.AppendFormat(BODY, "K", cal.K);
            sb.AppendFormat(BODY, "Gramma", cal.Gramma);
            sb.AppendFormat(BODY, "CurrentT", cal.CurrentT);
            sb.AppendFormat(BODY, "PreviouseT", cal.PreviouseT);
            sb.AppendFormat(BODY, "TotalWatingTime", cal.TotalWatingTime);



            sb.AppendLine("</table></div>");


            sb.AppendLine("<div style='float:left'><table class='sample'>");

            sb.AppendFormat(BODY, "Adaptive1", cal.Adaptive1);
            sb.AppendFormat(BODY, "Adaptive2", cal.Adaptive2);
            sb.AppendFormat(BODY, "Adaptive3", cal.Adaptive3);
            sb.AppendFormat(BODY, "Adaptive4", cal.Adaptive4);
            sb.AppendFormat(BODY, "Exponential", cal.Exponential);
            sb.AppendFormat(BODY, "Geometric", cal.Geometric);
            sb.AppendFormat(BODY, "Linear", cal.Linear);
            sb.AppendFormat(BODY, "Logarithmic", cal.Logarithmic);

            sb.AppendLine("</table></div>");

            sb.AppendLine("<div style='float:left'><table class='sample'>");

            sb.AppendFormat(BODY, "ProbAdaptive1", cal.ProbAdaptive1);
            sb.AppendFormat(BODY, "ProbAdaptive2", cal.ProbAdaptive2);
            sb.AppendFormat(BODY, "ProbAdaptive3", cal.ProbAdaptive3);
            sb.AppendFormat(BODY, "ProbAdaptive4", cal.ProbAdaptive4);
            sb.AppendFormat(BODY, "ProbExponential", cal.ProbExponential);
            sb.AppendFormat(BODY, "ProbGeometric", cal.ProbGeometric);
            sb.AppendFormat(BODY, "ProbLinear", cal.ProbLinear);
            sb.AppendFormat(BODY, "ProbLogarithmic", cal.ProbLogarithmic);

            sb.AppendLine("</table></div>");


            sb.AppendLine("<br />");
            sb.AppendLine("<br />");

            sb.AppendLine("<br />");
            sb.AppendLine("<div style='clear:both;'>&nbsp;</div>");
            sb.AppendLine("<hr />");
            sb.AppendLine("<div style='float:left'><table  class='sample'>");
            int count = 0;

            foreach (var i in cal.Schedules)
            {
                sb.AppendLine("<tr>");

                for (int j = 0; j < i.Slot.Length; j++)
                {
                    MatrixCompare jCompare = cCompare.Find(f => f.Position == string.Format("({0},{1})", count, j));

                    string iColor = "green";
                    if (jCompare != null)
                    {
                        iColor = jCompare.Changed ? "red" : "green";
                    }


                    Air jAir = i.Slot[j];
                    if (jAir == null)
                    {
                        sb.AppendFormat("<td>({0},{1})</td>", count, j);
                    }
                    else
                    {
                        sb.AppendFormat(
                            "<td style='background-color:green;'>" +
                            "({4},{5})<br />" +
                            "WT : {2}<br />" +
                            "AC : {6}<br />" +
                            //"D : {1}<br />" +
                            //"No : {3}<br />" +
                            "</td>",
                            jAir.DisplayArrivalTime,
                            jAir.DisplayDepartureTime,
                            jAir.WaitingDurationLog,
                            jAir.No,
                            count,
                            j,
                            jAir.AccumulateTimeLog
                            );
                    }
                }
                count++;
                sb.AppendLine("</tr>");
            }
            sb.AppendLine("</table></div>");
            sb.AppendLine("</html>");
            //Keep data to text file
            Console.WriteLine("Trying to save file.");
            string iFolder      = string.Format("c:/simu/log{0:ddMMyyyy}/", DateTime.Now);
            string iExcelName   = string.Format("c:/simu/log{0:ddMMyyyy}/{1}", DateTime.Now, "calculation.xls");
            string iDestination = string.Format("c:/simu/log{0:ddMMyyyy}/{1}.html", DateTime.Now, fileName);

            CreateFile(iDestination, sb.ToString());


            try
            {
                AppendExcel(iExcelName, msg, cal, cCompare);
            }
            catch (Exception)
            {
            }

            //Process.Start(ConfigurationManager.AppSettings["IE"], "-private " + iDestination);
        }