public void SetData(ImitationSystem IS) { SetDataHeader(); SetTeoricalData(IS); SetPracticalData(IS); SetSeries(IS.lambda); }
private void SetTeoricalData(ImitationSystem IS) { double ro = IS.lambda / IS.mu; if (!IS.UnlimitedQueue) { PFailure.Q = IS.pTeorical[IS.pTeorical.Length - 1]; A.Q = IS.lambda * (1 - IS.pTeorical[IS.pTeorical.Length - 1]); AverZ.Q = A.Q / IS.mu; if (IS.m != 0) { AverR.Q = IS.pTeorical[IS.n + 1] * (1 - (IS.m + 1) * Math.Pow(ro / IS.n, IS.m) + IS.m * Math.Pow(ro / IS.n, IS.m + 1)) / Math.Pow(1 - (ro / IS.n), 2); } AverK.Q = AverR.Q + AverZ.Q; AverTWait.Q = AverR.Q / IS.lambda; } else { PFailure.Q = 0; PFailure.Q0 = IS.NFailure / (IS.NFailure + IS.NProcessing); A.Q = IS.lambda; AverZ.Q = A.Q / IS.mu; if (IS.pTeorical.Length > IS.n + 1) { AverR.Q = IS.pTeorical[IS.n + 1] / (Math.Pow(1 - ro / IS.n, 2)); } AverK.Q = AverR.Q + AverZ.Q; AverTWait.Q = AverR.Q / IS.lambda; } Q.Q = 1 - PFailure.Q; }
private void Imitationbutton_Click(object sender, EventArgs e) { int n; double lambda, mu, ImitationTime; try { n = Convert.ToInt32(ntextBox.Text); lambda = Convert.ToDouble(lambdatextBox.Text.Replace(",", ".")); mu = Convert.ToDouble(mutextBox.Text.Replace(",", ".")); ImitationTime = Convert.ToDouble(ImitationTimetextBox.Text); } catch { MessageBox.Show("Невірно введенні дані", "Помилка", MessageBoxButtons.OK, MessageBoxIcon.Error); IS = null; return; } if (int.TryParse(mtextBox.Text, out int m) && checkBox1.Checked) { IS = new ImitationSystem(lambda, mu, n, m); } else { IS = new ImitationSystem(lambda, mu, n); } IS.Generate(ImitationTime); ShowData.ClearDiograms(LambdaChart); ShowData.ClearDiograms(MuChart); ShowData.ClearDiograms(QueueChannelchart); ShowData.ClearDiograms(Nchart); ShowData.ClearDiograms(Evaluationchart); ShowData.ClearDiograms(Pchart); ShowData.ShowDigrams(IS, Nchart); ShowData.ShowQueueAndChannel(IS, QueueChannelchart); ShowData.ShowISData(Evaluationchart, IS.Evaluation); ShowData.ShowP(Pchart, IS.pPracticalSeries); ShowData.ShowLamdaMu(IS, LambdaChart, MuChart); if (EvaluationtreeView.Nodes.Count == 0) { ShowData.ShowEvaluationTreeView(IS.Evaluation, EvaluationtreeView); } else { EvaluationtreeView_AfterCheck(IS, new TreeViewEventArgs(EvaluationtreeView.Nodes[0])); } ShowData.ShowPTreeView(IS.pPracticalSeries, treeView1); WraitData.Clear(dataGridView1); WraitData.WraitP(IS, dataGridView1); WraitData.WraitISData(dataGridView1, IS.Evaluation, IS.round); GC.Collect(); }
private void SetPracticalData(ImitationSystem IS) { double ChennelCount = 1; double QueueCount = 0; double SumChannel = 0; double SumQueue = 0; double SumTimeWait = 0; double QueueExitCount = 0; double ChennelCountChange = 1; double NumberProccesing = 0; double QueueCountChange = 0; for (int i = 1; i < IS.TimeLine.Count; i++) { SumChannel += (IS.TimeLine[i].TimeEvent - IS.TimeLine[i - 1].TimeEvent) * ChennelCount; SumQueue += (IS.TimeLine[i].TimeEvent - IS.TimeLine[i - 1].TimeEvent) * QueueCount; ChennelCountChange = IS.TimeLine[i].TimeEvent; QueueCountChange = IS.TimeLine[i].TimeEvent; if (IS.TimeLine[i].InputOutput == EventType.Input) { ChennelCount++; } else if (IS.TimeLine[i].InputOutput == EventType.Output) { ChennelCount--; NumberProccesing++; } else if (IS.TimeLine[i].InputOutput == EventType.Wait && IS.TimeLine[i].TimeProcces != 0) { QueueCount++; } else if (IS.TimeLine[i].InputOutput == EventType.Wait && IS.TimeLine[i].TimeProcces == 0) { SumTimeWait += IS.TimeLine[i].Neighbor.TimeProcces * (IS.TimeLine[i].TimeEvent - IS.TimeLine[i - 1].TimeEvent) * 1.001; QueueExitCount += (IS.TimeLine[i].TimeEvent - IS.TimeLine[i - 1].TimeEvent); AverTWaitPractical.Q.Add(new PointF((float)IS.TimeLine[i].TimeEvent, (float)(SumTimeWait / QueueExitCount))); QueueCount--; } APractical.Q.Add(new PointF((float)IS.TimeLine[i].TimeEvent, (float)NumberProccesing / (float)IS.TimeLine[i].TimeEvent)); AverZPractical.Q.Add(new PointF((float)IS.TimeLine[i].TimeEvent, (float)(SumChannel / ChennelCountChange))); AverRPractical.Q.Add(new PointF((float)IS.TimeLine[i].TimeEvent, (float)(SumQueue / QueueCountChange))); AverKPractical.Q.Add(new PointF((float)IS.TimeLine[i].TimeEvent, (float)(SumQueue / QueueCountChange) + (float)(SumChannel / ChennelCountChange))); } SetPFailureAndQPractical(IS); SetQ0((float)IS.TimeLine[IS.TimeLine.Count - 1].TimeEvent); }
static public void ShowQueueAndChannel(ImitationSystem IS, Chart chart) { Series QueueSer = new Series("В черзі") { ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line, ["PointWidth"] = "3", BorderWidth = 2, BorderColor = Color.Black }; Series ChannelSer = new Series("Активних каналів") { ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line, ["PointWidth"] = "3", BorderWidth = 2, BorderColor = Color.Black }; chart.Series.Add(ChannelSer); chart.Series.Add(QueueSer); ChannelSer.Points.AddXY(0, 1); QueueSer.Points.AddXY(0, 0); int c = 1; int q = 0; for (int i = 1; i < IS.TimeLine.Count && IS.TimeLine[i].TimeEvent < 1000 / IS.lambda; i++) { if (IS.TimeLine[i].InputOutput == EventType.Input) { ChannelSer.Points.AddXY(IS.TimeLine[i].TimeEvent, c); c++; ChannelSer.Points.AddXY(IS.TimeLine[i].TimeEvent, c); } else if (IS.TimeLine[i].InputOutput == EventType.Output) { ChannelSer.Points.AddXY(IS.TimeLine[i].TimeEvent, c); c--; ChannelSer.Points.AddXY(IS.TimeLine[i].TimeEvent, c); } if (IS.TimeLine[i].InputOutput == EventType.Wait && IS.TimeLine[i].TimeProcces != 0) { QueueSer.Points.AddXY(IS.TimeLine[i].TimeEvent, q); q++; QueueSer.Points.AddXY(IS.TimeLine[i].TimeEvent, q); } else if (IS.TimeLine[i].InputOutput == EventType.Wait && IS.TimeLine[i].TimeProcces == 0) { QueueSer.Points.AddXY(IS.TimeLine[i].TimeEvent, q); q--; QueueSer.Points.AddXY(IS.TimeLine[i].TimeEvent, q); } } }
static Series DrawN(String Name, List <Event> N, ImitationSystem IS) { Series result = new Series(Name) { ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line, ["PointWidth"] = "3", BorderWidth = 3, BorderColor = Color.Black }; for (int i = 0; i < N.Count; i += Math.Max(N.Count / 1000, 1)) { result.Points.AddXY(N[i].TimeEvent, N[i].TimeProcces); } return(result); }
static public void WraitP(ImitationSystem IS, DataGridView datagrid) { double sumpP = 0, sumpT = 0; for (int i = 0; i < IS.pPractical.Length; i++) { datagrid.Rows.Add("p" + i.ToString(), Math.Round(IS.pPractical[i], IS.round).ToString(), Math.Round(IS.pTeorical[i], IS.round).ToString(), Math.Round(IS.pPractical[i] - IS.pTeorical[i], IS.round).ToString()); sumpP += IS.pPractical[i]; sumpT += IS.pTeorical[i]; } datagrid.Rows.Add("sum", Math.Round(sumpP, IS.round).ToString(), Math.Round(sumpT, IS.round).ToString(), Math.Round(sumpP - sumpT, IS.round).ToString()); datagrid.Rows.Add("N відмови", Math.Round(IS.NFailure, IS.round).ToString()); datagrid.Rows.Add("N оброблених", Math.Round(IS.NProcessing, IS.round).ToString()); datagrid.Rows.Add("Максимальна кількість запитів в черзі", IS.MaxQueueCount.ToString()); }
private void SetPFailureAndQPractical(ImitationSystem IS) { double NF = 0, NP = 0; for (int f = 1, p = 1; f < IS.NFailureElem.Count && p < IS.NProcessingElem.Count;) { NF = IS.NFailureElem[f].TimeProcces; NP = IS.NProcessingElem[p].TimeProcces; PFailurePractical.Q.Add( new PointF((float)Math.Max(IS.NFailureElem[f].TimeEvent, IS.NProcessingElem[p].TimeEvent), (float)(NF / (NP + NF)))); QPractical.Q.Add(new PointF( PFailurePractical.Q[PFailurePractical.Q.Count - 1].X, 1 - PFailurePractical.Q[PFailurePractical.Q.Count - 1].Y)); if (p < IS.NProcessingElem.Count && IS.NFailureElem[f].TimeEvent > IS.NProcessingElem[p].TimeEvent) { p++; } else { f++; } } }
static public void ShowLamdaMu(ImitationSystem IS, Chart Lambdachart, Chart Muchart) { Lambdachart.Series.Add(GistogPaint(new InitialStatisticalAnalys(IS.LambdaElem), Color.DarkBlue, "Lambda")); Muchart.Series.Add(GistogPaint(new InitialStatisticalAnalys(IS.MuElem), Color.DarkBlue, "Mu")); }
static public void ShowDigrams(ImitationSystem IS, Chart chart) { chart.Series.Add(DrawN("N відмови", IS.NFailureElem, IS)); chart.Series.Add(DrawN("N обробки", IS.NProcessingElem, IS)); }