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)); } }
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++; } } }
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); }
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); }
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); }
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;'> </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); }