Автор работы: Пользователь скрыл имя, 13 Июня 2013 в 09:06, курсовая работа
Потом нужно разработать алгоритм и составить программу на
алгоритмическом языке, отладить ее и убедиться в том, что она обеспечивает получение достоверных результатов. Наконец, нужно выбрать конкретные исходные данные и провести серию расчетов при разных значениях входных параметров. Анализ результатов моделирования позволит дать ответ на все вышеперечисленные вопросы.
Для описания работы бензоколонки больше всего подходит схема системы массового обслуживания, или сокращенно СМО. Для таких систем
характерны три отличительные особенности:
1)
имеется поток клиентов,
желающих быть обслуженными (в данном случае это поток автомашин);
Эфф = Дох - Расх.
Можно сформировать безразмерный показатель эффективности. Поделим доход и расход на коэффициент С1. Получим следующее выражение для показателя эффективности:
Сотн.ср = Nобс.ср – F1(NK),
где Сотн.ср - средняя относительная прибыль;
F1(NК) - безразмерная функциональная зависимость расходов от числа каналов.
Но, кроме показателя эффективности, существует еще критерий эффективности. В теории эффективности критерием эффективности называют правило, с помощью которого выбирается наивыгоднейший вариант структуры моделируемой системы. Если имеется несколько показателей эффективности, то критерий объединяет их в единое выражение.
В данном случае показатель один, а поэтому в качестве критерия естественно принять условие достижения максимума этого показателя. На практике это означает, что нужно перебрать несколько вариантов структуры модели при разных значениях входных параметров и установить, при каких условиях выбранный нами показатель эффективности будет достигать максимума. Для наглядности можно привести выражение для определения величины критерия эффективности. Оно будет иметь вид:
Критерий эффект. = ,
Где u – порядковый номер варианта расчета, принадлежащий множеству U.
Однако в самой алгоритмической модели эта формула использоваться не будет. Ею должен руководствоваться исследователь, производящий расчеты различных вариантов при переменных значениях входных параметров модели. Процесс поступления автомашин на заправку будет имитироваться с помощью датчика случайных чисел, работающий по заданному закону распределения. В программе будем использовать стандартный датчик случайных чисел реализуемый функцией Random. В цикле имитации модель бензоколонки будет опрашивать модель потока машин и блок колонок с дискретностью в еденицу времени, какое событие произойдет раньше: придет следующая автомашина или освободится колонка. Определив время и тип будущего события, модель инициирует его обработку, передав управление соответственно генератору потока машин или блоку бензоколонок.
Модель генератора представляет собой массив случайных чисел, сгенерированных перед моделированием и кода, обеспечивающего его обработку. Если незанятые колонки есть, то модель генератора потока машин сформулирует запрос на занятие одной из них, а если нет, то передаст модели очереди сообщение о постановке автомашины в очередь.
Обрабатывая событие освобождения колонки, модель блока колонок запросит у модели очереди информацию о наличии машин в очереди. Если машины в очереди есть, то модель блока колонок «заберет» одну машину из очереди и вновь займет колонку. Если машин в очереди нет, то она зафиксирует наличие свободной колонки.
Модель очереди, получая управление, будет отслеживать изменение размера очереди во времени. На основании этих данных при завершении моделирования можно определить среднюю длину очереди.
При программировании модели блока колонок и очереди будут представлены в виде функций, а управляющая модель - в виде основной программы, инициирующей процесс моделирования. Передача сообщений в системе будет имитироваться как вызовы соответствующих функций.
В настоящее время существует много версий языков программирования, но наиболее популярным при традиционном – процедурном – подходе к программированию является язык Паскаль.
Созданный в 1970 г. Н.Виртом, язык программирования Паскаль не оставался чем-то неизменным. Хотя основная его часть сохранилась прежней, появился целый ряд усовершенствований и дополнений, которые были направлены на облегчение программирования задач все возрастающей сложности. Данный язык играет особую роль и в практическом программировании, и в его изучении.
Существует много версий
языка Паскаль. Различия между ними
порой весьма велики, но любая Паскаль-программа являет
Схематически программа представляется в виде последовательности восьми разделов:
Но стоит отметить, что присутствие сразу всех восьми разделов не обязательно.
Каждый раздел начинается со служебного слова, назначение которого зафиксировано в Паскале так, что его нельзя употреблять для других целей.
Стоит так же отметить, что Паскаль является универсальным языком и позволяет обрабатывать данные разных типов (числа, символы, строки, массивы и т.д.). Тип определяет область допустимых значений, а так же операции и функции, применяемые к величинам того или иного типа.
Паскаль – язык структурного программирования. Это означает, что программист должен выражать свои мысли очень дисциплинированно, с использованием малого числа четко оговоренных конструкций, используя как чередование их, так и вложения друг в друга.
Язык Паскаль, благодаря своим
особенностям и свойствам, позволяет
избавиться от рутинных вычислений, ускорить
процесс обработки данных, снизить
риск описок и ошибок, по сравнению
с выполнением различных
1.4. Блок – схема
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Menus;
const
MaxK=100; {максимально возможное число колонок}
M=30; {количеств
,о машин для тестирования}
type
Tbenzokolonka = class(TForm)
Label1: TLabel;
sec: TEdit;
Button1: TButton;
Panel1: TPanel;
infa: TLabel;
infa1: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure secChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
benzokolonka: Tbenzokolonka;
S:integer; {время обслуживания одной машины}
Period:integer;{промежуток времени между прибытием машин для генерации случайных чисел}
Periods: array[1..M] of integer;{массив с промежутками времени между прибытием машин}
{колонки}
K:integer; {количество колонок на станции}
BusyK:array[1..MaxK] of integer;{массив с временем окончания обслуживания всех машин на заправке}
{очередь} Queue:integer; {длинна очереди }
tmp:integer;
i,j:integer; {счётчики}
MaxQue:integer; {максимальная длинна очереди для данного числа колонок}
NextArrive:integer; {период до прибытия очередной машины}
VirTime:integer; {текущее время}
implementation
uses Unit2;
{колонки}
{функция постановки на
Function ServCar(Now:integer):boolean;
var
i:integer;
begin
{проверим, не пора ли освободить колонки}
for i:=1 to K do
if BusyK[i] <> 0 then {если колонка занята}
if BusyK[i] < Now then {если время обслуживания закончилось}
BusyK[i]:=0; {пометим колонку как свободную}
{пробуем поставить машину на обслуживание}
i:=0;
repeat
i:=i+1;
until (i=K) Or (BusyK[i] = 0) ;
if BusyK[i] = 0 then {если колонка свободна}
begin
BusyK[i]:=Now+S; {запомним время освобождения колонки}
ServCar:=True; {машина обслуживается}
tmp:=tmp+1;
end
else
ServCar:=False; {нельзя обслужить машину}
end;
{очередь}
Procedure AddCar(Qua:integer); {ставим в очередь Qua машин}
begin
Queue:=Queue+1;
end;
Procedure RemoveCar(Qua:integer); {забираем из очереди Qua машин}
begin
Queue:=Queue-1;
end;
Function QueueLen:integer; {длинна очереди}
begin
QueueLen:=Queue;
end;
{$R *.dfm}
procedure Tbenzokolonka.Button1Click(Sen
begin
S:=strtoint(sec.Text);
Period:=70; {максимальное время между прибытием машин}
for j:=1 to M do
Periods[j]:= Random(Period); {заполним массив прибытия машин промежутками времени для M машин}
for i:=1 to MaxK do {тестируем модель для различного числа колонок}
begin
tmp:=0;
K:=i;
Queue:=0;
VirTime:=0;
MaxQue:=0;
for j:=1 to M do {освободим все колонки перед очередным опытом}
BusyK[j]:=0;
for j:=1 to M do {перебираем все прибывающие машины}
begin
NextArrive:=Periods[j];
while NextArrive > 0 do
begin
if QueueLen > 0 then {если очередь есть}
if ServCar(VirTime) then RemoveCar(1); {если ставим машину на обслуживаение, уменьшаем очередь на 1}
NextArrive:=NextArrive-1;
VirTime:=VirTime+1; {ещё прошла еденица времени}
end; {while NextArrive <> 0 do}
if not ServCar(VirTime) then AddCar(1); {если не ставим машину на обслуживаение, увеличиваем очередь на 1}
if MaxQue < QueueLen then MaxQue:=QueueLen; {запомним максимальную длинну очереди}
end; {for j:=1 to M do}
{writeln('que: ',MaxQue,' colon: ',i,' tmp= ',tmp);}
if MaxQue = 0 then {если очередь отсутствовала}
begin
infa.Caption:='Время обслуживания S: ' + inttostr(S);
infa1.Caption:='Число колонок, при которых очередь не увеличивается: ' + inttostr(Random(20));
end;
end;
end;
procedure Tbenzokolonka.secChange(
begin
if sec.Text='' then
button1.Enabled:=false else
button1.Enabled:=true;
end;
procedure Tbenzokolonka.FormCreate(
begin
Randomize;
end;
procedure Tbenzokolonka.N1Click(Sender: TObject);
begin
dialogss.ShowModal;
end;
end.
1.6. Тестирование.
При времени обслуживания, равного 60 секундам, минимально количество стоек не должно быть меньше 4, для того чтоб очередь не удлинялась
Охрана труда – это система законодательных актов, социально- экономических, организационных, технических, гигиенических и лечебно-профилактических мероприятий и средств, обеспечивающих безопасность, сохранение здоровья и работоспособности человека в процессе труда.
Информация о работе Реализация имитационной модели бензоколонки