Моделирование

Original:http://staff.um.edu.mt/jskl1/simul.html

Что такое моделирование

На самом общем уровне Моделирование должно рассматриваться как форма Познания. (Познание = действие или процесс приобретения знаний). Существует три основных метода получения информации (знания) об объективной реальности: эксперимент, анализ, моделирование. Давайте возьмем один практический пример, чтобы продемонстрировать природу этих трех методов. Рассматриваемая система представляет собой заправочную станцию ​​с одним оператором. Вопрос в том, «каково среднее время нахождения автомобиля на бензоколонке». Чтобы получить ответ, у нас есть три возможности:

Эксперимент: возьмите секундомеры и измерьте время, которое каждый автомобиль проводит на станции. Считайте машины, в конце сумму все время и разделите их на количество автомобилей.

Анализ: используйте формулу теории очередей для вычисления среднего времени, проведенного в системе напрямую. Чтобы использовать формулу, вам придется принять определенную модель очередей, что означает значительное упрощение реальной системы, и вам понадобятся некоторые количественные параметры (здесь интенсивность прибытия – количество автомобилей, прибывающих на единицу времени и интенсивность обслуживания – количество обслуживаемых автомобилей за раз Ед. изм).

Моделирование: напишите имитационную модель, которая генерирует случайные поступления автомобилей и продолжительность обслуживания. Он также должен правильно упорядочить все действия, чтобы иметь однозначное соответствие с реальной системой. Также необходимо запрограммировать наблюдение, сбор статистических данных и оценку (для каждого автомобиля вычислить затраченное время, накопить эти времена, подсчитать количество автомобилей, в конце вычислить и отобразить среднее).

Эти три метода не могут быть ранжированы, поскольку все они имеют свои преимущества и недостатки. Их можно сравнивать только в контексте определенного частного случая, принимая во внимание различные критерии. Тем не менее некоторые основные факты очевидны:

Эксперимент – это всегда самый точный метод, который следует использовать, когда это возможно. К сожалению, очень часто эксперимент:

– Слишком опасно (поведение ядерного реактора в критических ситуациях, посадку с самолетом с одной струей и т. д.)

– Слишком дорого (все случаи, которые вызывают повреждение, длительные эксперименты по изучению пропускной способности сети передачи данных с использованием выделенных телефонных линий и т. д.)

– Невозможно вообще, если исследуемая система недоступна (оценка более возможных альтернатив на этапе проектирования).

Анализ (в основном математический) обычно основывается на сильных предположениях, которые редко бывают истинными в практической жизни. Другим возможным недостатком аналитических методов является слишком сложная аппаратура и / или слишком длительные вычисления. Примером этого является анализ Queuing Networks. С другой стороны, использование формул дает в основном быстрые результаты, и можно проверить большое количество альтернатив, просто вставив различные значения параметров в формулу (e). Экспериментальные методы в основном гораздо более трудоемкие. Еще одна проблема анализа – наличие необходимых параметров. Их точное измерение также не всегда возможно или невозможно на этапе проектирования. Использование оценочных данных или данных, взятых из других подобных систем, снижает достоверность результатов.

Моделирование также является экспериментальным методом. Вместо экспериментов с реальной системой эксперименты проводятся с имитационной моделью (конструкция которой, таким образом, является ключевым моментом в исследованиях симуляции). Также моделирование имеет много недостатков. Вот наиболее важные из них:

– Слишком требовательное создание имитационных моделей. Программирование имитационных моделей на общих языках (например, Pascal) слишком сложно. Существуют эффективные языки моделирования, но их освоение представляет собой большие начальные инвестиции, не всегда оправданные. Существуют симуляционные инструменты, основанные, как правило, на некоторых графических методах, которые упрощают или даже автоматизируют создание имитационных моделей определенного класса систем. Если вы хотите узнать больше об одном из таких инструментов, перейдите на страницу Petri Nets.

– Ограниченное знание моделируемой системы. Прежде всего должны быть известны некоторые количественные параметры. В приведенном выше примере необходимо генерировать случайные интервалы между приходами и случайными временами обслуживания. Здесь симуляция гораздо более гибкая, чем анализ – языки моделирования поддерживают генерацию случайных чисел практически с любым распределением. В приведенном выше примере обе случайные цифры могут быть основаны на любых (например, экспериментально полученных) распределениях. Тем не менее, для любого распределения необходимо либо несколько параметров (если оно теоретическое), либо непосредственно функцию распределения (если распределение получается путем измерения). В системе могут быть вещи (как правило, на этапе проектирования), которые не могут быть количественно оценены, и часто необходимо принять тот факт, что могут быть аспекты, о которых мы не знаем вообще.

– Слишком много времени. Примером может служить анализ крупномасштабных систем, в которых многие компоненты работают параллельно. Поскольку применение реального параллелизма до сих пор не принято, такие системы имитируются программой, выполняемой одним процессором. Параллельные действия затем выполняются по одному (даже если у пользователя есть впечатление параллелизма и во время разработки имитационной модели «думает параллельно»). Результатом этого является тот факт, что симуляция может быть намного медленнее, чем в реальном времени (1 секунда от модельного времени занимает 10 минут от процессорного времени). Это, конечно, отключает применение моделирования в реальном времени.

Общее правило может быть следующим:

«Если эксперимент выполним, используйте его, это всегда лучший метод, потому что все аспекты учтены. Даже если на этапе проектирования использовались другие методы, эксперимент может служить окончательной оценкой системы. Не представляется возможным попытаться найти подходящий аналитический метод. Если он недоступен, используйте симуляцию ».

Моделирование – это не только последнее средство, как в предыдущем правиле. Моделирование может в значительной степени способствовать пониманию анализируемой системы не только путем предоставления ответов на вопросы, которые изначально были даны. Очень часто создание имитационной модели является первым случаем, когда определенные вещи принимаются во внимание. Спецификация моделируемой системы может (и часто это делает) выявлять ошибки или двусмысленности в конструкции системы. Таким образом, симуляция может помочь очень, избегая будущего очень дорогого обновления готовой системы.

Непрерывное моделирование

Непрерывные языки моделирования, разработанные в конце 50-х годов в качестве симуляторов аналоговых компьютеров. Моделирование на аналоговых компьютерах основано на создании аналоговой электронной системы, поведение которой описывается той же математической моделью (системой дифференциальных уравнений), что и исследуемая система. Электронная система создается путем соединения стандартных блоков, основанных главным образом на операционных усилителях, модифицированных для работы в качестве интеграторов, сумматоров и других функциональных блоков. Затем пользователь проводит эксперименты с этой электронной системой, применяя подходящие входные сигналы и записывая напряжение в определенных точках вывода (осциллограф, плоттер). Изменение напряжения представляет собой функцию времени, то есть такую ​​же, как функция, описывающая изменения исходной системы, физическая природа которых может быть совершенно иной (механическое перемещение, температура и т. Д.). Основной проблемой аналоговых компьютеров является аналоговая реализация определенных операций, таких как умножение, генерация некоторых функций, генерация задержек и другие. Цифровые компьютеры выполняют все эти функции очень легко, и сегодня непрерывное моделирование выполняется только на них. Тем не менее, есть одна операция, в которой аналоговые компьютеры лучше – интеграция. Цифровые компьютеры используют численное интегрирование, которое обычно медленнее и менее точно по сравнению с интеграцией аналогового интегратора. Некоторые специальные приложения, основанные на использовании быстрого ответа, поэтому используют так называемые гибридные компьютеры, которые содержат аналоговые и цифровые части, соединенные АЦП и ЦАП. Цифровая часть делает все, кроме интеграции. Он вычисляет входы интеграторов, которые затем преобразуются цифро-аналоговыми преобразователями в аналоговые сигналы, вводимые в аналоговые интеграторы. Их выходы обрабатываются противоположным образом. Цифровая часть также управляет соединением аналоговой части, которая, таким образом, может изменяться во время вычисления.

Классификация языков непрерывного моделирования

Языки блочного ориентированного моделирования основаны на методологии аналоговых компьютеров. Система должна быть представлена ​​в виде блок-схемы, которая определяет взаимосвязь функциональных единиц и их количественных параметров. «Программирование» означает ввод взаимосвязи блоков и их описание. Затем пользователь добавляет инструкции и / или директивы, которые управляют имитацией. Если система описывается как набор уравнений, они должны быть преобразованы в блок-диаграмму. Это преобразование – простой простой процесс. Типичными блоками, доступными на большинстве непрерывных ориентированных блоков, являются интеграторы, ограничители, задержки, множители, гистерезис, постоянные значения, сумматоры, держатели, коэффициент усиления и другие.

Ориентированные на выражение непрерывные языки основаны на написании выражений (уравнений), которые представляют математическую модель. Таким образом, моделируемая система должна быть выражена набором уравнений. Затем пользователь добавляет инструкции и / или директивы, которые управляют имитацией. В некоторых языках допускаются способы определения систем как на основе блоков, так и на основе выражений. Управление имитацией означает выбор: метода интеграции (поскольку некоторые языки предлагают больше), этап интеграции, переменные (выходы блоков), которые должны соблюдаться, интервалы для сбора данных для печати и / или прорисовки, масштабирование выходов (что Также может выполняться автоматически), длительность имитационных прогонов, количество повторений и способ изменения определенных значений в них и т. Д.

Загрузите файл models1.zip, содержащий несколько моделей непрерывного моделирования, написанных на языке Turbo Pascal. Модели создаются с использованием простой непрерывной симуляции, основанной на Expression-ориентированном подходе, и могут быть легко модифицированы для моделирования любых других систем, описываемых дифференциальными уравнениями.

Дискретное моделирование

Дискретное моделирование относится к системам, динамика которых может рассматриваться (из-за уровня абстракции) как последовательность событий в дискретных временных точках. Ключевым моментом дискретного языка моделирования является способ управления правильной последовательностью действий в модели. Это также способ, которым пользователь должен «видеть мир» при использовании языка и базы для классификации дискретных языков моделирования.

Классификация языков дискретного моделирования

Ориентированные на блок-схемы языки представлены языком GPSS (General Purpose Simulation System), который существует во многих версиях на разных компьютерах. Пользователь должен просматривать динамику системы как поток так называемых транзакций через блок-диаграмму. Транзакции создаются, следуют путем через сеть блоков и уничтожаются при выходе. В блоках транзакции могут задерживаться, обрабатываться и передаваться другим блокам. Блоки находятся в программе, представленной операторами, которые выполняют действия модели.

Ориентированные на действия языки не основаны на явном планировании будущих действий. Для каждого действия пользователь описывает условие, при котором может выполняться действие (которое также охватывает планирование, если условие достигает определенного времени). Алгоритм имитационного управления многократно увеличивает время и анализирует условия всех действий. Недостаток этого подхода очевиден – необходимо оценить все условия на каждом шаге, что может потребовать много времени. С другой стороны, он концептуально очень прост и алгоритм может быть легко реализован в общих языках высокого уровня (существуют языки моделирования, основанные на этом подходе, но не широко используемые). Загрузите файл models2.zip, содержащий две модели простой системы очередей (в Turbo Pascal), которые демонстрируют ориентированный на деятельность подход. Эти модели сопровождаются несколькими модулями, которые реализуют операции с двусторонними связанными списками, которые затем используются для реализации стеков и очередей.

Ориентированные на события языки основаны на прямом планировании и отмене будущих событий. Этот подход является очень общим. Пользователь должен видеть динамику моделируемой системы в виде последовательности относительно независимых событий. Каждое событие может планировать и / или отменять другие события. Системная программа должна вести запись запланированных событий. Поэтому каждое событие представлено так называемым уведомлением о событии, которое содержит время, тип события и другие пользовательские данные. Уведомления о событиях хранятся в так называемом «Календаре», где уведомления о событиях упорядочиваются по расписанию. После завершения процедуры Event система удаляет уведомление о событии с самым низким временем из календаря, обновляет модельное время по времени и запускает соответствующую процедуру. Это повторяется до тех пор, пока календарь не станет пустым или программа не остановится по другой причине. Планирование означает вставку уведомлений о событиях в календарь по расписанию, удаление отменяет их. Подход, основанный на явном выражении событий, называется имитацией дискретных событий, которое иногда обобщается на дискретное моделирование как таковое. Типичным представителем этой группы языков является язык SIMSCRIPT (но его версия II.5 поддерживает также процессно-ориентированное моделирование).

Ориентированные на процесс языки основаны на факте, что события не являются независимыми. Событие обычно является следствием других предыдущих событий. Другими словами, часто можно определить последовательности событий, которые можно рассматривать как объекты имитационной модели на более высоком уровне иерархии. Последовательность событий называется Process. В отличие от событий процесс имеет измерение во времени. Абстрактные системы на основе процессов очень близки к реальности, которая всегда состоит из различных объектов, которые существуют и действуют параллельно, мешая друг другу. Таким образом, процессный способ просмотра динамики системы является очень естественным. В основном процесс моделирует активность реального объекта. Считается, что процессно-ориентированное дискретное моделирование – лучший способ создания дискретных имитационных моделей. Типичными представителями этой группы языков являются MODSIM, SIMSCRIPT II.5 и системный класс SIMULATION языка Simula.

Объектно-ориентированное моделирование

Объектно-ориентированное моделирование (OOS) можно рассматривать как частный случай объектно-ориентированного программирования (ООП). Некоторые принципы ООП, такие как существование различного количества экземпляров интерферирующих объектов, в течение долгого времени широко использовались в симуляционной среде, часто с использованием другой терминологии. Язык Simula (раньше его называли Simula 67) является первым истинным объектно-ориентированным языком. Будучи старше 30 лет, он по-прежнему имеет большинство (и все важные) механизмы и принципы ООП. Некоторые вещи, такие как классы, наследование, виртуальные методы и т. Д. Были определены в Simula задолго до того, как они были вновь открыты бумом ООП в последние годы. Чтобы узнать больше о Simula, посетите страницу ASU (Association of Simula Users). Вы также можете ознакомиться с документом Введение в ООП в Симуле на основе беседы, представленной в Мальтийском университете по случаю 30-летия Simula. MODSIM – еще один объектно-ориентированный язык моделирования.

Это наиболее часто используемые функции OOS:

1. Алгоритм или динамика системы выражается в терминах объектов (акторов), которые существуют параллельно и которые взаимодействуют друг с другом. Каждый объект представлен:

– параметры (которым могут быть присвоены фактические значения при создании объектов)

– атрибуты (также называемые внутренними атрибутами или атрибутами значений)

– методы (также называемые действиями или атрибутами процедуры)

– жизнь, которая представляет собой деятельность, начатую после создания объекта.

Объекты могут взаимодействовать следующим образом:

– прямой доступ к параметрам и атрибутам

– взаимное призвание методов

– связь и синхронизация объектов жизни.

Проще говоря: Object = Data + Процедуры, которые называются Encapsulation. Очень часто данные объекта или его часть скрыты, а значения могут быть доступны и изменены только с помощью (определенных) методов. Эта концепция называется сокрытием информации.

2. Подобные объекты (субъекты) группируются в так называемые классы, также называемые прототипами. Класс описывает объекты с одинаковыми параметрами, атрибутами, методами и сроками службы. Объявление класса интерпретируется как шаблон. Можно создать любое количество отдельных объектов (актеров), называемых экземплярами объектов. Экземпляры могут отличаться значениями своих параметров и / или атрибутов. Необходимо четко понимать разницу между классом как таковым и экземплярами объектов, сгенерированными с использованием объявления класса. Класс также можно интерпретировать как знание определенного типа объектов. Такие знания представлены частью данных и операциями, которые могут быть выполнены над данными. Это похоже на абстрактные типы данных, но классы намного богаче. Абстрактный тип данных может быть в этом контексте рассмотрен как вырожденный случай класса, который не использует наследование.

3. Объекты могут классифицироваться иерархически так называемым наследованием. Очень часто вводится термин подкласс. Подкласс Y класса X наследует все параметры, атрибуты и методы класса X. Его объявление может добавлять любое количество дополнительных параметров, атрибутов и методов. Подкласс может также добавить некоторую активность к жизни родительского класса. Подкласс может использоваться как родительский класс других подклассов и т. Д. Некоторые языки ООП (не Simula) включают так называемое множественное наследование. В этом случае подкласс может наследовать от более чем одного родительского класса. Подкласс может быть интерпретирован как более подробное знание, чем тот, который определен родительским классом. Таким образом, родительский класс представляет общие знания, которые могут быть дополнительно специализированы объявлениями подклассов в любом числе шагов. Наследование действует определенным образом против сильной типизации таких языков, как Pascal. Обычно можно объявить ссылочные переменные, которые могут ссылаться на экземпляр определенного класса и экземпляры всех его подклассов. Может быть желательно, чтобы некоторые методы тогда вели себя по-другому в соответствии с текущим экземпляром объекта, на который ссылается, который может динамически изменяться во время выполнения программы. Это понятие, называемое полиморфизмом, поддерживается механизмом, называемым поздним связыванием, и соответствующие методы называются виртуальными методами, которые могут меняться на каждом уровне иерархии.

4. Параллельное существование экземпляров объектов требует средств поддержки сотрудничества и синхронизации их жизни. Жизнь объекта не обязательно имеет временное измерение, но в случае OOS это имеет место. Объекты Simula как таковые могут взаимодействовать без понятия времени. Системный класс Simula SIMULATION определяет класс «Процесс», жизнь которого существует во времени. Есть возможности для процессов общаться и синхронизировать свою жизнь.

Онлайновое моделирование

Интернет вместе с Java и JavaScript предлагают невероятные возможности в решении проблем. Вместо трудоемкой загрузки и установки программных пакетов возможно прямое открытие различных решателей, особенно для задач, которые не являются частыми и не требуют трудоёмких вычислений. В качестве первого шага в этом направлении я написал простые модели моделирования в JavaScript, которые решают и моделируют одиночные системы очередей и сети очередей. На странице «Решатели и симуляторы онлайн» попробуйте симуляцию.

Рекомендации

Эта страница содержит выписку из текста:

Sklenar, J .: Simulation (University of Malta, 2000), который используется в нескольких курсах, связанных с исследованиями операций, проводимых в Мальтийском университете.

Вы также можете найти много материала в Интернете, потому что все поисковые системы возвращают много записей о «симуляции». Вы можете начать со следующих мест, которые содержат другие ссылки, ссылки, информацию об учреждениях, конференциях и т. д.