Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБЫ ИЛЬЯ.docx
Скачиваний:
17
Добавлен:
11.04.2015
Размер:
547.38 Кб
Скачать

Построение и реализация моделирующих алгоритмов q-схем. Метод особых состояний

Цель работы: выработка навыков алгоритмизации и программирования имитационных моделей систем массового обслуживания (СМО) методом особых состояний, фиксации и обработки данных в ходе статистических экспериментов с моделью.

Оборудование и программные средства: персональный компьютер, операционная система MS Windows XP/7/8, с системой программирования на языке высокого уровня (C++, С#) в среде MS Visual Studio.

Продолжительность выполнения работы - 4 часа.

Программа выполнения работы

  1. 1. Изучить обобщенный алгоритм моделирования, использующий для продвижения модельного времени метод особых состояний, и пример реализации моделирующего алгоритма для простейшей системы массового обслуживания.

  2. 2. Составить программу моделирования по схеме событий для варианта задания, полученного при выполнении предыдущей работы. Ввести в компьютер и отладить программу моделирования.

  3. Провести вычислительные эксперименты с моделью.

Ход работы

Смоделируем СМО событийным методом

Код программы

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);

}

}

}

}

Результаты работы программы

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]