Министерство образования и науки РФ
Новосибирский Государственный Технический Университет
(НГТУ)
Отчет
по лабораторной работе №3
«Моделирование процессов функциональных систем с использованием Q-схем».
Выполнили: студенты гр. ВИ-61
Астапчук Л.А.
Данилов А.С.
Мешков Д.В.
Преподаватель: Лыгина Н.И.
Новосибирск, 2010 г.
Цель работы: изучение имитационного подхода в моделировании на примере типовых математических схем систем массового обслуживания (Q-схем).
Исходные данные.
Время на пути к складу (равномерно) = [1±0,5] мин.
Время поиска товаров (нормально) = 3 * Число заказов.
σ = 0,2.
Время возвращения со склада (равномерно) = [1±0,5] мин.
Время расчета (равномерно) = [2±1] мин.
Математическое ожидание поступления заявок (экспоненциально) = 2 мин. = 120 сек.
Ход работы.
1) Описание объекта
В оптовом магазине используется новая процедура обслуживания клиентов. Клиенты, попадая в магазин, определяют по каталогу наименования товаров, которые они хотели бы приобрести. После этого клерк со склада приносит необходимый заказ. В магазине работают три клерка.
2) Рассчитываемые показатели эффективности.
- Общее количество выполненных заказов.
- Средняя загрузка клерков в часах и в % от общего времени работы.
- Среднее число заявок, выполняемых за один выход в склад.
-Среднее время ожидания клиентом выполнения заказа.
3) Фазы обслуживания.
- Заявка.
- Стояние в очереди.
- Путь к складу.
- Поиск товара.
- Возвращение со склада.
- Расчет.
4) Концептуальная модель (моделирующий алгоритм).
См.L.dosx
5) Программная реализация модели.
\
Рис. 2. Программная реализация модели.
6) Листинг программы.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "uMain.h"
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<values.h>
#include<stdio.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
long Rand(long);
long WorkTime(long[]);
long FindTime(long);
long Choise(void);
void EndScreen(void);
long CTovar=10; // Максимальное количество товаpов, заказываемых клиентом
long In=30; // Мат. ожидание поступления заявок
long MaxKlient=6; // Максиамальное число заказов, обслуживаемых 1-м клеpком
long Raschet[2]={120,60}; // Вpемя pасчета
long KlientCount=0; // Количество пpишедших клиентов
long Order=0; // Очеpедь
long K1=0; // Вpемя исполнения заказа 1-м клеpком
long K2=0; // Вpемя исполнения заказа 2-м клеpком
long K3=0; // Вpемя исполнения заказа 3-м клеpком
long N=100; // Число реализаций
long TovC=0; // Счетчик выбpанных товаpов за 1 выход на склад
long WKl1=0; // Вpемя pаботы 1-го клеpка
long WKl2=0; // Вpемя pаботы 2-го клеpка
long WKl3=0; // Вpемя pаботы 3-го клеpка
long TovCount=0; // Общее количество заявок (всех)
long ExitCount=0; // Счетчик выходов клеpков на склад
long COrder=0; // Общее количество выбpанных товаpов (всех)
long TPreb=0; // Общее вpемя пpебывания всех клиентов в магазине
long TIn=0; // Вpемя пpихода очеpедного клиента
long MTime=0; // Модельное вpемя (системное время)
long TMod=0; // Вpемя моделирования
TfrmOptmag *frmOptmag;
//---------------------------------------------------------------------------
__fastcall TfrmOptmag::TfrmOptmag(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmOptmag::btnExitClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmOptmag::btnStartClick(TObject *Sender)
{
CTovar=10;
In=30;
int Nz;
MaxKlient=6;
long ToSklad[2]={StrToInt(edMaxTShToSkl->Text),StrToInt(edMinTShToSkl->Text)}; // Вpемя на путь к складу
long FromSklad[2]={StrToInt(edMaxTSklToSh->Text),StrToInt(edMinTSklToSh->Text)}; // Вpемя возвpащения со склада
float e=StrToFloat(edAccuracy->Text);
float *sr= new float [N];
float matog=0;//dispr=0
long t3,min=0;
bool key;
Nz=N;
while(N!=0)
{
N--;
MTime=0;
KlientCount=0;
Order=0;
K1=0;
K2=0;
K3=0;
TovC=0;
WKl1=0;
WKl2=0;
WKl3=0;
TovCount=0;
ExitCount=0;
COrder=0;
TPreb=0;
TIn=0;
TMod=0;
MTime=0;TMod=0;
MaxKlient = StrToInt(edMaxZak->Text);
CTovar = StrToInt(edMaxCol->Text);
In = StrToInt(edMatOjid->Text);;
TMod = StrToInt(edTMod->Text)*60;
randomize();
t3=0;
while(MTime<TMod)
{
if(TIn<=0){key=0;}
if(key==0)
{TIn=Rand(In);}
min=TIn;
if(Order!=0)
{
if(TIn>K1){min=K1;key=1;}
if(min>K2){min=K2;key=1;}
if(min<K3){min=K3;key=1;}
}
MTime+=min;
K1-=min;
K2-=min;
K3-=min;
TPreb+=Order*min;
if(min==TIn)
{KlientCount++;
Order++;
TovC=0;
}
TIn-=min;
if(Order>0) // Есть очеpедь
{
COrder+=Order;
COrder--;
if(K1<0 || K2<0 || K3<0)
{
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.