Программа выполнения работы
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);
}
}
}
}
Результаты работы программы
Лабораторная работа №3
Изучение элементов системы моделирования QPSS
На моделях Q-схем
Цель работы: отработка навыков разработки программных моделей дискретных процессов на языке имитационного моделирования GPSS, экспериментальное исследование систем в ходе статистических вычислительных экспериментов с моделью.
Программные средства:операционная система MS Windows XP/7, система моделирования GPSS World for Windows (студенческая версия) от Minuteman Software.
Код программы на GPSS:
CHANEL STORAGE 2
GENERATE (exponential(1,0,2.0))
QUEUE BUF1
ENTER CHANEL
DEPART BUF1
ADVANCE (normal(2,3.5,0.8))
LEAVE CHANEL
TRANSFER 0.7,MMM30,MMM70
MMM30 QUEUE BUF2
SEIZE HDD
DEPART BUF2
ADVANCE 0.5,0.3
RELEASE HDD
MMM70 TERMINATE 1
Вывод результатов для 1000 сообщений
GPSS World Simulation Report - 12312Untitled.9.1
Thursday, May 05, 2011 14:26:29
START TIME END TIME BLOCKS FACILITIES STORAGES
0.000 1989.787 13 1 1
NAME VALUE
BUF1 10001.000
BUF2 10002.000
CHANEL 10000.000
HDD 10003.000
MMM30 8.000
MMM70 13.000
LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY
1 GENERATE 1014 0 0
2 QUEUE 1014 12 0
3 ENTER 1002 0 0
4 DEPART 1002 0 0
5 ADVANCE 1002 2 0
6 LEAVE 1000 0 0
7 TRANSFER 1000 0 0
MMM30 8 QUEUE 318 0 0
9 SEIZE 318 0 0
10 DEPART 318 0 0
11 ADVANCE 318 0 0
12 RELEASE 318 0 0
MMM70 13 TERMINATE 1000 0 0
FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY
HDD 318 0.080 0.499 1 0 0 0 0 0
QUEUE MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME AVE.(-0) RETRY
BUF1 21 12 1014 187 2.958 5.805 7.118 0
BUF2 1 0 318 307 0.002 0.010 0.282 0
STORAGE CAP. REM. MIN. MAX. ENTRIES AVL. AVE.C. UTIL. RETRY DELAY
CHANEL 2 0 0 2 1002 1 1.751 0.876 0 12
FEC XN PRI BDT ASSEM CURRENT NEXT PARAMETER VALUE
1015 0 1991.776 1015 0 1
1001 0 1992.227 1001 5 6
1002 0 1992.492 1002 5 6
Лабораторная работа № 4