Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
КАФЕДРА ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ
Звіт
До лабораторної роботи № 3
На тему: “ Імітаційне моделювання виробничих систем з використанням моделей систем масового обслуговування ”
З дисципліни : "Моделювання програмного забезпечення"
Мета роботи:
Сформувати реалізації випадкових потоків однорідних подій із заданим законом розподілу, необхідних для моделювання виробничої системи з використанням моделі у вигляді системи масового обслуговування.
Реалізувати моделюючий алгоритм імітаційного моделювання системи масового обслуговування, що представляє виробничу систему.
Провести імітаційне моделювання системи масового обслуговування і статистичний аналіз результатів моделювання.
Код програми
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lab3_MPZ
{
class ExponentDistribution
{
protected Random Rand;
protected double L;
protected double Last;
protected double maxElem;
public double MaxElem
{
get { return maxElem; }
set { maxElem = value; }
}
protected List<double> sequence;
public List<double> Sequence
{
get { return sequence; }
set { ;}
}
protected ExponentDistribution()
{
}
public ExponentDistribution(int nL)
{
L = nL;
MaxElem = 0;
Rand = new Random((int)DateTime.Now.Ticks);
sequence = new List<double>();
Last = 0;
}
public ExponentDistribution(int nL, int nMaxElem)
{
L = nL;
MaxElem = nMaxElem;
Rand = new Random((int)DateTime.Now.Ticks);
sequence = new List<double>();
Last = 0;
}
public virtual double Next()
{
double Xi = (double)Rand.Next() / int.MaxValue;
Last += ((-1.0) / L) * Math.Log(1 - Xi);
Sequence.Add(Last);
return Last;
}
public virtual double NextElement()
{
double Xi = (double)Rand.Next() / int.MaxValue;
return (((-1.0) / L) * Math.Log(1 - Xi));
}
public double this[int pos]
{
get
{
if (pos <= (Sequence.Count - 1))
return Sequence[pos];
else
return Sequence[Sequence.Count - 1];
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lab3_MPZ
{
class EvenDistribution : ExponentDistribution
{
protected double B;
public EvenDistribution(int nL)
: base(nL)
{
B = 2.0 / L;
}
public EvenDistribution(int nL, int nMaxElem)
: base(nL, nMaxElem)
{
B = 2.0 / L;
}
public override double Next()
{
double Xi = (double)Rand.Next() / int.MaxValue;
Last += B * Xi;
Sequence.Add(Last);
return Last;
}
public override double NextElement()
{
double Xi = (double)Rand.Next() / int.MaxValue;
return (B * Xi);
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Lab3_MPZ
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void ModelingButton_Click(object sender, EventArgs e)
{
ExponentDistribution ComeTime;
ExponentDistribution WaitTime;
ExponentDistribution WorkTime;
double T;
try
{
T = double.Parse(TInputBox.Text);
}
catch
{
MessageBox.Show("Помилка при введенні часу функціонування системи");
TInputBox.Text = "";
return;
}
int L;
try
{
L = int.Parse(LInput.Text);
}
catch
{
MessageBox.Show("Помилка при введенні L");
LInput.Text = "";
return;
}
if (ComeExponent.Checked)
ComeTime = new ExponentDistribution(L);
else
ComeTime = new EvenDistribution(L);
if (WaitExponent.Checked)
WaitTime = new ExponentDistribution(L);
else
WaitTime = new EvenDistribution(L);
if (WorkExponent.Checked)
WorkTime = new ExponentDistribution(L);
else
WorkTime = new EvenDistribution(L);
int NAccepted = 0;
int NDenied = 0;
double Tj = 0;
double Tzv = 0;
double TMaxWait = 0;
double Tbegin = 0;
double Twork = 0;
double Twait = 0;
do
{
Tj = ComeTime.Next();
if(Tj < T)
{
if(Tj < Tzv)
{
TMaxWait = WaitTime.NextElement();
if( (Tj+TMaxWait) < Tzv)
{
NDenied++;
continue;
}
else
{
Twork = WorkTime.NextElement();
if ( (Tzv + Twork) < T)
{
Tbegin = Tzv;
Tzv = Tbegin + Twork;
NAccepted++;
Twait += (Tbegin - Tj);
continue;
}
else
{
NDenied++;
continue;
}
}
}
else
{
Twork = WorkTime.NextElement();
if ((Tj + Twork) < T)
{
Tbegin = Tj;
Tzv = Tbegin + Twork;
NAccepted++;
Twait += (Tbegin - Tj);
continue;
}
else
{
NDenied++;
continue;
}
}
}
else
{
break;
}
}
while(true);
OutputBox.Text = string.Format("Виконано заявок : {0}\r\nВідхилено заявок : {1}\r\nСередній час очікування в черзі : {2}" +
"\r\n\r\nПроцент відкидання заявок : {3:F2}%",
NAccepted, NDenied, Twait / (double)NAccepted, (double)NDenied / (double)(NAccepted + NDenied) * 100);
}
}
}
Результат виконання завдання:
Висновок: в даній роботі я навчився формувати реалізації випадкових потоків однорідних подій із заданим законом розподілу, необхідних для моделювання виробничої системи з використанням моделі у вигляді системи масового обслуговування. Я реалізував моделюючий алгоритм імітаційного моделювання системи масового обслуговування, що представляє виробничу систему та провів імітаційне моделювання системи масового обслуговування і статистичний аналіз результатів моделювання.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!