Построение и реализация моделирующих алгоритмов Q-схем




Лабораторная работа №1

Построение и реализация моделирующих алгоритмов

Q-схем. метод “ΔT”

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

 

Оборудование и программные средства: персональный компьютер, операционная система MSWindowsXP/7, с системой программирования на языке высокого уровняС# в среде MSVisualStudio.

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

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

 

2. Составить программу моделирования в соответствие с заданием на одном из алгоритмических языков по схеме «дельта Т». Ввести в компьютер и отладить программу моделирования.

 

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

Краткая теория.

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

Результатом статистического моделирования является достаточно большие объемы чисел. При моделировании желательно не запоминать все массивы чисел, так как кроме лишней используемой памяти, загромождается сама модель, поэтому фиксирование результатов желательно организовать таким образом, чтобы по мере возможности избежать запоминания всех массивов случайных чисел.

 

Принцип Δt. Он заключается в том, что весь промежуток функционирования объекта разбивается на участки Δ t, в течении которых все параметры системы или объекта считаются постоянными и для них составляется модель, производятся вычисления, определяются параметры.

 

Достоинство этого принципа в возможности использования для непрерывных процессов. А недостаток в громоздкости решения задачи и получение большого количества избыточной информации, если подстраиваться под самый быстрый процесс или недополученние информации, если подстраиваться под самый медленный процесс.

Моделируемая система имеет вид:

 

 

 

Програмная реализация

Скриншот программы:

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


using System;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Windows.Forms;

 

namespaceСМО_dT__Robot_

{

publicpartialclassSMS: Form

{

public SMS()

{

InitializeComponent();

}

 

// инициализацияобъектов

intn_max = 100, n = 0;

TimeSMSGlobalTime = newTimeSMS();

int g1min = 150, g1max = 250, g2min = 180, g2max = 260;

G G1 = newG();

G G2 = newG();

U U1 = newU();

U U2 = newU();

T T1 = newT();

 

privatevoidStart_Click(object sender, EventArgs e)

{

timer1.Start();

}

 

privatevoid timer1_Tick(object sender, EventArgs e)

{

label7.Text = Convert.ToString(GlobalTime.T);

label8.Text = Convert.ToString(G1.Tg);

label9.Text = Convert.ToString(G2.Tg);

label10.Text = Convert.ToString(U1.LQ);

label11.Text = Convert.ToString(U2.LQ);

label12.Text = Convert.ToString(n);

label13.Text = Convert.ToString(U1.Tu);

label14.Text = Convert.ToString(U2.Tu);

GlobalTime.T+=GlobalTime.dt;

G1.Tg -= GlobalTime.dt;

G2.Tg -= GlobalTime.dt;

//step 4 for the First device

if (G1.Tg <= 0)

{

//Step 5 for the First device

n++;

G1.Fg(g1min, g1max);

U1.LQ++;

if (U1.Z == false)

{

U1.LQ--;

U1.Z = true;

U1.Fu(true);

}

}

//step 4 for the Second device

if (G2.Tg <= 0)

{

//Step 5 for the Second device

n++;

G2.Fg(g2min, g2max);

U1.LQ++;

if (U1.Z == false)

{

U1.LQ--;

U1.Z = true;

U1.Fu(true);

}

}

//step 6

if (U1.Z == true)

{

//step7

U1.Tu -= GlobalTime.dt;

if (U1.Tu <= 0)

{

U1.Z = false;//commit13.05

if (U1.LQ > 0)

{

U1.Z = true;

U1.LQ--;

U1.Fu(true);

U2.LQ++;

if (U2.Z == false)//commit13.05

{

U2.Z = true;

U2.LQ--;

U2.Fu(false);

}

}

}

}

//step8

if (U2.Z == true)

{

//step9

U2.Tu -= GlobalTime.dt;

if (U2.Tu <= 0)

{

if (U2.Tu == -1)

{

U2.Tu = 0;

}

U2.Z = false;

if (U2.LQ > 0)

{

U2.LQ--;

U2.Z = true;

U2.Fu(false);

}

}

}

 

if (n >= n_max)

{

timer1.Stop();

T1.n = n;

}

}

 

}

}


 

 

Лабораторная работа №2

Построение и реализация моделирующих алгоритмов Q-схем

Метод особых состояний

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

 

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

 

Моделируемая система имеет вид:

 

 

 

 

Програмная реализация

Скриншот программы:

 

 

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

 


using System;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading;

usingSystem.Windows.Forms;

 

namespaceАняМоделирование

{

public partial class Form1: Form

{

public List<IOnTickable>ObjsTick = new List<IOnTickable>();

public List<DrawingObj>ObjsDrawing = new List<DrawingObj>();

public List<Terminator>ObjsEnd = new List<Terminator>();

 

public float T = 0;

public float dt = 1;

publicintTransactCountTotal;

publicintTransactCount;

 

public Font font = new Font(FontFamily.GenericSansSerif, 6, FontStyle.Regular);

 

public Form1()

{

InitializeComponent();

DoubleBuffered = true;

}

 

protected override void OnPaint(PaintEventArgs e)

{

base.OnPaint(e);

Graphics gd = e.Graphics;

gd.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

 

//-----------------

this.Draw(gd);

//-----------------

}

 

private void Draw(Graphics g)

{

foreach (DrawingObj item in this.ObjsEnd)

{

item.Draw(g);

}

foreach (DrawingObj item in this.ObjsTick)

{

item.Draw(g);

}

foreach (DrawingObj item in this.ObjsDrawing)

{

item.Draw(g);

}

}

 

private void button1_Click(object sender, EventArgs e)

{

new Thread(Run).Start();

}

 

private void Run()

{

inttmp = 0;

if (int.TryParse(this.textBox1.Text, out tmp))

{

this.TransactCountTotal = this.TransactCount = tmp;

 

while (!this.IsEnd())

{

this.Iterate();

}

 

this.Invalidate();

}

else

{

MessageBox.Show("вниматильнее!");

}

}

 

private void Iterate()

{

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].Iterate();

}

}

 

privateboolIsEnd()

{

int sum = 0;

foreach (var item in this.ObjsEnd)

{

sum += item.Count;

}

return sum == this.TransactCountTotal;

}

 

private void Form1_Shown(object sender, EventArgs e)

{

Generator g = new Generator(new Point(100,100));

Servis p = new Servis(new Point(300,100));

Terminator t1 = new Terminator(new Point(500,100));

Terminator t2 = new Terminator(new Point(300,200));

 

g.nextNode = p;

p.nextNode = p.p1.nextNode = p.p2.nextNode = t1;

p.nextNodeOut = t2;

 

g.Owner = p.Owner = t1.Owner = t2.Owner = p.p1.Owner = p.p2.Owner = this;

 

this.ObjsTick.Add(g);

this.ObjsTick.AddRange(p.GetListPribors());

this.ObjsDrawing.Add(p);

this.ObjsEnd.Add(t1);

this.ObjsEnd.Add(t2);

}

}

}

}


Лабораторнаяработа №3



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-11-19 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: