Лабораторная работа №2. Имитационное моделирование информационных процессов на языке высокого уровня. Модель с постоянным шагом. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Лабораторная работа №2. Имитационное моделирование информационных процессов на языке высокого уровня. Модель с постоянным шагом.



 

Цель работы: исследование возможностей и приобретение навыков использования имитационных моделей, реализованных с помощью языка С++ на основе модели с постоянным шагом.

 

Методические указания

Рассмотрим процесс моделирования системы на языке С++. Пусть генерируются заявки каждые 3+-2 секунды, которые попадают в очередь. После этого транзакты поступают в одну из свободных ЭВМ и обрабатываются втечении 8+-1 и 4+-2 сек. соответственно. Далее после обработки они удаляются из системы. Данный процесс показан на рисунке 18.1.

 

 

 


Рис. 18.1. Q-схема прохождения заявки

В этой задаче необходимо найти:

1. Текущее количество заявок в очереди.

2. Обработанное количество заявок.

Форма приложения представлена на рисунке 18.2.

Рис. 18.2. Форма приложения

На ней показаны параметры модели, которые можно регулировать, кнопка запуска и результаты моделирования.

Заголовочный файл программы имеет вид:

Model.h

//-----------------------------------------------

#ifndef modelH

#define modelH

//-----------------------------------------------#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

//-----------------------------------------------class TForm1: public TForm

{

__published: // IDE-managed Components

TGroupBox *GroupBox1;

TLabel *Label1;

TEdit *Edit1;

TLabel *Label2;

TEdit *Edit2;

TEdit *Edit3;

TLabel *Label3;

TEdit *Edit4;

TEdit *Edit5;

TLabel *Label4;

TEdit *Edit6;

TEdit *Edit7;

TButton *Button1;

TGroupBox *GroupBox2;

TLabel *Label5;

TEdit *Edit8;

TLabel *Label6;

TEdit *Edit9;

TLabel *Label7;

TLabel *Label8;

TLabel *Label9;

void __fastcall Button1Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

 

struct Device{ //структура Устройство

boolean free;//состояние, true-свободен, false-занят

int count; //обработанные заявки

int time; //время обслуживания устройством

};

//-----------------------------------------------extern PACKAGE TForm1 *Form1;

//-----------------------------------------------

#endif

 

Листинг формы представлен следующим образом:

Model.cpp

//-----------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "model.h"

#include <stdlib.h>

//-----------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//-----------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

int tm=0;//модельное время

int tk=0,ak=0;//время генерации заявки и ее интервал

Device c1,c2;//ЭВМ1 и ЭВМ2

int queue1=0;//очередь

int tgen1,tgen2;//время генерация заявок

int tend;//время окончания моделирования

int t1evm1,t2evm1,t1evm2,t2evm2;//время обработки на ЭВМ1 и ЭВМ2;

//инициализация данных

tgen1=StrToInt(Edit1->Text);

tgen2=StrToInt(Edit2->Text);

tend=StrToInt(Edit3->Text);

t1evm1=StrToInt(Edit4->Text);

t2evm1=StrToInt(Edit5->Text);

t1evm2=StrToInt(Edit6->Text);

t2evm2=StrToInt(Edit7->Text);

c1.free=True;//ЭВМ1 свободна

c1.count=0;//текущее количество обработанных заявок равно 0

c1.time=0;

c2.free=True;//ЭВМ2 свободна

c2.count=0;

c2.time=0;

Randomize();

//открываем цикл по времени

while (tm<tend)

{

tm++;//увеличиваем модельное время

if (ak==0)//если можно создать заявку,

{

//то генерируем интервал ее поступления

ak=(tgen1-tgen2)+random(2*tgen2+1);

tk=tk+ak;//вычисляем время генерации следующей заявки

}

if (tm==tk)//если модельное время равно времени генерации заявки, то

{

queue1++;//увеличиваем очередь на 1

}

if (c1.free&&queue1>0)//если ЭВМ1 свободна и очередь не пуста,

{

//то определяем время занятости ЭВМ1

c1.time=(t1evm1-t2evm1)+random(2*t2evm1+1);

//и занимаем ее

c1.free=False;

queue1--;//удаляем заявку из очереди

}

else //иначе, если свободна ЭВМ2 и очередь не пуста,

if (c2.free&&queue1>0)//то обрабатываем заявку на этом устройстве

{

c2.time=(t1evm2-t2evm2)+random(2*t2evm2+1);

c2.free=False;

queue1--;

}

if (c1.time>0) c1.time--;//уменьшаем время обработки на ЭВМ1

else

if (c1.time==0&&!(c1.free))//если время обслуживания завершено

//и ЭВМ1 не свободна,

{

c1.free=True;//то освобождаем ЭВМ1

c1.count++;//увеличиваем число обслуженных заявок

}

if (c2.time>0) c2.time--;//уменьшаем время обработки на ЭВМ2

else

if (c2.time==0&&!(c2.free))//если время обслуживания завершено,

{

c2.free=True;//то освобождаем ЭВМ2

c2.count++;//увеличиваем число обслуженных заявок

}

if (ak>0) ak--;//приближаемся к генерации следующей заявки

}

//вывод результатов моделирования

Edit8->Text=IntToStr(queue1);

Edit9->Text=IntToStr(c1.count+c2.count);

}

//-----------------------------------------------

В заголовочном файле model.h описывается структура Device, которая применяется в основном модуле программы model.cpp. Программа сначала считывает исходные данные для моделирования и инициализирует состояние системы. Затем в цикле происходит генерация новой заявки, помещение ее в очередь и занятие одним из устройств либо ЭВМ1, либо ЭВМ2. Если обе машины заняты, то возвращаемся на начало цикла и увеличиваем время моделирования системы на единицу. Цикл продолжается до тех пор, пока не истечен заданный период имитации.

Задание на лпбораторную работу

Разработать программу моделирования системы на языке С++, используя модель с постоянным шагом.

Варианты:

1. Четыре ЭВМ объединены в сеть со случайным доступом. Первая ЭВМ передает данные каждые 10+-4с в течение 15+-10с. Вторая ЭВМ - каждые 12+-4с в течение 5+-3с, третья ЭВМ - каждые 20+-5с в течение 8+-6с, четвертая -каждые 20+-4с в течение 11+-3с. Скорость передачи по сети 10 Мбит/с. Смоделировать систему. Определить число отказов для каждой ЭВМ. Экспериментальным путем определить требуемую скорость передачи по сети.

2. Для обработки данных по некоторому алгоритму требуется с вероятностью 0.2 – одна итерация, с вероятностью 0.5 – 2 итерации, с вероятностью 0.3 – 3 итерации. Длительность каждой итерации 15+-5с. При этом в первом случае вероятность ошибки равна 0.1, во втором – 0.05, в третьем 0.01. При ошибке данные теряются. Смоделировать процесс обработки 10000 заданий. Подсчитать количество заданий, для которых потребовалось одна, две и три итерации. Подсчитать количество потерянных заданий. Определить время обработки.

3. Вычислительная система состоит из четырех ЭВМ, обменивающихся данными по циклическому алгоритму. Для выполнения одного задания необходим один цикл работы. Первая ЭВМ обрабатывает данные в течение 3+-2 мкс, 2-я 2+-1 мкс, 3-я и 4-я в течение 5+-2 мкс. Время передачи от одной ЭВМ к другой 1 мкс. Передача осуществляется одновременно, в момент, когда все ЭВМ завершили обработку. Смоделировать обработку 1000 заданий. Определить время обработки, среднее время обработки одного задания, время работы и простоя каждой ЭВМ.

4. В вычислительной системе две ЭВМ: основная и резервная. Пакеты на обработку поступают каждые 10+-5с. Обработка занимает 9+-3с. Примерно 10% заявок для обработки требуют подключения резервной ЭВМ. Если ЭВМ занята, то пришедшая заявка отправляется в буфер. Заявки из буфера обладают низшим приоритетом и обрабатываются в последнюю очередь. Смоделировать обработку 1000 заявок. Определить время работы и простоя основной и резервной ЭВМ, число заявок в буфере.

5. В вычислительной системе две ЭВМ: основная и резервная. Пакеты на обработку поступают каждые 12+-6с. Обработка занимает 10+-3с. Примерно 15% заявок для обработки требуют подключения резервной ЭВМ. Если ЭВМ занята, то пришедшая заявка отправляется в буфер. Заявки из буфера обладают высшим приоритетом и обрабатываются в первую очередь, как только ЭВМ освобождается. Смоделировать обработку 1000 заявок. Определить время работы и простоя основной и резервной ЭВМ, число заявок в буфере.

6. На обработку поступают пять видов заявок с вероятностями, соответственно, 0.1, 0.2, 0.3, 0.2, 0.2. Их обработка занимает 2+-1с, 3+-1с, 5+-2с, 3+-2с, 4+-2с. Смоделировать обработку 10000 заявок. Подсчитать число заявок каждого вида, время их обработки, общее время работы системы.

7. Пакеты данных передаются из пункта А в пункт В по основному каналу связи за 10+-4с, по резервному каналу за 15+-8с. Вероятность ошибки при передаче – по основному каналу 0.05, по резервному 0.1. Пакеты поступают каждые 9+-3 с. Если оба канала заняты, пакет идет в буфер. Если при передаче возникает ошибка – пакет теряется. Смоделировать поступление 10000 пакетов. Подсчитать время занятости обоих каналов, число заданий попавших в буфер и число потерянных заданий.

8. Вычислительная система состоит из 4 ЭВМ. Задания приходят на обработку каждые 10+-2с. Если первая ЭВМ занята, задание обрабатывается на второй и т.д. Время обработки на первой ЭВМ 30+-10с, на второй 35+-5с, на третьей 40+-5с, на четвертой 50+-15с. Оценить время загрузки и время простоя каждой ЭВМ при обработке 10000 заданий, вероятности того, что пакет будет обработан каждой из ЭВМ.

9. Запросы к базе данных поступают каждые 3+-1 с. Примерно в половине случаев пользователь при запросе указывает все идентификационные данные и запись находится за 2+-1с. При неполных данных время поиска 3+-2 с. Если система занята, заявки ставятся в очередь. Смоделировать работу системы за 6 часов.

10. Данные по каналу связи передаются пакетами, в каждом из которых от 2 до 8 блоков. Вероятность ошибки при передаче одного блока составляет 0,05. Если при передаче пакета возникает ошибка хотя бы в одном блоке, теряется весь пакет. Смоделировать передачу 10000 пакетов. Подсчитать число потерянных пакетов, среднюю длину каждого пакета, вероятность прохождения пакета по каналу.

11. Задания поступают на обработку в вычислительную систему из двух ЭВМ каждые 10+-5 с. Быстродействие первой ЭВМ 10 млн. элементарных операций/с. Каждое задание требует, в среднем, выполнения 0,15 млр. элементарных операций. Определить путем моделирования, какова должна быть производительность второй ЭВМ, чтобы все задания успевали обрабатываться. Определить, каким должен быть в среднем интервал ожидания задания, если вторая ЭВМ имеет такую же производительность, что и первая.

12. Решение некоторой задачи на ЭВМ состоит из нескольких этапов: Предварительная обработка данных занимает 100+-30с. Время расчета на втором этапе распределено по нормальному закону с параметрами М=300, D=100.На третьем этапе производится проверка в течение 50+-10с. После проверки с вероятностью 0,8 расчет признается правильным, иначе происходит возврат ко второму этапу. Смоделировать обработку 300 заданий. Определить время расчета, среднее время, затрачиваемое на решение одной задачи. Определить число ошибок при расчете.

13. Имеется вычислительная система для обработки некоторых данных. В начале происходит предварительная обработка данных в течение 10+-6с. Затем задача распараллеливается на три ЭВМ, каждая из которых затрачивает на решение от 10 до 20 с. Задача считается решенной, когда все ЭВМ закончат расчеты. Каждая из трех параллельно работающих ЭВМ с вероятностью 0.1 может через 5 с после начала решения заявить об отказе. В этом случае вся задача снимается. Построить модель системы, смоделировать обработку 1000 заданий. Определить время загрузки и простоя каждой ЭВМ, общее время работы, количество заданий получивших отказ.

14. ЭВМ выделяет терминалу машинное время для решения задач интервалами по 15 с. Время решения одной задачи от 10 до 60 с. Неиспользованное внутри одного интервала время теряется. Промоделировать решение 1000 задач. Определить экспериментально время работы и время простоя ЭВМ. Определить экспериментально длину интервала, при котором загрузка ЭВМ будет наибольшей.

15. При решении некоторой задачи приемлемое решение с вероятностью 0,1 достигается на первой итерации. Если решение не получено, то выполняется вторая итерация, на которой решение находится с вероятностью 0,2. Аналогично для 3-й с вероятностью 0,3, для 4-й с вероятностью 0,3. Если решение не найдено на четвертой итерации задача снимается. Длительность каждой итерации 10+-3 мин. Промоделировать решение 10000 задач. Определить время работы системы, число снятых заданий, среднее число итераций.

Содержание отчета по лабораторной работе

1. Титульный лист.

2. Тема лабораторной работы.

3. Цель лабораторной работы.

4. Отражение хода лабораторной работы.

5. Вывод.



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 402; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.129.45.92 (0.032 с.)