Ejemplo n.º 1
0
            // алгоритм обработки события
            protected override void HandleEvent(ModelEventArgs args)
            {
                Model.Tracer.EventTrace(this);
                if (Model.QPP.Count != 0)
                {
                    // Выбор первой заявки
                    QRec QPPRec = Model.QPP[0];
                    Model.QPP.RemoveAt(0);
                    // Выделение кванта
                    Model.Tracer.AnyTrace(QPPRec.Z.KPT);
                    QPPRec.Z.KPT--;
                    Model.Tracer.AnyTrace(QPPRec.Z.KPT);
                    if (QPPRec.Z.KPT == 0)
                    {
                        // Увеличение объема свободной ОП
                        Model.FREEMEM += QPPRec.Z.MEM;

                        if (Model.VQ.Count != 0)
                        {
                            if (Model.FREEMEM >= Model.VQ[0].Z.MEM)
                            {
                                // Перенос заявки из VQ в QPP
                                Model.QPP.Add(Model.VQ[0]);
                                Model.VQ.RemoveAt(0);

                                // Уменьшение свободной ОП
                                Model.FREEMEM -= Model.QPP[Model.QPP.Count - 1].Z.MEM;
                            }
                        }
                    }
                    else
                    {
                        Model.QPP.Add(QPPRec);
                    }
                }

                // Планируем событие К2
                var ev2 = new K2();

                Model.PlanEvent(ev2, Model.DELKV);
                Model.Tracer.PlanEventTrace(ev2);
                Model.Tracer.AnyTrace("");
                Model.TraceModel();
                Model.Tracer.AnyTrace("");
            }
Ejemplo n.º 2
0
            // алгоритм обработки события
            protected override void HandleEvent(ModelEventArgs args)
            {
                Model.Tracer.EventTrace(this, ZP.NZ, ZP.KPT, ZP.MEM);
                if (ZP.MEM <= Model.FREEMEM)
                {
                    // Добавление заявки в очередь ПП
                    var rec = new QRec();
                    rec.Z = ZP;
                    Model.QPP.Add(rec);

                    // Уменьшения объема свободной памяти
                    Model.FREEMEM -= ZP.MEM;
                }
                else
                {
                    // Добавление заявки во входную очередь
                    var rec = new QRec();
                    rec.Z = ZP;
                    Model.VQ.Add(rec);
                }
                // Планируем событие К1
                double dt1 = Model.GenTime.GenerateValue();

                var ev1 = new K1();

                Bid Z1 = new Bid();

                Z1.NZ  = ZP.NZ + 1;
                Z1.MEM = Model.GenVol.GenerateValue();
                Z1.KPT = Model.GenKK.GenerateValue();
                if (Z1.KPT == 0)
                {
                    Z1.KPT = 1;
                }
                ev1.ZP = Z1;

                Model.PlanEvent(ev1, dt1);
                Model.Tracer.PlanEventTrace(ev1);
                Model.Tracer.AnyTrace("");
                Model.TraceModel();
                Model.Tracer.AnyTrace("");
            }
Ejemplo n.º 3
0
        public override void StartModelling(int variantCount, int runCount)
        {
            #region Задание начальных значений модельных переменных и объектов
            #endregion

            #region Cброс сборщиков статистики

            #endregion

            //Печать заголовка строки состояния модели
            TraceModelHeader();

            #region Планирование начальных событий

            var ev1 = new K1();
            Bid Z1  = new Bid();
            Z1.NZ  = 1;
            Z1.NE  = 1;
            Z1.KK  = GenKKZ.GenerateValue();
            ev1.ZP = Z1;
            var rec1 = new QRec();
            rec1.Z = Z1;
            KPP[MZ[0, 0]].Add(rec1);
            PlanEvent(ev1, 0.0);
            Tracer.PlanEventTrace(ev1);

            var ev2 = new K1();
            Bid Z2  = new Bid();
            Z2.NZ  = 2;
            Z2.NE  = 1;
            Z2.KK  = GenKKZ.GenerateValue();
            ev2.ZP = Z2;
            var rec2 = new QRec();
            rec2.Z = Z2;
            KPP[MZ[1, 0]].Add(rec2);
            PlanEvent(ev2, 0.0);
            //Tracer.PlanEventTrace(ev2);
            TraceModel();

            #endregion
        }
Ejemplo n.º 4
0
            // алгоритм обработки события
            protected override void HandleEvent(ModelEventArgs args)
            {
                Model.Tracer.AnyTrace(Model.TK + "\tK1");
                Model.TK++;
                for (int NU = 0; NU < KUVS; NU++)
                {
                    if (Model.KPP[NU].Count != 0)
                    {
                        Model.KPP[NU][0].Z.KK--;
                        Model.TSZ[NU]++;
                        if (Model.KPP[NU][0].Z.KK == 0)
                        {
                            // Переход к следующему этапу
                            if (Model.MZ[Model.KPP[NU][0].Z.NZ - 1, Model.KPP[NU][0].Z.NE] == -1)
                            {
                                Model.KPP[NU][0].Z.NE = 1;
                                Model.KC[Model.KPP[NU][0].Z.NZ - 1]++;
                            }
                            else
                            {
                                Model.KPP[NU][0].Z.NE++;
                            }

                            // Обноление очередей для заявки
                            var rec = new QRec();
                            Model.GenKKZ.A = Model.MOKK[Model.KPP[NU][0].Z.NZ - 1, Model.KPP[NU][0].Z.NE - 1];
                            rec.Z          = Model.KPP[NU][0].Z;
                            do
                            {
                                rec.Z.KK = Model.GenKKZ.GenerateValue();
                            }while (rec.Z.KK <= 0);

                            if ((int)Model.KPP[Model.MZ[Model.KPP[NU][0].Z.NZ - 1, Model.KPP[NU][0].Z.NE - 1]].Count < (int)Model.MAXKPP[Model.MZ[Model.KPP[NU][0].Z.NZ - 1, Model.KPP[NU][0].Z.NE - 1]])
                            {
                                Model.KPP[Model.MZ[Model.KPP[NU][0].Z.NZ - 1, Model.KPP[NU][0].Z.NE - 1]].Add(rec);
                            }
                            else
                            {
                                Model.SQ[Model.MZ[Model.KPP[NU][0].Z.NZ - 1, Model.KPP[NU][0].Z.NE - 1]].Add(rec);
                            }
                            Model.KPP[NU].RemoveAt(0);

                            if (Model.SQ[NU].Count > 0 && Model.KPP[NU].Count < Model.MAXKPP[NU])
                            {
                                Model.KPP[NU].Add(Model.SQ[NU][0]);
                                Model.SQ[NU].RemoveAt(0);
                            }
                        }
                        else
                        {
                            var rec = new QRec();
                            rec.Z = Model.KPP[NU][0].Z;
                            Model.KPP[NU].RemoveAt(0);
                            Model.KPP[NU].Add(rec);
                        }
                    }
                }

                var    ev1 = new K1();              //создаём объект события
                double dt1 = Model.GenTime.GenerateValue();

                Model.PlanEvent(ev1, dt1);
                //Model.Tracer.PlanEventTrace(ev1);
                Model.Tracer.AnyTrace("+" + Model.TK + "\tK1");

                Model.LKPP[0].Value = Model.KPP[0].Count;
                Model.LKPP[1].Value = Model.KPP[1].Count;
                Model.LKPP[2].Value = Model.KPP[2].Count;

                Model.LSQ[0].Value = Model.SQ[0].Count;
                Model.LSQ[1].Value = Model.SQ[1].Count;
                Model.LSQ[2].Value = Model.SQ[2].Count;

                Model.TraceModel();
            }