- •Лабораторная работа №1 Построение и реализация моделирующих алгоритмов q-схем. Метод “δt”
- •Программа выполнения работы
- •Построение и реализация моделирующих алгоритмов q-схем. Метод особых состояний
- •Ход работы
- •Лабораторная работа №3 Изучение элементов системы моделирования qpss на моделях q-схем
- •Лабораторная работа № 4 Моделирование дискретно-событийных систем в среде anylogic
Построение и реализация моделирующих алгоритмов q-схем. Метод особых состояний
Цель работы: выработка навыков алгоритмизации и программирования имитационных моделей систем массового обслуживания (СМО) методом особых состояний, фиксации и обработки данных в ходе статистических экспериментов с моделью.
Оборудование и программные средства: персональный компьютер, операционная система MS Windows XP/7/8, с системой программирования на языке высокого уровня (C++, С#) в среде MS Visual Studio.
Продолжительность выполнения работы - 4 часа.
Программа выполнения работы
1. Изучить обобщенный алгоритм моделирования, использующий для продвижения модельного времени метод особых состояний, и пример реализации моделирующего алгоритма для простейшей системы массового обслуживания.
2. Составить программу моделирования по схеме событий для варианта задания, полученного при выполнении предыдущей работы. Ввести в компьютер и отладить программу моделирования.
Провести вычислительные эксперименты с моделью.
Ход работы
Смоделируем СМО событийным методом
Код программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Threading;
namespace зуевлаб1_V2._0
{
public class Qsystem
{
public List<IOnTickable> ObjsTick { get; private set; }
public List<EndNode> ObjsEnd { get; private set; }
public int ClientsCount { get; set; }
public float dt { get; set; }
public float T { get; set; }
public bool IsEnd
{
get
{
int sum = 0;
foreach (var item in ObjsEnd)
{
sum += item.Count;
}
return sum == ClientsCount;
}
}
public Font font = new Font(FontFamily.GenericSansSerif,6,FontStyle.Regular);
public Qsystem()
{
this.ObjsTick = new List<IOnTickable>();
this.ObjsEnd = new List<EndNode>();
}
public void Add(IOnTickable o)
{
((DrawingObj)o).Owner = this;
this.ObjsTick.Add(o);
}
public void Add(EndNode o)
{
((DrawingObj)o).Owner = this;
this.ObjsEnd.Add(o);
}
public void PreStart()
{
foreach (var item in this.ObjsTick)
{
Source s = item as Source;
if (s != null)
{
this.ClientsCount += s.Count;
}
}
}
public void StartEvent()
{
PreStart();
while (!IsEnd)
{
StepEvent();
}
}
public void StepEvent()
{
this.ObjsTick.Sort((a, b) =>
{
if (a.GetEventTime == b.GetEventTime) return 0;
if (a.GetEventTime > b.GetEventTime) return 1;
return -1;
});
if (this.ObjsTick[0].IsWork)
{
T = this.ObjsTick[0].GetEventTime;
this.ObjsTick[0].OnTick();
}
}
public IEnumerable<object> GetEnumerator()
{
foreach (var item in this.ObjsTick)
{
yield return item;
}
foreach (var item in this.ObjsEnd)
{
yield return item;
}
}
public void Draw(Graphics g)
{
foreach (DrawingObj item in this.GetEnumerator())
{
item.Draw(g);
}
}
}
}
Результаты работы программы