- •Содержание
- •Введение
- •Основные понятия теории моделирования систем
- •5) Планирование модельных экспериментов;
- •2. Классификация видов моделирования систем
- •3. Имитационные модели информационных процессов
- •4. Математические методы моделирования
- •5. Планирование модельных экспериментов
- •6. Компьютерное моделирование и вычислительный эксперимент
- •7. Статистическое моделирование
- •Контрольные вопросы
- •8. Метод Монте-Карло
- •Метод середины квадрата
- •9. Построение моделирующих алгоритмов
- •10. Компьютерное моделирование при обработке опытных данных
- •Интерполирование функций
- •11. Управление модельным временем
- •12. Инструментальные средства моделирования. Основные понятия языка gpss.
- •Блоки генерации и удаления транзактов
- •Блоки занятия и освобождения приборов
- •Пример 1
- •Блоки занятия и освобождения очереди
- •Пример 2
- •Подготовка и выполнение моделирования в gpss
- •13. Моделирование параллельных процессов.
- •14. Сети Петри
- •15. Оценка точности и достоверности результатов
- •16. Анализ и интерпретация результатов моделирования на эвм
- •17. Имитационное моделирование информационных сетей
- •18. Лабораторные работы
- •18.1. Лабораторная работа №1. Имитационное моделирование простых информационных процессов
- •Методические указания Краткие сведения о gpss
- •Пример моделирования на языке gpss
- •Задания на лабораторную работу
- •Содержание отчета по лабораторной работе
- •18.2. Лабораторная работа №2. Имитационное моделирование информационных процессов на языке высокого уровня. Модель с постоянным шагом.
- •Методические указания
- •Задание на лпбораторную работу
- •Содержание отчета по лабораторной работе
- •18.3. Лабораторная работа №3. Имитационное моделирование информационных процессов на языке высокого уровня. Модель через список будущих событий.
- •Методические указания
- •Задание на лабораторную работу
- •Содержание отчета по лабораторной работе
- •18.4. Лабораторная работа №4. Построение и исследование имитационной модели массового обслуживания на основе сетей Петри.
- •Методические указания
- •Задание на лабораторную работу
- •Содержание отчета по лабораторной работе
- •19. Курсовое проектирование Методика курсового проектирования
- •Примерные темы курсового проектирования
- •3. Моделирование работы кафе.
- •4. Моделирование работы обрабатывающего цеха.
- •5. Моделирование работы обрабатывающего цеха.
- •6. Моделирование работы обрабатывающего цеха.
- •7. Моделирование работы смо
- •8. Моделирование работы смо
- •9. Моделирование системы автоматизации проектирования
- •10. Моделирование работы транспортного цеха
- •Заключение
- •Библиографический список
Содержание отчета по лабораторной работе
1. Титульный лист.
2. Тема лабораторной работы.
3. Цель лабораторной работы.
4. Отражение хода лабораторной работы.
5. Вывод.
18.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. Если обе машины заняты, то возвращаемся на начало цикла и увеличиваем время моделирования системы на единицу. Цикл продолжается до тех пор, пока не истечен заданный период имитации.
