Вход

вариант 5

Рекомендуемая категория для самостоятельной подготовки:
Курсовая работа*
Код 127818
Дата создания 2009
Страниц 66
Источников 3
Мы сможем обработать ваш заказ (!) 1 ноября в 12:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
3 830руб.
КУПИТЬ

Содержание

Содержание
Введение
Постановка задачи.
Терминология.
Алгоритм программы
Инструкция к программе.
Исходный код программы
Результаты моделирования
Выводы
Заключение
Список литературы

Фрагмент работы для ознакомления

dfm}
{ TSRExponential }
function TSRUniform.GetDelay: real;
begin
// Получение интервала времени до следующей заявки (машины)
Result:=self.m+(2*Random-1)*sigma;
end;
{ TTVCheckerModel }
procedure TTVCheckerModel.AddCaptionsToFile(AFileName: string);
var F:TextFile;
begin
Assign(F,AFileName);
Append(F);
write(f,'Успешно обслужено;');
write(f,'Потеряно;');
write(f,'Среднее количество телевизоров, ожидающих проверки;');
write(f,'Макисмальное количество телевизоров, ожидающих проверки;');
write(f,'Среднее время ожидания проверки;');
write(f,'Среднее количество телевизоров, ожидающих наладки;');
write(f,'Макисмальное количество телевизоров, ожидающих наладки;');
write(f,'Среднее время ожидания наладки;');
write(f,'Загрузка наладчика;');
write(f,'Загрузка первого тестировщика;');
writeln(f,'Загрузка второго тестировщика');
Close(f);
end;
procedure TTVCheckerModel.AddResultsToFile(AFileName: string);
var F:TextFile;
begin
Assign(F,AFileName);
Append(F);
write(f,SuccCount,';');
write(f,DiscCount,';');
write(f,AvgCheQueLength:5:3,';');
write(f,CheckerQueue.CalcMaxCount:5,';');
write(f,AvgCheQueTime/TimeSize:5:3,';');
write(f,AvgTunQueLength:5:3,';');
write(f,TunerQueue.CalcMaxCount:5,';');
write(f,AvgTunQueTime/TimeSize:5:3,';');
write(f,AvgTunLength:5:3,';');
write(f,AvgChe1Length:5:3,';');
writeln(f,AvgChe2Length:5:3);
Close(f);
end;
procedure TTVCheckerModel.CalculateStats;
var i:integer;
p:real;
AvgTime,St,Et:TDateTime;
begin
for I := 0 to High(SuccStatistics) do
begin
St:=SuccStatistics[I].StartTime;
Et:=SuccStatistics[I].EndTime;
with SuccStatistics[I] do
begin
if ModelTime >0 then p:=-(Et-St)/ModelTime;
if Count >0 then AvgTime:=-(ET-St)/Count;
case PID of
1: // Очередь цеха проверки
begin
AvgCheQueLength:=p;
AvgCheQueTime:=AvgTime;
end;
3:
begin
// Первый настройщик
AvgChe1Length:=p;
AvgChe1Time:=AvgTime;
end;
4:
begin
// Второй настройщик
AvgChe2Length:=p;
AvgChe2Time:=AvgTime;
end;
5: // Очередь цеха наладки
begin
AvgTunQueLength:=p;
AvgTunQueTime:=AvgTime;
end;
6:
begin
// Цех наладки
AvgTunLength:=p;
AvgTunTime:=AvgTime;
end;
end;
end;
end;
end;
destructor TTVCheckerModel.Destroy;
begin
// Освобождение ресурсов
Source.Free;
Tuner.Free;
TunerQueue.Free;
Checkers.Free;
CheckerQueue.Free;
end;
procedure TTVCheckerModel.FullModel;
begin
PID:=0;
// Размерность одной единицы времени - 1 минута
TimeSize:=1/24/60;
// Создаём источник заявок с экспоненциальным распределением
// времени между заявками
Source:=TSRUniform.Create(self);
// Создаём очередь
CheckerQueue:=TQueue.Create(self);
// Создаём обслуживающий многоканальный прибор
// c 3 каналами обслуживания
Checkers:=TMultiUniformChannel.CreateMchUniformDev(self,2,'Проверяющие');
TunerQueue := TQueue.Create(self);
TunerQueue.Name := 'Склад перед настройщиком';
Tuner := TSPUniform.Create(self);
Separator:=TSeparator.Create(self);
// Создаём сток для заявок
Terminator:=TTerminator.Create(self);
// Задаём параметры источника заявок
Source.m:=10;
Source.sigma := 6;
SOurce.Name:='Предпоследний участок';
Tuner.m := 30;
Tuner.sigma := 10;
Tuner.Name := 'Настройщик';
// Соединяем источник с очередью
Source.InsertTo(CheckerQueue);
// Задаём параметры очереди
CheckerQueue.QueueLength := -1;
CheckerQueue.Name:='Склад перед проверяющими';
// Соединяем очередь с прибором и источником заявок
CheckerQueue.InsertTo(Checkers);
CheckerQueue.AddTo(Source);
// Соединяем прибор с очередью и стоком заявок
Checkers.AddTo(CheckerQueue);
Checkers.InsertTo(Separator);
Checkers.m := 20;
Checkers.sigma := 5;
Separator.AddTo(Checkers);
Separator.IfProb := 0.5;
Separator.IfNext := Terminator;
Separator.ElseNext := TunerQueue;
Tuner.AddTo(TunerQueue);
Tuner.InsertTo(CheckerQueue);
TunerQueue.AddTo(Separator);
TunerQueue.InsertTo(Tuner);
TunerQueue.QueueLength:=2;
// Нет предпочтений в выборе проверяющего
Checkers.ISRandomChoose:=true;
// Соединяем сток с прибором
Terminator.AddTo(Separator);
AddUnit(Source);
AddUnit(TunerQueue);
AddUnit(CheckerQueue);
AddUnit(Tuner);
AddUnit(Checkers);
AddUnit(Separator);
AddUnit(Terminator);
end;
procedure TTVCheckerModel.RewriteResultsToFile(AFileName: string);
var F:TextFile;
begin
Assign(F,AFileName);
Rewrite(F);
Close(f);
end;
procedure TfrmMain.btnStartClick(Sender: TObject);
var
i:integer;
p:real;
avgtime:TDateTime;
begin
// Делаем один шаг моделирования до тех пор
// пока модельное время не превысит 8 часов
Fmodel.Reset;
FModel.DiscCount := 0;
FModel.SuccCount := 0;
btnPrepare.Click;
Fmodel.RunTo(StrToFloat(Edit1.Text)/24);
lblModelTime.Caption := FloatToStr(FModel.DiscCount)+'/'+FloatToStr(Fmodel.SuccCount);
// рассчитываем параметры системы
Fmodel.CalculateStats;
edtLog.Lines.Clear;
// выводим их на экран
edtLog.Lines.Add(Format('%s %f',['Среднее количество телевизоров, ожидающих проверки',FModel.AvgCheQueLength]));
edtLog.Lines.Add(Format('%s %d',['Макисмальное количество телевизоров, ожидающих проверки',FModel.CheckerQueue.CalcMaxCount]));
edtLog.Lines.Add(Format('%s %f',['Среднее время ожидания проверки',FModel.AvgCheQueTime/Fmodel.TimeSize]));
edtLog.Lines.Add(Format('%s %f',['Среднее количество телевизоров, ожидающих наладки',FModel.AvgTunQueLength]));
edtLog.Lines.Add(Format('%s %d',['Макисмальное количество телевизоров, ожидающих наладки',FModel.TunerQueue.CalcMaxCount]));
edtLog.Lines.Add(Format('%s %f',['Среднее время ожидания наладки',FModel.AvgTunQueTime/Fmodel.TimeSize]));
edtLog.Lines.Add(Format('%s %f',['Загрузка наладчика',FModel.AvgTunLength]));
edtLog.Lines.Add(Format('%s %f',['Загрузка первого тестировщика',FModel.AvgChe1Length]));
edtLog.Lines.Add(Format('%s %f',['Загрузка второго тестировщика',FModel.AvgChe2Length]));
edtLog.Lines.Add(Format('%s %d',['Потеряно заявок',FModel.DiscCount]));
edtLog.Lines.Add(Format('%s %d',['Успешно обслужено',FModel.SuccCount]));
end;
procedure TfrmMain.btnStepClick(Sender: TObject);
var i,j:integer;
p:real;
begin
// Проводим один шаг моделирования
FModel.Step;
lblModelTime.Caption := FloatToStr(FModel.DiscCount)+'+'+FloatToStr(Fmodel.SuccCount);
end;
procedure TfrmMain.btnToFileClick(Sender: TObject);
var Filename:String;
I: Integer;
begin
Filename := ExtractFilePath(Application.ExeName)+'\out.csv';
btnPrepare.Click;
FModel.RewriteResultsToFile(Filename);
FModel.AddCaptionsToFile(Filename);
for I := 1 to 500 do
begin
Fmodel.Reset;
Fmodel.RunTo(StrToFloat(Edit1.Text)/24);
Fmodel.CalculateStats;
FModel.AddResultsToFile(Filename);
Application.ProcessMessages;
end;
end;
procedure TfrmMain.btnPrepareClick(Sender: TObject);
begin
// Подготавливаем модель
FModel.Start;
// Задаём параметры модели
Fmodel.CheckerQueue.QueueLength:=StrToIntDef(self.edtCheckersQueueLength.Text,0);
Fmodel.TunerQueue.QueueLength:=StrToIntDef(self.edtCQL.Text,0);
FModel.Source.m := StrToFloat(self.edtSm.Text);
FModel.Source.sigma := StrToFloat(self.edtSSigma.Text);
FModel.Tuner.m := StrToFloat(self.edtTM.Text);
FModel.Tuner.sigma := StrToFloat(self.edtTS.Text);
Fmodel.Checkers.m := StrToFloat(self.edtChM.Text);
Fmodel.Checkers.sigma := StrToFloat(self.edtChSigma.Text);
FModel.Separator.IfProb := StrToFloat(self.edtTestLevel.Text);
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
// Создание объекта - модели
FModel:=TTVCheckerModel.Create;
Fmodel.FullModel;
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
// Осовбождение объекта - модели
FModel.Free;
end;
{ TSDUniform }
function TSPUniform.GetDelay: real;
begin
Result:=self.m+(2*Random-1)*sigma;
end;
{ TMultiUniformChannel }
class function TMultiUniformChannel.CreateMchUniformDev(AModel: TModel;
ADevCount: integer; AName: string): TMultiUniformChannel;
var i:integer;
begin
Result := Create(AModel);
with Result do
begin
// Задаём массив приборов
SetLength(FPribors,ADevCount);
FName:=AName;
for I := 0 to ADevCount - 1 do
begin
// Создаём прибор
FPribors[i]:=TSPUniform.Create(AModel);
// Присваиваем ему составное имя
FPribors[i].Name :=Format(AName+'%d',[i+1]);
// Делаем его следующим относительно многоканального устройства
FPribors[i].AddTo(Result);
// и изначально не заянятым
FPribors[i].FIsBusy:=false;
end;
ISRandomChoose:=false;
PrefDev:=0;
FActive:=false;
FDevCount:=ADevCount;
end;
end;
procedure TMultiUniformChannel.SetFm(Value: real);
var i:integer;
begin
for I := 0 to High(FPribors) do
begin
TSPUniform(FPribors[i]).m := Value;
end;
self.Fm := Value;
end;
procedure TMultiUniformChannel.SetSigma(Value: real);
var i:integer;
begin
for I := 0 to High(FPribors) do
begin
TSPUniform(FPribors[i]).sigma := Value;
end;
self.fsigma := Value;
end;
begin
// Инициализация генератора случайных чисел
Randomize;
end.
Результаты моделирования
(Время моделирования – 8 часов, среднее за 500 прогонов)
Место на складе 1 Место на складе 2 Отброшенных заявок Обслуженных заявок Загрузка 1 контролера Загрузка 2 контролера Загрузка наладчика ∞ 1 3,598 87 0,89 0,89 0,6 ∞ 5 0,366 87,684 0,67 0,91 0,91 ∞ 10 0 87 0,91 0,91 0,66 1 ∞ 10,552 81,614 0,84 0,84 0,56 5 ∞ 1,33 87,644 0,91 0,91 0,66 10 ∞ 0,066 87,424 0,91 0,91 0,68 18 ∞ 0 87,454 0,91 0,91 0,68 18 10 0,0 86,9 0,91 0,91 0,67
Выводы
Как видно из результатов моделирования нулевые потери заявок обеспечивают следующие длины очередей – 18 для очереди перед цехом контроля и 10 для очереди перед цехом наладки. Это означает, что на складе в цехе контроля должно быть предусмотрено место, как минимум, 18 телевизоров; а в цехе наладки – для 10 телевизоров.
Заключение
В данном курсовом проекте была создана программа, реализующая имитационную модель станции технического контроля телевизионного цех, и решена задача выбора оптимальной максимальной длины очередей.
Имитационное моделирование — удобный способ решить задачу исследования поведения системы в случае, если провести эксперименты на реальной модели затруднительно, дорого или вовсе невозможно.
Список литературы
Хомоненко А. Гофман В. Мещеряков Е. Никифоров В. Delphi 7 — Санкт-Петербург: БХВ-Санкт-Петербург, 2006.— 1216 с.
Цифровая имитация автоматизированных систем — Москва: Институт проблем передач информации АН СССР, 1983.— 139 с.
Шенном Р. Имитационное моделирование систем — исскуство и наука; пер с англ. — Москва: Наука, 1985.— 237 с.
1
Присвоить времени следующего события модели время текущего объекта (NextModelTime = Object.NextMesslTime)
Создать события для всех активных узлов, для которых время следующего события равно текущему модельному времени
Да
Нет
Время следующего события текущего объекта меньше времени модели? (Object.NextMesslTime < NextModelTime)
Выбрать следующий активный объект модели
Да
Нет
Продвинуть модельное время к времени следующего события (AModelTime = NextModelTime).
Объекты модели закончились?
Нет
Да
Обработать результаты
Конец
Модельное время больше времени окончания моделирования (ModelTime > EndTime)?
Установить модельное время в 0 (ModelTime=0)
Начало

Список литературы [ всего 3]

Список литературы
1.Хомоненко А. Гофман В. Мещеряков Е. Никифоров В. Delphi 7 — Санкт-Петербург: БХВ-Санкт-Петербург, 2006.— 1216 с.
2.Цифровая имитация автоматизированных систем — Москва: Институт проблем передач информации АН СССР, 1983.— 139 с.
3.Шенном Р. Имитационное моделирование систем — исскуство и наука; пер с англ. — Москва: Наука, 1985.— 237 с.
Очень похожие работы
Найти ещё больше
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
bmt: 0.00458
© Рефератбанк, 2002 - 2024