// алгоритм обработки события 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(""); }
// алгоритм обработки события 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(""); }
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 }
// алгоритм обработки события 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(); }