Posts Tagged ‘’

Имитационное моделирование в создании программных проектов

April 1, 2008

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

Статистическую модель можно определить как выполняемый компьютером аналог реально существующей системы. В логическом смысле поведение модели и системы одинаково. Модель не идентична системе, но она ей изоморфна. Статистической модель называют потому, что несмотря на случайность моделируемых явлений, они обнаруживают статистическую устойчивость. Мы вольны описывать систему с любых точек зрения. Например, составить математическую модель системы и решить соответствующие дифференциальные уравнения. Ряд задач допускают точное аналитическое решение, как например симплекс метод или транспортная задача. Однако чаще всего в жизни бывают столь сложные задачи, что решить их таким способом не удается. Поэтому модель собирают из готовых логических блоков и анимируют, оживляют, прогоняют на компьютере. Этот процесс и называют статистическим моделированием.Часто также используется термин “дискретно-событийное моделирование”. Это значит, что эволюция системы описывается в виде последовательности мгновенно происходящих отдельных событий. 

Области, где выгодно применять моделирование 

Несколько примеров областей где моделирование выгодно:

  1. Коммуникационные системы, АТС например или системы пакетной передачи
  2. Производственные линии типа конвейера
  3. Организация погрузочно-разгрузочных работ, например в порту
  4. Критичные ко времени обработки системы
  5. Нагруженные софтверные системы

 В области построения программных систем, моделирование, несомненно, тоже может быть применено. Одно дело, если Ваш сайт принимает максимум сто запросов в сутки, и совершенно другое, если сто миллионов. Что будем ставить, кластер или mainframe? Неплохо бы вначале посчитать. Особенно если запросы разнотипные со сложной логикой.Везде, где нужно строить системы массового обслуживания большого числа запросов, выгодно будет промоделировать систему, а потом уже кидаться строить. Тем более тема актуально ввиду того что современные платформы для построения web приложений, Java  и .Net,  высоким быстродействием не отличаются. 

Когда следует применять моделирование 

  1. Разработка реальной системы сложна, и нет гарантии что изготовленная система справиться с нагрузкой
  2. Есть готовая система, и мы хотим узнать, что будет, если в системе что-нибудь поменять.
  3. Временные масштабы действия реальной системы слишком велики
  4. Реальная система недоступна для испытаний
  5. Мы хотим оптимизировать реальную систему, но не ясно как.


  Преимущества и недостатки моделирования 
Преимущества 

  1. Реализм. Модель изоморфна реальной системе. Ненужные абстракции и ненужная детальность отсутствуют в модели. Присутствуют только существенные для понимания поведения части.
  2. Модель может быть построена до реальной системы, с куда меньшими затратами.
  3. Модель можно обкатать во всех нужных режимах существенно быстрее реальной системы.
  4. Цели моделирования можно менять по ходу его проведения.
  5. Модель учитывает случайный характер процессов в реальной системе.
  6. Для проведения моделирования совершенно не нужно обладать глубокими познаниями в вычислительной математике.
  7. Модель можно и нужно обсуждать с заказчиком. (Вернемся к этому моменту).
  8. Ну и наконец, построение модели куда дешевле!

 Недостатки 

  1. Результаты моделирования всегда приближенные.
  2. Результатам недостает общности. Если мы хотим промоделировать слегка другую систему, мы должны построить другую модель.
  3. Оптимизация моделируемой системы возможна, но затруднена и требует больших компьютерных мощностей.
  4. Постройка модели, валидация и верификация дело хлопотное.
  5. Вам потребуется отдельный человек на эту работу.
  6. Всегда есть риск построить неадекватную модель.

 Как строятся модели 

Оговоримся сразу, процесс сложный и итеративный. В полной мере к процессу применимы методики экстремального программирования. Помните, что главный источник информации для построения адекватной модели – заказчик. Консультируйтесь с ним почаще. Показывайте ему результаты моделирования, красивые графики и анимацию. Заказчик ваш друг.Принято использовать термин “валидность”  модели. Модель валидна, если она изоморфна, адекватна, отражает в должной мере реальную систему. Ненужная общность, присущая математическим моделям, статистическим моделям чужда. В тоже время есть возможность убрать ненужные в данный момент детали. Мы знаем, что именно вставляет робот сборщик в плату на конвейере, но это знание для нас бесполезно. Нам главное знать, что этот процесс занимает 5+-2 секунды. Нам совершенно незачем знать, что лежит в контейнере. Нам достаточно знать, что контейнеры красного цвета переносятся краном, а зеленые едут на погрузчике и этипроцессы столько-то времени занимают. Важно выбрать подходящий уровень абстракции. Это скорее искусство, чем наука. Выбрать существенное, отсечь ненужное. Основной вопрос, который следует себе задать, это “А все ли мы учли?”. Особенно это актуально для моделирования несуществующих пока систем.В случае моделирования существующих систем проверить модель очень просто – достаточно сравнить показатели реальной системы и модели. Они должны быть близки. 

Сбор первичных статистических данных 

Если есть какой то поток нагрузки, перед построением модели мы должны его проанализировать, с тем чтобы впоследствии воспроизвести внутри модели. Также мы должны примерно оценить и время обслуживания отдельных заявок. Это делается методами математической статистики. По первичным данным строиться экспериментальное распределение и вноситься в модель. 

Построение модели 

После того, как с данными мы определились, мы должны описать сам производственный процесс в терминах задержек, вероятностей отказов, потоков и распределений. Мы можем упростить описание процесса, убрать ненужные детали. Важно не перестараться. Все критические показатели и их динамика должны быть учтены. Валидация модели На этом этапе мы должны осмотреть полученные построения и оценить, все ли мы учли. Это подчас весьма затруднительно. Впрочем, с первого шага корректная модель все равно не получиться. 

Верификация модели 

Это простой этап. На нем мы должны убедиться, правильно ли мы описали модель на языке моделирования. Насколько это то, что мы хотим? Действительно ли компьютерная программа идентична нашим теоретическим построениям? Тут следует провести поблочную отладку модели и хоть раз пройти ее целиком. Отладка, трассировка, проверка фактически полученных распределений и их сходство с исходными и пр. 

Контрольные прогоны 

Коль скоро предыдущие шаги выполнены можно загружать модель в компьютер и запускать. Современные настольные компьютеры очень мощны. Однако, для моделирования средних размеров наступательной операции потребуется, вероятно, mainframe. Как и в обычном программировании, путь ваш будет тернист. Масса времени уйдет на отладку модели. Потом вы вдруг поймете, что разработанная модель, вообще говоря, совершенно не отражает реальность…придется изрядно помучиться. Но зато результат превзойдет Ваши ожидания. Качественная модель откроет Вам глаза на систему, на ее скрытые процессы(возможно, патологические). Вы сможете “крутить” модель и так и эдак, оптимизировать, заменять элементы и логику и получать результат. Это весьма увлекательный процесс, настоящее интеллектуальное испытание. 

Оформление отчета 

Делу время, потехе час. Пора поделиться соображениями с заказчиком. Все таки он вам платит. Оформляйте отчет. Не скупитесь на графики и объяснения. Если пакет моделирования предусматривает анимацию, покрутите модель вместе с заказчиком. Это подогреет его интерес к вашей работе и стимулирует на инвестиции.   

Наш опыт 

Мы использовали статистическое моделирование и язык GPSS для построения вновь создаваемой системы. К сожалению, никаких предварительных статистических данных у нас не было, но и модель получилась очень приближенной. Тем не менее, она нам очень помогла потом, когда был уже фрагмент системы. Мы собрали статистику, уточнили модель и избежали больших потерь. Это, кстати, хороший подход – собрать полунатурную модель и потом – статистическую. Потом они будут поддерживать друг друга, пока реальная система не будет создана. 

Фрагмент модели на языке GPSS

 


;
; Вариант предыдущего, но сам транзакт несет время своего обслуживания
;
; * не успевает все равно *
;
           INITIAL X$Total,0
ProcTime FUNCTION RN5,D3
          .6,16/.85,800/1,5000

PassTime  VARIABLE AC1-P$EnterTime
Elapsed   TABLE V$PassTime,16,100,60
 

Player    STORAGE 3

          GENERATE  50,10

          SAVEVALUE Total+,1
          ASSIGN ConsumedTime,FN$ProcTime
          MARK EnterTime

          QUEUE Incoming
          ENTER Player,1
          DEPART Incoming
          ADVANCE P$ConsumedTime
          LEAVE Player,1

          TABULATE Elapsed
          TERMINATE

          GENERATE 50000
          TERMINATE 1

 Ссылки

http://www.gpss.ru 

http://www.minutemansoftware.com

http://www.arenasimulation.com/products/default.asp