[0.2,p[i,20]],[0.3,p[i,30]],[0.4,p[i,40]],[0.5,p[i,50]],[0.75,p[i,75]],[1,p[i,100]],
[1.25,p[i,125]],[1.5,p[i,150]],[1.75,p[i,175]],[2,p[i,200]],[2.5,p[i,250]],[3,p[i,300]],
[4,p[i,400]],[5,p[i,500]] ]):
end:
> i:=0: a[i]:=PLOT(cur[i],COLOR(RGB,0,0,0)): # P0 - черный
i:=1: a[i]:=PLOT(cur[i],COLOR(RGB,0,0,1)): # P1 - синий
i:=2: a[i]:=PLOT(cur[i],COLOR(RGB,1,0,0)): # P2 - красный
i:=3: a[i]:=PLOT(cur[i],COLOR(RGB,0,1,1)): # P3 - голубой
i:=4: a[i]:=PLOT(cur[i],COLOR(RGB,1,0,1)): # P4 - малиновый
i:=5: a[i]:=PLOT(cur[i],COLOR(RGB,0,1,0)): # P5 - зеленый
> display({a[0],a[1],a[2],a[3],a[4],a[5]});
Приложение 2
Листинг программы имитационного моделирования
Программа написана на языке Delphi7.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CMO_misiagin
{
class CMO_work
Random R; // Генератор случайных чисел
public uint Max_dlina_ocheredi; // Максимальная длина очереди
public uint chislo_kanalov_in_system; // Число каналов в системе
public double Lamda; // Интенсивность потока поступления заявок
public double Mu; // Интенсивность потока обслуживания заявок
public double shag_by_time; // Шаг по времени
public double[] t_oconch_obsl_vo_vsex_canalax; // Время окончания обслуживания заявки во всех каналах
public double[] t_v_sostoijaniax_s_ocher; // Время пребывания СМО в состояниях с очередью
public double t_rab_sistem; // Время работы системы
public double summ_t_obsl_zaijvok; // Суммарное время обслуживания заявок
public uint chislo_post_zaijavok; // Число поступивших заявок
public uint chislo_otkaz_zaijavok; // Число отказанных заявок
public uint chislo_obslu_zaijavok; // Число обслуженных заявок
uint dlina_ocheredi; // Длина очереди
public uint Dlina_ocheredi
get
{ return dlina_ocheredi; }
set
if (value < 0)
{ dlina_ocheredi = 0; }
else if (value > 2)
{ }
else
{ dlina_ocheredi = value;}
}
// Состояния СМО {ССС,ССЗ,СЗС,ЗСС,СЗЗ,ЗСЗ,ЗЗС,ЗЗЗ,ЗЗЗ+1,ЗЗЗ+2}
enum Sostoijanija_sustem { S0, S1, S2, S3, S4, S5, S6, S7, S8, S9};
Sostoijanija_sustem tekushee_sost_sustem; // Текущее состояние системы
/// <summary>
/// Представляет модель системы массового обслуживания (СМО)
/// </summary>
/// <param name="p_chislo_kanalov_in_system">Число каналов в системе</param>
/// <param name="p_Max_dlina_ocheredi">Максимальная длина очереди</param>
/// <param name="p_Lamda">Интенсивность потока поступления завок</param>
/// <param name="p_Mu">Интенсивность потока обслуживания завок</param>
/// <param name="p_shag_by_time">Шаг по времени</param>
public CMO_work(uint p_chislo_kanalov_in_system, uint p_Max_dlina_ocheredi, double p_Lamda, double p_Mu, double p_shag_by_time)
SetDefaults();
R = new Random();
chislo_kanalov_in_system = p_chislo_kanalov_in_system;
Max_dlina_ocheredi = p_Max_dlina_ocheredi;
Lamda = p_Lamda;
Mu = p_Mu;
shag_by_time = p_shag_by_time;
t_oconch_obsl_vo_vsex_canalax = new double[chislo_kanalov_in_system];
t_v_sostoijaniax_s_ocher = new double[Max_dlina_ocheredi];
/// Устанавливает значения параметров СМО по умолчанию
public void SetDefaults()
tekushee_sost_sustem = Sostoijanija_sustem.S0;
chislo_post_zaijavok = 0;
chislo_otkaz_zaijavok = 0;
chislo_obslu_zaijavok = 0;
t_rab_sistem = 0;
summ_t_obsl_zaijvok = 0;
dlina_ocheredi = 0;
for (int i = 0; i < chislo_kanalov_in_system; i++)
{ t_oconch_obsl_vo_vsex_canalax[i] = 0; }
for (int i = 0; i < Max_dlina_ocheredi; i++)
{ t_v_sostoijaniax_s_ocher[i] = 0; }
/// Определяет случайным образом, поступила ли заявка
/// <returns>true - поступила, false = не поступила</returns>
bool prichla_li_sluchain_zaijavka()
double r = R.NextDouble();
if (r < (shag_by_time * Lamda))
{ return true; }
return false;
/// Определяет случайным образом время облуживания заявки
/// <returns>Время облуживания заявки</returns>
double t_obslujivania_zaijvki()
return (-1/Mu*Math.Log(1-r, Math.E));
/// Определение текущего состояния
/// <returns>Состояние системы</returns>
Sostoijanija_sustem opred_tec_sost()
Sostoijanija_sustem _sostoijanija_sustem = Sostoijanija_sustem.S0;
int k = 0;
int zanijat_chislo_kanalov_in_system = 0;
if (t_oconch_obsl_vo_vsex_canalax[i] > 0)
k = 1;
zanijat_chislo_kanalov_in_system++;
{ k = 0; }
_sostoijanija_sustem += k * (i + 1);
if (zanijat_chislo_kanalov_in_system > 1)
{ _sostoijanija_sustem ++; }
return _sostoijanija_sustem + (int)dlina_ocheredi;
/// Один шаг моделирования системы
public void modelirovanie_sustem()
t_rab_sistem += shag_by_time;
tekushee_sost_sustem = opred_tec_sost();
if (dlina_ocheredi > 0)
t_v_sostoijaniax_s_ocher[dlina_ocheredi - 1] += shag_by_time;
if (t_oconch_obsl_vo_vsex_canalax[i] <= 0)
t_oconch_obsl_vo_vsex_canalax[i] = t_obslujivania_zaijvki();
summ_t_obsl_zaijvok += t_oconch_obsl_vo_vsex_canalax[i];
dlina_ocheredi--;
break;
if (prichla_li_sluchain_zaijavka())
chislo_post_zaijavok++;
if (dlina_ocheredi < Max_dlina_ocheredi)
chislo_obslu_zaijavok++;
if (tekushee_sost_sustem < Sostoijanija_sustem.S7)
{ dlina_ocheredi++; }
{ chislo_otkaz_zaijavok++; }
t_oconch_obsl_vo_vsex_canalax[i] -= shag_by_time;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
public partial class Form1 : Form
CMO_work work;
uint chislo_progonov;
List<double> P, Q, A, K, Lo, To, Percents_otkaz, Percents_Prin;
uint n = 3; // Число каналов
uint m = 2; // MAX длина очереди
public Form1()
InitializeComponent();
work = new CMO_work(n, m, (double)numericUpDown1.Value, (double)numericUpDown2.Value, (double)numericUpDown3.Value);
chislo_progonov = 0;
P = new List<double>();
Q = new List<double>();
A = new List<double>();
K = new List<double>();
Lo = new List<double>();
To = new List<double>();
Страницы: 1, 2, 3, 4, 5, 6