
- •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.3. Разработка процедур обработки событий для полей редактирования
В соответствии с видом формы имитационной модели сформулируем следующие требования к программе:
в поля исходных данных модели допускается вводить только положительные числа, а ввод других символов программа должна блокировать;
числа, вводимые в поля Edit3 и Edit5, не должны быть равны или больше чисел, вводимых в поля соответственно Edit2 и Edit4 (стандартное отклонение должно быть в пять раз и более меньше математического ожидания);
во время ввода данных модели при нажатии на клавишу Enter курсор автоматически должен перемещаться в поле ввода следующего числа. Если клавиша Enter нажата во время ввода в поле Edit7, программа должна перейти к вводу в первую таблицу;
при обнаружении ошибок при вводе в поля Edit3 или Edit5 курсор должен быть соответственно в одном из них;
если в какое - то поле не введена хотя бы одна цифра (поле пустое) и нажата клавиша Enter, то возникает ошибка, о чем выдается сообщение, и ввод нужно повторить.
Чтобы программа удовлетворяла вышеприведенным требованиям, надо для каждого поля редактирования написать процедуру обработки события OnKeyPress, которая в зависимости от того, какую клавишу нажал пользователь, будет выполнять нужное действие.
Заготовка процедуры OnKeyPress для Edit1, генерируемая Delphi, выглядит следующим образом:
Procedure Tform1.Edit1KeyPress(Sender:Tobject; var Key:Char);
begin
end;
Заголовок процедуры Edit1KeyPress показывает, что процедура в качестве параметра получает символьную переменную Key. Эта переменная содержит символ, соответствующий нажатой клавише. Следует обратить внимание на то, что параметр принимается по ссылке (перед именем переменной стоит слово var), поэтому процедура может изменить значение переменной. Символ, соответствующий нажатой клавише, появляется в поле редактирования после выполнения процедуры обработки событияOnKeyPress, поэтому процедура обработки может заменить введенный символ или присвоением переменной Key значения Chr(0) запретить его появление в поле редактирования.
Ниже приведен программный код процедуры обработки события OnKeyPress в поле редактирования.
рrocedure TForm1.Edit1KeyPress(Sender:Tobject; var Key:Char);
begin
case Key of
'0'..'9',Chr(8):;
'-':Key:=Chr(0);
',':if pos(',',Edit1.text)<> then Key:=Chr(0);
Chr(13):Edit2.SetFocus
'.': begin
MessageDlg('Для отделения дробной части' +'числа'+#13
+'от целой используйте запятую', mtInformation, [mbOk],0);
Key:=Chr(0);
end;
else Key:=Chr(0);
end;
end;
Процедура TForm1.Edit1KeyPress проверяет, какая клавиша нажата при вводе исходных данных в поле редактирования Edit1. Если нажата клавиша BackSprace, то процедура завершает свою работу и символ появляется в поле редактирования или стирается последний введённый символ. Если нажата запятая, то процедура проверяет, есть ли уже запятая в поле редактирования. Если есть, то ввод второй запятой блокируется. Если нажата клавиша "-", то ввод её тоже блокируется. Если нажата клавиша Enter, то применением метода SetFocus к полю редактирования Edit2 курсор перемещается в это поле.
Процедуры обработки события OnKeyPress полей редактирования отличаются только способом обработки нажатия клавиши Enter (в поле Edit1 Edit2.SetFocus, в поле Edit2Edit3.SetFocus и т.д., а в поле Edit7
then
begin
FormActivate1(Sender);
Tabl1.SetFocus;
end;
В остальном эти процедуры идентичны. Поэтому вместо написания процедур обработки события OnKeyPress для каждого поля редактирования можно написать одну общую процедуру, которая при нажатии Enter будет выбирать нужное действие в зависимости от того, в каком поле произошло событие. Получить информацию об источнике события можно проверкой значения параметра Sender.
Создайте в разделе implementation программный код процедур EditKeyPress и FormActivate1(см. п. 8.3.3).
procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
var
nak:string[20];
begin
if Sender=Edit1 then
nak:=Edit1.text
else if Sender=Edit2 then
nak:=Edit2.text
else if Sender=Edit3 then
nak:=Edit3.text
else if Sender=Edit4 then
nak:=Edit4.text
else if Sender=Edit5 then
nak:=Edit5.text
else if Sender=Edit6 then
nak:=Edit6.text
else nak:=Edit7.text;
case Key of
'0'..'9',Chr(8):;
'-':Key:=Chr(0);
',':if pos(',',nak) <>0 then Key:=Chr(0);
Chr(13):if Sender=Edit1
then Edit2.SetFocus
else if Sender=Edit2
then Edit3.SetFocus
else if Sender=Edit3
then Edit4.SetFocus
else if Sender=Edit4
then Edit5.SetFocus
else if Sender=Edit5
then Edit6.SetFocus
else if Sender=Edit6
then Edit7.SetFocus
else if Sender=Edit7
then
begin
FormActivate1(Sender);
Tabl1.SetFocus;
end;
'.':begin
MessageDlg('Для отделения дробной'
+'части от целой'+#13
+'используйте запятую',
mtInformation,[mbOk],0);
Key:=Chr(0);
end;
else Key:=Chr(0)
end;
end;
Объявите в интерфейсной части:
type TForm1 = class(TForm)
Edit1: TEdit;
…
procedure FormActivate1(Sender: TObject);
private
Теперь выделите компонент Edit2 и на вкладке Events раскройте список. Из списка для onKeyPress щелчком установите EditKeyPress. Проделайте тоже для компонентовEdit3 … Edit7.