Uploaded by bmm21094

IM ekzamen 2-ogo semestra

advertisement
1. Потребность в имитационном моделировании
Ответ:
Имитационное
моделирование
–
эффективное
средство
исследования и проектирования сложных экономических систем в
современном мире. Потребность в имитационном моделировании
возникает в связи с дорогими и/или невозможными исследованиями
над реальным объектом, а также из-за большой продолжительности
проведения в подлинном объеме времени. Следовательно,
актуальность моделирования будет повышаться с течением времени.
Существует два вида моделирования:
- натурное - исследование объектов познания на их моделях
преимущество – точность результата
недостаток – большая стоимость
- символьное (математическое)- научная дисциплина, изучающая
построение моделей произвольных объектов в человеко-машинной
среде на основе систем визуальных, аудио и др. символов.
преимущество – малая стоимость
недостаток – неточность результата
Имитационное моделирование – комбинация натурного и
символьного
моделирования
строится
математическая
(компьютерная) модель, в которой параметры задаются случайными
величинами, и для каждой реализации этих величин осуществляется
прогон модели, а полученное в ходе многократных прогонов множество
результатов моделирования усредняется.
В имитационной модели случайными величинами характеризуются:
поток (заявок) и продолжительность обслуживания (заявок).
Результатом моделирования является среднее время задержки в
очереди на обслуживание (заявок). Т.о., основными составными
элементами имитационной модели служат ГЕНЕРАТОР ПОТОКА,
ОЧЕРЕДЬ и УЗЕЛ ОБСЛУЖИВАНИЯ
Случайная величина Среднее значение (математическое ожидание)
Среднеквадратичное отклонение
Возможное значение случайной величины определяется законом ее
распределения
с
учетом
математического
ожидания
и
среднеквадратичного отклонения.
НА ВСЯКИЙ СЛУЧАЙ:
Сфера применения имитационных моделей настолько велика, что это
дает возможность наиболее широко применять приобретенные навыки
в той или иной области. Моделирование получает применение в
различных отраслях:
● Информационная безопасность
● Динамика населения
● Боевые действия
● Экономика здравоохранения
● Сервисные центры
● Цепочки поставок
● Исследование исторических процессов
● Управление проектами
● Производство
● Рынок и конкуренция
● Уличное движение
● Экосистема
● Логистические системы
2. Имитация основных процессов: генераторы транзактов,
очереди, узлы обслуживания, терминаторы
Ответ:
В имитационной модели случайными величинами характеризуются:
поток (заявок - транзактов) и продолжительность обслуживания
(заявок - транзактов).
Результатом моделирования является среднее время задержки в
очереди на обслуживание (заявок - транзактов).
Т.о., основными составными элементами имитационной модели служат
ГЕНЕРАТОР ПОТОКА, ОЧЕРЕДЬ и УЗЕЛ ОБСЛУЖИВАНИЯ.
Далее идёт значение аргументов
Далее необходимо рассказать какие значения принимает ModBeg
Доступные пользователю параметры транзактов t->iu0, t->iu1, t->iu2, t>iu3 – произвольные целочисленные параметры (формат int); t->ru0, t-
>ru1, t->ru2, t->ru3 произвольные параметры, имеющие вид переменной
с плавающей точкой (формат float); t->pr – приоритет транзакта.
ПРОСТО ОПИШИТЕ ЕМУ КАЖДУЮ ПАНЕЛЬ ВВОДА ИНФОРМАЦИИ
3. Информационная технология имитационного моделирования
Ответ:
Последовательность этапов:
1) структурный анализ - установление перечня элементов процесса и их параллельнопоследовательного следования, (Рассказать про схему в пилигриме, пример)
2) формализованное описание - задание законов распределения случайных величин
интервалов времени, (Рассказать про заполнение данных в терминалы программы)
НА ВСЯКИЙ ТАБЛИЦА С ЗАКОНАМИ РАСПРЕДЕЛЕНИЯ
3) построение модели - создание компьютерной программы, (Рассказать как ты
создаешь проект в С++), В САМОМ КОНЦЕ ИНФА
4) проведение эксперимента - запуск созданной программы на компьютере,
позволяющей имитировать процесс в течении продолжительного времени (Запуск
модели Построение – Перестроить решение ЕСЛИ НЕТ ОШИБОК Отладка – Запуск без
отладки F10 – F4)
5) обработка результатов эксперимента определение среднего времени ожидания в
очереди. Таблица с результатами моделирования (очередного прогона) находится в
папке с именем и расположением, указанным для Проекта (см. Создание модели), в
файле pilgrim.REP (открывать с помощью Блокнота). ПРИМЕР НИЖЕ
4. Этапы развития информационной технологии имитационного
моделирования
Ответ:
Данные этапы можно разбить на основных периода.
1. Период 1970 - 1980-х г.г. - алгоритмический подход для анализа процессов
2. Период 1980 - 1990-х г.г. - появление высокоуровневых структурированных языков
программирования
3. Период 1990 - 2000-х г.г. - объектно-ориентированное программирование по CASEтехнологии для неподготовленного пользователя
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
Имитационное моделирование как особая информационная технология состоит из
следующих основных этапов.
1. Структурный анализ процессов. Проводится формализация структуры сложного
реального процесса путем разложения его на подпроцессы, выполняющие
определенные функции и имеющие взаимные функциональные связи согласно легенде,
разработанной рабочей экспертной группой. Выявленные подпроцессы, в свою
очередь, могут разделяться на другие функциональные подпроцессы.
Структура общего моделируемого процесса может быть представлена в виде графа,
имеющего иерархическую многослойную
структуру, в результате появляется
формализованное изображение имитационной модели в графическом виде.
Структурный анализ особенно эффективен при моделировании экономических
процессов, где (в отличие от технических) многие составляющие подпроцессы не имеют
физической основы и протекают виртуально, поскольку оперируют с информацией,
деньгами и логикой (законами) их обработки.
2. Формализованное описание модели. Графическое изображение имитационной
модели, функции, выполняемые каждым подпроцессом, условия взаимодействия всех
подпроцессов и особенности поведения моделируемого процесса (временная,
пространственная и финансовая динамика) должны быть описаны на специальном
языке для последующей трансляции.
3. Построение модели. Обычно это трансляция и редактирование связей (сборка
модели), верификация (калибровка) параметров.
Трансляция осуществляется в различных режимах: в режиме интерпретации, или в
режиме компиляции.
Каждый режим имеет свои особенности. Режим интерпретации проще в реализации.
Специальная
универсальная
программа-интерпретатор
на
основании
формализованного описания модели запускает все имитирующие подпрограммы.
5. Метод Монте-Карло
Метод Монте-Карло заключается в построении математической модели, которая
многократно обсчитывается, на основании чего выводятся средние — вероятностные
— величины для разных параметров модели.
Простой пример метода Монте-Карло в жизни: возьмём шестигранную игровую кость
и подбросим её множество раз. Вычислив отношение того, сколько выпала отдельная
сторона, к числу всех бросков, получим вероятность выпадения этой стороны.
Ещё один пример, на этот раз вычисление площади фигуры: следует случайным
образом распределить точки по плоскости и посчитать, какое количество из них
оказались внутри фигуры; отношение числа попавших ко всем примерно равно
отношению площади фигуры к площади всего рассматриваемого пространства.
Код на плюсах для вычисления площади единичной окружности:
#include <cstdio>
#include <random>
using namespace std;
constexpr int const REPEATS = 100'000'000;
default_random_engine dre(time(0));
int main( int argc, char *argv[] )
{
double x, y;
int got = 0;
uniform_real_distribution<double> dis(-1.0, 1.0);
for (int i = 0; i < REPEATS; ++i)
{
x = dis(dre), y = dis(dre);
if (x*x + y*y < 1.0)
++got;
}
double const s = 4.0 * got / REPEATS;
printf("S = %.5lf, repeats: %i\n", s, REPEATS);
return 0;
}
6. Генераторы случайных величин
Генератор случайных чисел — это такой генератор, который при каждом обращении к
нему возвращает число в интервале (0;1). Генератор считается эталонным, если
распределение выдаваемых им чисел является равномерным, т.е., если наблюдать за
генератором достаточно долго, то окажется, что в различные, но одинаковые по длине
интервалы, например, (0.0;0.1), (0.1,0.2), ..., (0.9,1.0), попадает практически одинаковое
число точек.
Для описания последовательности, порождённой ГСЧ, существуют две важнейшие
характеристики:
Если необходимо получить случайное число в промежутке от (a;b), то следует
применить формулу: x=a+(b−a)⋅ri
Генерация произвольного случайного числа, распределённого по определённому
закону, состоит из двух следующих шагов:
1. Генерация нормализованного случайного числа в промежутке (0;1) с помощью ГСЧ;
2. Преобразование нормализованного случайного числа ri в число xi, находящийся в
необходимом промежутке и распределённый по необходимому закону
распределения.
ГСЧ по способу получения чисел делятся на:
1. Физические,
2. Табличные,
3. Алгоритмические.
7. Физические и табличные генераторы случайных чисел
Физические ГСЧ.
1. Монета, если договориться, что при выпадении решки, случайное значение
считается равным нулю, а при выпадении орла — единице (или наоборот);
2. Игральная кость с несколькими гранями, где за каждой гранью закреплено
определённое число;
3. Аппаратурный генератор шума, в качестве которого используют шумящее тепловое
устройство, например, транзистор.
Табличные ГСЧ.
Табличные ГСЧ — это не совсем самостоятельные генераторы случайных чисел, так
как они основываются на таблице из множества заранее записанных проверенных
случайных значений, которые друг с другом никак не коррелируют. Для генерации
случайного числа на основе такой таблицы происходит её алгоритмический обход
(задать который можно множеством способов, например, брать значения из таблицы
последовательно или через одно, по главной диагонали или обратной, и т.д. и т.п.;
вполне возможно даже определять порядок обхода прежде сгенерированными
случайными числами.)
Из достоинств такого метода можно вычленить одно главное: он выдаёт
действительно случайные числа, в отличие, например, от алгоритмических ГСЧ. Из
недостатков стоит отметить, что изначальные случайные значения, используемые в
генерации, требуется готовить заранее, а также, при необходимости получить большое
количество случайных чисел, требуется хранить подготовленные значения в
компьютере, что может потребовать больших затрат памяти.
Короче:
●
●
●
+ Действительно случайные числа
- Нужно готовить изначальные случайные значения
- Требуется много памяти
8. Алгоритмические генераторы случайных чисел
Числа, генерируемые с помощью этих ГСЧ, всегда являются псевдослучайными (или
квазислучайными), то есть каждое последующее сгенерированное число зависит от
предыдущего:
R’ = f(R)
Последовательности, составленные из таких чисел, образуют петли, т.е. обязательно
существует цикл, повторяющийся бесконечное число раз. Повторяющиеся циклы
называются периодами.
Достоинства:
●
●
Быстродействие;
Не требуют большого объёма памяти, компактны.
Недостатки:
●
●
Не являются на самом деле случайными, но псевдослучайными, так как каждое
следующее число зависит от предыдущего;
К тому же образуют бесконечный цикл, пройдя который, "случайные" числа
полностью повторяются
Перечислим простейшие алгоритмические ГСЧ:
●
●
●
●
Метод серединных квадратов;
Метод серединных произведений;
Метод перемешивания;
Линейный конгруэнтный метод.
9. Метод серединных квадратов
Метод серединных квадратов — это первый арифметический метод, позволяющий
получить последовательность псевдослучайных чисел; был предложен Фон
Нейманом в 1940-ых.
1. Возьмём первоначальное четырёхзначное число. Скажем, 8573.
2. Возведём его в квадрат: 8573^2 = 73496329
3. Из квадрата вычленим средние четыре разряда, получив 4963 — искомое
псевдослучайное число
4. Чтобы получить следующее псевдослучайное число, повторим шаги 2 и 3 для
текущего
Разумеется, можно брать число с другим количеством разрядов.
У этого метода есть существенная проблема: при достаточно
последовательности, алгоритм начинает генерировать одни нули.
Пример реализации метода серединных квадратов на языке С++:
#include <cmath>
#include <iostream>
using namespace std;
typedef long long llong;
constexpr llong const DIGNUM
= 4;
constexpr llong const DIGNUMPOW = pow(10, DIGNUM);
constexpr llong const DIGNUMDIV = pow(10, DIGNUM/2);
llong _current_random_number = time(0) % DIGNUMPOW;
llong rnd()
{
_current_random_number *= _current_random_number;
_current_random_number /= DIGNUMDIV;
_current_random_number %= DIGNUMPOW;
return _current_random_number;
}
int main( int argc, char *argv[] )
{
printf("seed: %Li\n", _current_random_number);
for (int i = 0; i < 10; ++i)
printf("%Li\n", rnd());
return 0;
длинной
}
10. Метод серединных произведений
Метод серединных произведений (Middle Product Algorithm) является логическим
продолжением метода серединных квадратов, и предназначен для той же цели:
генерации последовательности случайных чисел. Алгоритм следующий:
1. Берём два первоначальных числа длины N
2. Перемножаем эти два числа и получаем число длины 2N
3. Берём средние цифры произведения — это и есть наше новое псевдослучайное
число
4. Чтобы получить следующее, необходимо повторить шаги 2 и 3, взяв
сгенирораванное на предыдущем шаги псевдослучайное число за основу
Алгоритм можно записать на псевдокоде:
prv = ...
cur = ...
def rnd():
prv = выбрать_средние_цифры(prv * cur)
swap(prv, cur)
return cur
К сожалению, этот алгоритм имеет тот же недостаток, что и метод серединных
квадратов: при достаточно большой последовательности псевдослучайных чисел, он
начинает выдавать одни нули. Например, если два числа prv и cur оказались равны
307197 и 957044 соответственно, следуя алгоритму, получим:
>>> 307197 * 957044
294001045668
>>> 957044 * 1045
1000110980
>>> 1045 * 110
114950
>>> 110 * 114
12540
>>> 114 * 12
1368
>>> 12 * 1
12
>>> 1 * 0
0
>>> 0 * 0
0
Реализация алгоритма на C++:
#include <cmath>
#include <iostream>
using namespace std;
typedef long long llong;
constexpr llong const DIGNUM
= 6;
constexpr llong const DIGNUMPOW = pow(10, DIGNUM);
constexpr llong const DIGNUMDIV = pow(10, DIGNUM/2);
llong _current_random_number = time(0) % DIGNUMPOW;
llong _previous_random_number = time(0) % DIGNUMPOW;
llong rnd()
{
_previous_random_number *= _current_random_number;
_previous_random_number /= DIGNUMDIV;
_previous_random_number %= DIGNUMPOW;
swap(_previous_random_number, _current_random_number);
return _current_random_number;
}
int main( int argc, char *argv[] )
{
printf("seed: %Li\n", _current_random_number);
for (int i = 0; i < 10; ++i)
printf("%Li\n", rnd());
return 0;
}
11. Метод перемешивания
Метод перемешивания — это один из простейших методов генерации
последовательностей случайных чисел, где каждое следующее равно сумме двух
чисел, первое из которых получено циклическим сдвигом вправо данного числа на
четверть длины, а второе — тем же циклическим сдвигом, но влево.
Алгоритм можно записать на псевдокоде следующим образом:
# <<< — циклический сдвиг влево
# >>> — циклический сдвиг вправо
numlen = 64
cur
= ...
def rnd():
a = cur <<< (numlen // 4)
b = cur >>> (numlen // 4)
cur = (a + b) % (2 ** 64)
return cur
Реализация алгоритма на C++:
#include <cmath>
#include <iostream>
using namespace std;
typedef uint64_t ullong;
constexpr int const DIGNUM = 64;
ullong _current_random_number = 5938493402381934021 * time(0);
ullong rnd()
{
ullong const a =
(_current_random_number << (DIGNUM / 4)) |
(_current_random_number >> (DIGNUM / 4 * 3));
ullong const b =
(_current_random_number >> (DIGNUM / 4)) |
(_current_random_number << (DIGNUM / 4 * 3));
_current_random_number = a + b;
return _current_random_number;
}
int main( int argc, char *argv[] )
{
cout << "seed: " << _current_random_number << '\n';
for (int i = 0; i < 10; ++i)
cout << rnd() << '\n';
return 0;
}
12. Линейный конгруэнтный метод
Линейный конгруэнтный метод (linear congruential generator)— один из простейших, но
в то же время эффективный и поэтому частоупотребимый метод при генерации
последовательности случайных чисел. Каждое следующее число расчитывается по
формуле:
Ri+1=mod(k⋅Ri+b, M),
где
●
●
M — модуль M > 0
k — множитель: 0 < k < M
●
b — приращение: 0 ≤ b < M
Последовательность чисел, полученная с помощью данной формулы, называется
линейной конгруэнтной последовательностью.
Чтобы генератор был качественным, необходимо правильно подобрать параметры. За
M часто берут наибольшее простое число меньшее 2N (для таких чисел доказывается,
что младшие разряды числа Ri+1 ведут себя так же случайно, как и старшие), например,
число Мерсенна, равное 2^31−1. Одним из требований к линейной конгруэнтной
последовательности является как можно большая длина периода, т.е. количество
чисел, через которое последовательность начинает повторяться. С этим требованием
связана одна теорема.
Теорема. Линейная конгруэнтная последовательность имеет период длинной M тогда
и только тогда, когда:
1. Числа b и M взаимно простые
2. k−1 кратно ∀p : p — простой делитель M
3. M кратно 4 ⇒ k−1 кратно 4
Примечание. Если M простое, то k−1 должно быть кратно в том числе и самому M.
Реализация на C++:
#include <iostream>
using namespace std;
constexpr int const _M = 8;
constexpr int const _K = 5;
constexpr int const _B = 3;
int _currandnum = 0;
int rnd()
{
return (_currandnum = (_currandnum * _K + _B) % _M);
}
int main( int argc, char *argv[] )
{
for (int i = 0; i < 9; ++i)
cout << rnd() << '\n';
cout << flush;
return 0;
}
13. Использование законов распределения случайных величин при
имитации процессов
Ответ: Разделяют следующие законы
- равномерный закон
(одноэтапных) работ;
обычно
используется
для
моделирования
простых
- нормальный закон используется для моделирования сложных многоэтапных работ;
- экспоненциальный закон – для моделирования интервалов поступления заказов от
многочисленных однородных клиентов, интервалов времени между двумя
последовательными неисправностями однородных устройств и для моделирования
однородных информационных потоков;
- обобщенный закон Эрланга – для моделирования сложных групповых потоков
заказов;
- треугольный закон – для моделирования времени доступа к базе данных
(информационной системе) и экономических рисков.
14. Использование равномерного распределения случайных
величин при имитации процессов
Ответ:
- равномерный закон
(одноэтапных) работ;
обычно
используется
для
моделирования
простых
При имитации процессов равномерное распределение случайных
используется для моделирования простых (одноэтапных) работ.
величин
15. Использование нормального распределения случайных
величин при имитации процессов
Ответ: Нормальное распределение еще называют гауссово распределение.
- нормальный закон используется для моделирования сложных многоэтапных работ;
При имитации процессов нормальное распределение случайных
используется для моделирования сложных многоэтапных работ.
величин
Согласно центральной предельной теореме теории вероятностей случайная величина
продолжительности сложного процесса, состоящего из большого количества
элементарных подпроцессов, распределена по нормальному закону.
16. Использование экспоненциального распределения случайных
величин при имитации процессов
Ответ:
При имитации процессов экспоненциальное распределение случайных величин
используется для моделирования интервалов поступления заказов от
многочисленных однородных клиентов, интервалов времени между двумя
последовательными неисправностями однородных устройств и для моделирования
однородных информационных потоков.
17. Использование обобщенного распределения Эрланга
случайных величин при имитации процессов
Ответ:
обобщенный закон Эрланга – для моделирования сложных групповых потоков
заказов;
При имитации процессов обобщенное распределение Эрланга случайных величин
используется для моделирования сложных групповых потоков заказов, когда заявки
поступают от нескольких разнородных групп клиентов, в каждой группе из которых
клиенты однородны.
18. Использование треугольного распределения случайных
величин при имитации процессов
Ответ:
Треугольный закон используется для моделирования времени доступа к базе данных
(информационной системе) и характеризует продолжительность времени ответа на
запрос к ней.
Запросы к базе данных (БД) бывают двух видов: часто встречающиеся и редко
встречающиеся. Структура БД строится таким образом, чтобы ответы на часто
встречающиеся запросы имели наименьшую продолжительность времени, а на редко
встречающиеся – наибольшую.
БД бывают двух видов: однопользовательские (в монопольном распоряжении одного
пользователя) и многопользовательские (файл-сервер, клиент-сервер).
Характеризуется тремя параметрами:
- наиболее вероятное значение интервала времени;
- минимально возможное значение интервала времени;
- максимально возможное значение интервала времени.
Первая структура БД - наименьшая продолжительность времени ответов на часто
встречающиеся запросы и наибольшую – на редко встречающие.
Вторая структура БД - увеличение продолжительности времени ответов на часто
встречающиеся запросы за счет уменьшения продолжительности времени ответов –
на редко встречающие.
Третья структура БД – максимально возможное увеличение продолжительности
времени ответов на часто встречающиеся запросы за счет уменьшения
продолжительности времени ответов – на редко встречающие.
19. Разомкнутые и замкнутые схемы имитационных моделей
Ответ:
Признаком разомкнутой имитационной модели является одноразовое прохождение
каждого транзакта по схеме модели от генератора транзактов до соответствующего
детерминатора, где он уничтожается. Полученные экспериментальные данные
характеризуют зависимости от внешних факторов, влияющих на поток заявок
(транзактов).
Пример схемы
20. Замкнутая схема имитационной модели производственного
процесса
В замкнутой имитационной модели транзакты не уничтожаются, а повторяют свой
путь прохождения снова и снова, т.е. в цикле. Полученные экспериментальные данные
отражают влияние внутренних факторов при неизменном потоке заявок (транзактов).
Ответ: Ну тут только объяснения примером …
Пример. Швейная фабрика Количество рабочих мест со швейными машинами k = 50
Среднее время безотказной работы одной машины 157 часов Среднее время ремонта
одной машины 7 часов со среднеквадратичным отклонением 3 часа Количество
дополнительно арендуемых резервных машин m Количество нанимаемых наладчиков
n Требуется определить m и n .
Ошибка в гипотезе о двух состояниях машин:
1) в работе,
2) в ремонте.
На самом деле таких состояний четыре:
1) в резерве,
2) в работе,
3) в ожидании ремонта,
4) в ремонте.
ПРИМЕР СХЕМЫ
Создание программы на С++
Создание программы на С++ GEM2009 – Gemodif – Файл – Создать - … - Выполнить …
(сохраняете в своей папке)
Примечание. Необходимо открыть созданную программу с помощью Блокнота, внести
изменение в структурный оператор: network(dummy, standard) и сохранить программу.
Создание модели Visual_Studio_2012 – Создать проект – Установленные – Шаблоны Visual C++ - Пустой проект – Имя … - Расположение (указываете свою папку) - ОК Файлы
исходного кода (правая кнопка мыши) – Добавить – Существующий элемент – (программа С++ из своей папки) Файлы ресурсов (правая кнопка мыши) – Добавить –
Существующий элемент – Project Files – Pilgrim.res – Существующий элемент – Project
Files – Pilgrim.lib
Download