- •0. Лекция: Введение
- •1. Лекция: Понятие модели и моделирования:
- •1.1. Общее определение модели
- •1.2. Классификация моделей и моделирования
- •1.2.1. Классификация моделей и моделирования по признаку "характер моделируемой стороны объекта"
- •1.2.2. Классификация моделей и моделирования по признаку "характер процессов, протекающих в объекте"
- •1.2.3. Классификация моделей и моделирования по признаку "способ реализации модели"
- •1.3. Этапы моделирования
- •1.4. Адекватность модели
- •1.5. Требования, предъявляемые к моделям
- •2.1. Дискретные марковские процессы
- •2.2. Моделирование по схеме непрерывных марковских процессов
- •2.3. Схема гибели и размножения
- •2.4. Элементы смо, краткая характеристика
- •2.5. Моделирование смо в классе непрерывных марковских процессов
- •2.5.1. Многоканальная смо с отказами
- •2.5.2. Многоканальная смо с ожиданием
- •2.5.3. Одноканальная смо с ограниченной очередью
- •2.5.4. Одноканальная замкнутая смо
- •2.5.5. Одноканальная смо с конечной надежностью
- •2.6. Метод динамики средних. Сущность и содержание метода
- •2.7. Принцип квазирегулярности
- •2.8. Элементарные модели боя
- •2.8.1. Модель высокоорганизованного боя
- •2.8.2. Высокоорганизованный бой с пополнением группировок
- •2.8.3. Высокоорганизованный бой с упреждением ударов
- •2.8.4. Модель боя с неполной информацией
- •2.8.5. Учет запаздывания в переносе и открытии огня
- •3. Лекция: Статистическое моделирование:
- •3.1. Сущность имитационного моделирования
- •3.2. Общая характеристика метода имитационного моделирования
- •3.3. Статистическое моделирование при решении детерминированных задач
- •3.4. Моделирование равномерно распределенной случайной величины
- •3.5. Моделирование случайной величины с произвольным законом распределения
- •3.6. Моделирование единичного события
- •3.7. Моделирование полной группы несовместных событий
- •3.8. Моделирование совместных независимых событий
- •3.8.1. Определение совместных исходов по жребию
- •3.8.2. Последовательная проверка исходов
- •3.9. Моделирование совместных зависимых событий
- •3.10. Классификация случайных процессов
- •3.11. Способы продвижения модельного времени
- •3.12. Модель противоборства двух сторон
- •3.13. Модель противоборства как процесс блуждания по решетке
- •3.14. Типовая схема имитационной модели с продвижением времени по событиям
- •3.15. Имитационная модель системы массового обслуживания
- •4. Лекция: Планирование экспериментов
- •4.1. Сущность и цели планирования эксперимента
- •4.2. Элементы стратегического планирования экспериментов
- •4.3. Стандартные планы
- •4.4. Формальный подход к сокращению общего числа прогонов
- •4.5. Элементы тактического планирования
- •4.6. Точность и количество реализаций модели при определении средних значений параметров
- •4.6.1. Определение оценки матожидания
- •4.6.2. Определение оценки дисперсии
- •4.7. Точность и количество реализаций модели при определении вероятностей исходов
- •4.8. Точность и количество реализаций модели при зависимом ряде данных
- •4.9. Проблема начальных условий
- •5. Лекция: Обработка результатов имитационного эксперимента
- •5.1. Характеристики случайных величин и процессов
- •5.2. Требования к оценкам характеристик
- •5.3. Оценка характеристик случайных величин и процессов
- •5.4. Гистограмма
- •5.4. Элементы дисперсионного анализа. Критерий Фишера
- •5.6. Критерий Вилькоксона
- •5.7. Однофакторный дисперсионный анализ
- •5.8. Выявление несущественных факторов
- •5.9. Сущность корреляционного анализа
- •5.10. Обработка результатов эксперимента на основе регрессии
- •6. Лекция: Моделирование в gpss World
- •6.1. Основы построения и принципы функционирования языка имитационного моделирования
- •6.2. Построение моделей с устройствами
- •6.2.1. Организация поступления транзактов в модель и удаления транзактов из нее
- •6.2.1.1. Поступление транзактов в модель
- •6.2.1.2. Удаление транзактов из модели и завершение моделирования
- •6.2.1.3. Изменение значений параметров транзактов
- •6.2.2. Занятие и освобождение одноканального устройства
- •6.2.3. Имитация обслуживания посредством задержки во времени
- •6.2.4. Проверка состояния одноканального устройства
- •6.2.5. Методы сбора статистики в имитационной модели
- •6.2.5.1. Регистратор очереди
- •6.2.5.1. Статистические таблицы
- •6.2.6. Методы изменения маршрутов движения транзактов в модели
- •6.2.6.1. Блок transfer
- •6.2.6.2. Блок displace
- •6.2.7. Прерывание функционирования одноканального устройства
- •6.2.7.1. Прерывание в приоритетном режиме
- •6.2.7.2. Прерывание в режиме "захвата"
- •6.2.7.3. Проверка состояния одноканального устройства, функционирующего в приоритетном режиме
- •6.2.8. Недоступность одноканального устройства
- •6.2.8.1. Перевод в недоступное состояние и восстановление доступности
- •6.2.8.2. Проверка состояний недоступности и доступности одноканального устройства
- •6.2.9. Сокращение машинного времени и изменение дисциплин обслуживания методом применения списков пользователя
- •6.2.9.1. Ввод транзактов в список пользователя в безусловном режиме
- •6.2.9.2. Вывод транзактов из списка пользователя в условном режиме
- •6.2.10. Построение моделей систем с многоканальными устройствами и переключателями
- •6.2.10.1. Занятие многоканального устройства и его освобождение
- •6.2.10.2. Перевод многоканального устройства в недоступное состояние и восстановление его доступности
- •6.2.10.3. Проверка состояния многоканального устройства
- •6.2.10.4. Моделирование переключателей
- •6.3. Решение прямой и обратной задач в системе моделирования
- •6.3.1. Постановка прямой и обратной задач
- •6.3.2. Решение прямой задачи
- •6.3.2.1. Блок-диаграмма модели
- •6.3.2.2. Программа модели
- •6.3.2.3. Ввод текста программы модели, исправление ошибок и проведение моделирования
- •6.3.3. Решение обратной задачи
- •6.4. Пример построения моделей с оку, мку и списками пользователя
- •6.4.1. Модель процесса изготовления изделий на предприятии. Прямая задача
- •6.4.1.1. Постановка задача
- •6.4.1.2. Исходные данные
- •6.4.1.3. Задание на исследование
- •6.4.1.4. Уяснение задачи на исследование
- •6.4.1.5. Блок-диаграмма модели
- •6.4.1.6. Программа модели
- •6.4.2. Модель процесса изготовления изделий на предприятии. Обратная задача
- •6.4.2.1. Постановка задачи
- •6.4.2.2. Программа модели
- •6.5. Уменьшение числа объектов в модели
- •6.5.1. Постановка задачи
- •6.5.2. Исходные данные
- •6.5.3. Задание на исследование
- •6.5.4. Блок-диаграмма модели
- •6.5.5. Программа модели
- •6.6. Применение матриц, функций и изменение версий модели
- •6.6.1. Постановка задачи бизнес-процесса
- •6.6.2. Уяснение задачи
- •6.6.3. Программа модели
- •6.7. Моделирование неисправностей одноканальных устройств
- •6.7.1. Постановка задачи
- •6.7.2. Исходные данные
- •6.7.3. Задание на исследование
- •6.7.4. Уяснение задачи
- •6.7.5. Программа модели
- •6.8. Моделирование неисправностей многоканальных устройств
- •6.8.1. Постановка задачи
- •6.8.2. Программа модели
- •7. Лекция: Организация компьютерных экспериментов
- •7.1. Дисперсионный анализ (отсеивающий эксперимент). Прямая задача
- •7.2. Регрессионный анализ (оптимизирующий эксперимент). Прямая задача
- •7.3. Дисперсионный анализ (отсеивающий эксперимент). Обратная задача
- •7.3.1. Постановка задачи
- •7.3.2. Исходные данные
- •7.3.3. Задание на исследование
- •7.3.4. Уяснение задачи на исследование
- •7.3.5. Программа модели
- •7.3.6. Проведение экспериментов
- •8. Лекция: Разработка имитационных моделей в виде приложений с интерфейсом
- •8.1. Применение текстовых объектов и потоков данных
- •8.1.1. Блок open
- •8.1.2. Блок close
- •8.1.3. Блок read
- •8.1.4. Блок write
- •8.1.5. Блок seek
- •8.2. Разработка модели в gpss World
- •8.2.1. Постановка задачи
- •8.2.2. Программа модели
- •8.3. Создание стартовой формы приложения - имитационной модели
- •8.3 Добавление компонент в стартовую форму имитационной модели
- •8.3.1. Добавление полей редактирования
- •8.3.2. Добавление меток
- •8.3.3. Добавление компонент для ввода и вывода данных, представленных в виде таблиц
- •8.3.4. Добавление командных кнопок
- •8.4. События и процедуры обработки событий
- •8.4.1. События
- •8.4.2. Разработка процедур обработки событий для кнопок
- •8.4.3. Разработка процедур обработки событий для полей редактирования
- •8.4.4. Модификация программы имитационной модели
- •8.5. Работа с приложением
8.4.2. Разработка процедур обработки событий для кнопок
Сначала следует на форме приложения щелчком мыши маркировать (выделить) компонент, для которого создается процедура обработки события. В нашем случае целесообразно начать разработку с процедуры кнопки ВВОД. Выделите ее.
Затем нужно выбрать вкладку Events (события) окна Object Inspector. В результате этих действий в окне Object Inspector появится вкладка со списком событий, которые способен воспринимать маркированный компонент, в данном случае - командная кнопка (рис. 8.13).
В левой колонке вкладки перечислены имена событий, на которые может реагировать маркированный объект. Если для события определена процедура обработки события, то в правой колонке, рядом с именем события выводится ее имя.
Чтобы создать процедуру обработки события, надо сделать двойной щелчок в поле имени процедуры обработки события. В результате открывается окно редактора кода (в Delphi кодом называется текст программы) с макетом процедуры обработки события (рис. 8.14).
Рис. 8.13. Вкладка Events командной кнопки ВВОД (Button1)
Рис. 8.14. Окно редактора кода с макетом процедуры обработки события, происходящего на кнопке Button1 (ВВОД)
Delphi автоматически присваивает процедуре обработки события имя. Имя процедуры обработки события состоит из двух частей. Первая часть идентифицирует форму, которой принадлежит объект, для которого создается процедура обработки события. Вторая часть имени идентифицирует сам объект и событие. В нашем случае имя формы -Form1, Button1 - имя командной кнопки ВВОД, а имя события - Click.
В окне редактора кода (см. рис. 8.14) между begin и end можно печатать инструкции Object Pascal, реализующие процедуру обработки события. Введите следующий программный код:
procedure TForm1.Button1Click(Sender: TObject);
begin
ProvVvod1;
begin
MOTip:=StrToFloat(Edit2.text);
SOTip:=StrToFloat(Edit3.text);
MatA:=StrToFloat(Edit4.text);
SOtkA:=StrToFloat(Edit5.text);
end;
if (SOTip*5)>MOTip then begin
MessageDlg('Стандартное отклонение SOTip'+#13
+'должно быть более чем в 5 раз меньше'+#13
+'математического ожидания MOTip',
mtWarning,[mbOk],0);
Edit3.SetFocus;
end
else if (SOtkA*)>MatA then begin
MessageDlg('Стандартное отклонение SOtkA'+#13
+'должно быть более чем в 5 раз меньше'+#13
+'математического ожидания MatA',
mtWarning,[mbOk],0);
Edit5.SetFocus;
end;
ProvVvod2; Tabl1.SetFocus;
end;
В тексте процедуры выделено то, что сформировано Delphi. Остальное вводится разработчиком.
Обработка события при щелчке кнопки ВВОД происходит так. Вначале процедурой ProvVvod1 проверяется, все ли данные введены в поля редактирования. Если все данные введены, производится их перевод в вещественный тип.
В модели используются случайные числа, распределенные по нормальному закону. Поэтому далее производится проверка с целью предотвращения случаев неправильного задания стандартного отклонения. Оно должно быть в пять раз и более меньше математического ожидания.
Далее процедурой ProvVvod2 проверяется полнота ввода данных в первую таблицу StrinGrid. Создайте процедуры ProvVvod1, ProvVvod2 в разделе implementationпрограммного модуля (.pas).
procedure TForm1.ProvVvod1;
begin
begin
if (Edit1.text='') or (Edit2.text='')
or (Edit3.text='') or (Edit4.text='')
or (Edit5.text='') or (Edit6.text='')
or (Edit7.text='') then
MessageDlg('Необходимо задать все'+#13
+'исходные данные'+#13
+ 'в полях редактирования',
mtWarning,[mbOk],0);
end;
begin
if Edit1.text='' then Edit1.SetFocus;
if Edit2.text='' then Edit2.SetFocus;
if Edit3.text='' then Edit3.SetFocus;
if Edit4.text='' then Edit4.SetFocus;
if Edit5.text='' then Edit5.SetFocus;
if Edit6.text='' then Edit6.SetFocus;
if Edit7.text='' then Edit7.SetFocus;
end;
end;
procedure TForm1.ProvVvod2;
begin
begin
if (Tabl1.Cells[1,1]='') or (Tabl1.Cells[2,1]='') or (Tabl1.Cells[3,1]='')
or (Tabl1.Cells[4,1]='') or (Tabl1.Cells[5,1]='') or (Tabl1.Cells[6,1]='')
or (Tabl1.Cells[7,1]='') or (Tabl1.Cells[8,1]='') or (Tabl1.Cells[9,1]='')
or (Tabl1.Cells[10,1]='')
then
MessageDlg('Необходимо задать все'+#13
+'исходные данные в таблице',
mtWarning,[mbOk],0);
end;
Tabl1.SetFocus;
end;
Объявите в интерфейсной части эти процедуры.
type TForm1 = class(TForm)
Edit1: TEdit;
…
procedure ProvVvod1;
procedure ProvVvod2;
private
При нажатии кнопки СБРОС все поля редактирования и ячейки Tabl1 очищаются. Создайте обработчик этого события, программный код которого приведен ниже.
procedure TForm1.Button2Click(Sender: TObject);
var n1,n2:integer;
begin
Edit1.text:='';
Edit2.text:='';
Edit3.text:='';
Edit4.text:='';
Edit5.text:='';
Edit6.text:='';
Edit7.text:='';
for n1:=1 to 10 do
Tabl1.Cells[n1,1]:='';
for n2:=1 to 3 do
for n1:=1 to 10 do
Tabl2.Cells[n1,n2]:=''; Edit1.SetFocus;
end;
Нажатием кнопки МОДЕЛИРОВАНИЕ производится переход к процессу моделирования. Создайте обработчик этого события согласно следующему программному коду.
procedure TForm1.Button3Click(Sender: TObject); begin
VivProgr;
WinExec('d:\ModRTr\GPSSW.exe',SW_RESTORE);
Button6.SetFocus;
end;
При обработке этого события вначале выполняется процедура VivProgr, состоящая в свою очередь из четырех процедур VivProgr1, VivProgr2, VivProgr3 и VivProgr4. Они формирует следующие тестовые файлы с фрагментами программы GPSS:
Progr1.txt для ввода данных командой EQU и посредством функции SrVrA (процедура VivProgr1 );
Progr2.txt для ввода времени моделирования из поля редактирования Edit7 (процедура VivProgr2 );
Progr3.txt - для вывода результатов моделирования в текстовый файл DanTabl211.txt (процедура VivProgr3);
Progr4.txt - для вывода результатов моделирования в текстовый файл DanTabl212.txt (процедура VivProgr4);
Progr5.txt - для вывода результатов моделирования в текстовый файл DanTabl213.txt (процедура VivProgr5);
Создайте в разделе implementation программного модуля (.pas) программные коды шести процедур.
procedure TForm1.VivProgr;
begin
VivProgr1;
VivProgr2;
VivProgr3;
VivProgr4;
VivProgr5;
end;
procedure TForm1.VivProgr1;
var
f:TextFile;
begin
AssignFile(f,'d:\ModRTr\Progr1.txt');
Rewrite(f);
writeln(f,'IntTp EQU ',Edit1.text);
writeln(f,'MOTip EQU ',Edit2.text);
writeln(f,'SOTip EQU ',Edit3.text);
writeln(f,'MatA EQU ',Edit4.text);
writeln(f,'SOtkA EQU ',Edit5.text);
writeln(f,'KolPun EQU ',Edit6.text);
writeln(f,'VrMod EQU ',Edit7.text);
writeln(f,'SrVrA FUNCTION P3,D',(Tabl1.ColCount-1));
writeln(f,'1,',Tabl1.Cells[1,1],'/2,',Tabl1.Cells[2,1],'/3,',Tabl1.Cells[3,1],
'/4,',Tabl1.Cells[4,1],'/5,',Tabl1.Cells[5,1],'/6,',Tabl1.Cells[6,1],
'/7,',Tabl1.Cells[7,1],'/8,',Tabl1.Cells[8,1],'/9,',Tabl1.Cells[9,1],
'/10,',Tabl1.Cells[10,1]);
CloseFile(f);
end;
procedure TForm1.VivProgr2;
var
f:TextFile;
begin
AssignFile(f,'d:\ModRTr\Progr2.txt');
Rewrite(f);
writeln(f,'GENERATE ', StrToFloat(Edit7.text);
CloseFile(f);
end;
procedure TForm1.VivProgr3;
var
f:TextFile;
n1:integer;
begin
AssignFile(f,'d:\ModRTr\Progr3.txt');
Rewrite(f);
writeln(f,'OPEN ("DanTabl21.txt"),1,Kon1');
for n1:=1 to StrToInt(Edit6.text) do
writeln(f,'WRITE FR',n1,',,,OFF');
writeln(f,'Kon1 CLOSE Err1,1');
CloseFile(f);
end;
procedure TForm1.VivProgr4;
var
f:TextFile;
n1:integer;
begin
AssignFile(f,'d:\ModRTr\Progr4.txt');
Rewrite(f);
writeln(f,'OPEN ("DanTabl22.txt"),1,Kon2');
for n1:=1 to StrToInt(Edit6.text) do
writeln(f,'WRITE FT',n1,',,,OFF');
writeln(f,'Kon2 CLOSE Err1,1');
CloseFile(f);
end;
procedure TForm1.VivProgr5;
var
f:TextFile;
n1:integer;
begin
AssignFile(f,'d:\ModRTr\Progr5.txt');
Rewrite(f);
writeln(f,'OPEN ("DanTabl23.txt"),1,Kon3');
for n1:=1 to StrToInt(Edit6.text) do
writeln(f,'WRITE QM',n1,',,,OFF');
writeln(f,'WRITE X$VrVig',',,,OFF')
writeln(f,'Kon3 CLOSE Err1,1');
CloseFile(f);
end;
Объявите в интерфейсной части программного модуля эти шесть процедур.
type TForm1 = class(TForm)
Edit1: TEdit;
…
procedure VivProgr;
procedure VivProgr1;
procedure VivProgr2;
procedure VivProgr3;
procedure VivProgr4;
procedure VivProgr5;
private
После выполнения процедуры VivProgr командой
WinExec('d:\ModRTr\GPSSW.exe',SW_RESTORE);
запускается GPSS.exe. И далее пользователем - приложение Модель разгрузки транспортов. Курсор устанавливается на кнопке ВЫВОД.
Для обработки события - щелчка кнопки ВЫВОД - используйте следующий программный код:
procedure TForm1.Button6Click(Sender: TObject);
begin
FormActivate2(Sender);
VivRes1;
VivRes2;
VivRes3;
end;
Обработка события начинается с выполнения процедуры FormActivate2(Sender). В результате этого вводятся заголовки в первую строку и в первый столбец второй таблицы. Затем последовательно выполняются процедуры VivRes1, VivRes2 и VivRes3, которые считывают результаты моделирования из файлов DanTabl211.txt, DanTabl212.txt иDanTabl213.txt соответственно и выводят их построчно во вторую таблицу.
Создайте обработчик события - щелчка кнопки ВЫВОД и в разделе implementation программного модуля (.pas) создайте процедуры FormActivate2(Sender) (см. п. 8.3.3),VivRes1, VivRes2 и VivRes3.
procedure TForm1.VivRes1;
var
f:TextFile;
n1:integer;
a:real;
begin
AssignFile(f, 'd:\ModRTr\DanTabl21.txt');
Reset(f);
for n1:=1 to (Tabl2.ColCount-1) do begin
read(f,a);
a:=Trunc(a);
a:=a/1000;
Tabl2.Cells[n1,1]:=FloatToStr(a);
end;
end;
procedure TForm1.VivRes2;
var
f:TextFile;
n1:integer;
a:real;
begin
AssignFile(f, 'd:\ModRTr\DanTabl22.txt');
Reset(f);
for n1:=1 to (Tabl2.ColCount-1) do begin
read(f,a);
a:=a*1000;
a:=Trunc(a);
a:=a/1000;
Tabl2.Cells[n1,2]:=FloatToStr(a);
end;
end;
procedure TForm1.VivRes3;
var
f:TextFile;
n1:integer;
a:real;
begin
AssignFile(f, 'd:\ModRTr\DanTabl23.txt');
Reset(f);
for n1:=1 to (Tabl2.ColCount-1) do
begin
read(f,a);
Tabl2.Cells[n1,3]:=FloatToStr(a);
end;
end;
Объявите в интерфейсной части только что созданные четыре процедуры.
type TForm1 = class(TForm)
Edit1: TEdit;
…
procedure FormActivate2(Sender: TObject);
procedure VivRes1;
procedure VivRes2;
procedure VivRes3;
private
Завершение работы с программой модели происходит при нажатии кнопки ВЫХОД ИЗ МОДЕЛИ. Результатом является закрытие формы приложения. Создайте обработчик этого события.
procedure TForm1.Button4Click(Sender: TObject);
begin
Form1.close;
end;