Exemple #1
0
 public void SetData(ImitationSystem IS)
 {
     SetDataHeader();
     SetTeoricalData(IS);
     SetPracticalData(IS);
     SetSeries(IS.lambda);
 }
Exemple #2
0
        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;
        }
Exemple #3
0
        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();
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
                }
            }
        }
Exemple #6
0
        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());
        }
Exemple #8
0
        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++;
                }
            }
        }
Exemple #9
0
 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"));
 }
Exemple #10
0
 static public void ShowDigrams(ImitationSystem IS, Chart chart)
 {
     chart.Series.Add(DrawN("N відмови", IS.NFailureElem, IS));
     chart.Series.Add(DrawN("N обробки", IS.NProcessingElem, IS));
 }