Имитационное моделирование экономических процессов
Скачать 0.64 Mb.
|
Внимание! Если Вы не дотянете указатель до накопителя, поток будет указывать на облачко и окажется никак не связанным с накопителем Pond level (рис. 6). В этом случае следует щелкнуть по изображению потока - он будет выделен двумя черными квадратиками в начале и в конце, и нажать клавишу Del. Неудачное изображение исчезнет, и появиться возможность заново создать поток, стрелка которого укажет на накопитель. Аналогично промоделируем трубу, по которой вода выливается из бассейна. Для этого нужно, щелкнув по кнопке регулируемого потока, установить указатель в окне диаграмм так, чтобы стрелка указателя (изображающего в данный момент поток) оказалась внутри накопителя. Далее нужно нажать левую кнопку мыши и, не отпуская, тянуть вправо. Когда кнопка будет отпущена, возникнет изображение потока, "вытекающего из бассейна в никуда" и регулируемого переменной Rate 2, которую можно переименовать в Rate out (скорость понижения уровня воды в бассейне). Внимание! Если стрелка указателя была правее накопителя, поток будет вытекать из облачка и не будет иметь отношения к создаваемой модели. Далее, чтобы задать уровень бассейна в начальный момент, введем константу Initial level. Для этого щелкнем по кнопке "Константа" в меню инструментов и поместим изображение константы в окно диаграммы, изменив данное по умолчанию имя на В результате получены изображения всех элементов модели (рис. 7). Теперь нужно указать связи между этими переменными. Сначала установим связь между константой Initiallevel и накопителем. Для этого необходимо: • выбрать кнопку связи в панели инструментов установить курсор (принявший форму стрелки связи) поверх константы Initiallevel, нажать левую кнопку мыши и протащить, не отпуская кнопки, до накопителя; когда стрелка будет внутри изображения Pontjevel, отпустить кнопку мыши. Между константой, представляющей начальный уровень воды в бассейне, и динамической переменной "уровень воды" установлена связь (рис. 8). Поскольку уровень воды в бассейне влияет на скорость вытекания воды (наряду с параметрами трубы), а следовательно, и на скорость понижения уровня воды в бассейне Rate out, необходимо установить связь между Pondlevel и Rate_out. Сделаем это точно так же, как и в первом случае. Отметим, однако, что теперь стрелка, изображающая связь, выглядит иначе. Это не ошибка. Дело в том, что POWERSIM опознает первую связь - от константы к накопителю - как инициализирующую, действующую только в начальный момент, а вторую связь - от накопителя к вспомогательной переменной - как постоянную, действующую все время моделирования. Поэтому первая связь будет изображена пунктирной линией со стрелкой, а вторая - сплошной линией. Замечание. В случае, когда нужно изобразить сразу несколько однородных элементов, например несколько накопителей, вспомогательных переменных или констант, или, как в данном примере, две связи, удобнее 12 13 не обращаться каждый раз к нужной кнопке из панели инструментов, а сделать этот инструмент активным на все время, пока он используется. Для этого нужно щелкнуть по кнопке на панели инструментов правой кнопкой мыши (или левой кнопкой при нажатой клавише Ctrl). Значок выбранного объекта будет символом курсора до тех пор, пока не изменим его, щелкнув по кнопке "Указатель" па панели инструментов (либо щелкнув снова правой кнопкой мыши по другой кнопке или на диаграмме). Имея курсор в виде некоторого объекта, мы можем создавать эти объекты нужное число раз, щелкая левой кнопкой мыиш в разных местах окна диаграммы. Таким образом, для установления связей в модели можно было, щелкнув правой кнопкой мыиш по кнопке связи, провести две нужные нам стрелки, а затем щелкнуть по кнопке "Указатель'.' 5. ОПРЕДЕЛЕНИЕ ПЕРЕМЕННЫХ Следующий шаг в создании модели - определение переменных, то есть задание начальных значений и законов их изменения в процессе моделирования. Можно заметить, что законы изменения уже почти полностью заданы самой структурой диаграммы и остается уточнить отдельные детали. Определим переменную Pond level. Для этого двойным щелчком на изображении этой переменной откроем диалоговое окно "Define Variable" (рис. 9). В окне переменных показана текущая переменная Pondlevel. В окне "Definition" нужно задать начальное значение переменной - Initial level. Нет необходимости вводить это название с клавиатуры, так как оно находится в окне "Linked Variables" ("Связанные переменные"). В это окно помещаются названия всех параметров, для которых на диаграмме установлены связи с текущей переменной (и все они должны участвовать в ее определении). Двойным щелчком на названии в окне "Linked Variables" помещаем эту переменную в окно "Definition". Замечание. Если диалоговое окно на экране меньше изображенного на рис. 9, значит оно находится в свернутом виде и его можно раскрыть, нажав кнопку "More» " в правом нижнем углу. И наоборот, если для работы не нужны ни список связанных переменных, ни список функций, ни "клавиатура", можно свернуть окно, нажав кнопку "Less«". Окно "Define14 Variable" может находиться в трех состояниях: развернутое, минимальное и промежуточное (со списками связанных переменных и функций, но без "клавиатуры"). С помощью кнопок "More»" и "Less«" всегда молено выбрать наиболее удобный в данный моцент вид окна. Заметим, что переменная InitialJevel была введена лишь для наглядности модели и для того, чтобы продемонстрировать инициализирующую связь. Молено было бы ввести соответствующее числовое значение начального уровня воды прямо в окне "Definition". При нажатии кнопки "Set" знак вопроса внутри прямоугольника Pondjevel исчезает (как в окне переменных диалогового окна, так и на диаграмме). Это означает, что динамическая переменная Pond level определена полностью, хотя было задано только ее начальное значение (вводом значения в окно "Definition" при нажатой селекторной кнопке "Initial" над окном). Дело в том, что закон изменения для Pondjevel уже определен самой структурой диаграммы. Если вместо кнопки "Initial" выбрать кнопку "Flow", то в окне определения переменной будет показан закон ее измене- 15 ния в процессе моделирования, введенный самой программой автоматически (рис. 10): + dt*(Rate_in ) - dt*(Rate__out). Эта формула означает, что на каждом шаге моделирования значение переменной Pondjevel будет увеличиваться на величину (Rate in -Rate_out)*dt, где dt - интервал интегрирования (определенный как "Time Step" в пункте меню SimulationSetup, который будет описан ниже). Итак, значение накопителя в любой момент времени полностью определяется его начальным значением и формулой для величины приращения на каждом шаге моделирования. Если нажать в окне "Define Variable" кнопку OK, окно закроется и будет видна диаграмма, на которой знак вопроса исчез из изображения уже определенной величины Pondjevel, а в изображениях остальных переменных знаки вопроса остались. Теперь можно последовательно определить оставшиеся переменные, вызывая для них окно "Define Variable" двойным щелчком мыши и действуя так же, как и в первом случае. Единственное отличие состоит в том, что для вспомогательных переменных и констант в окне "Define Variable" нет селекторных кнопок "Initial"/"Flow", и в окно "Definition" просто вводится значение или формула. Однако быстрее определить сразу все переменные модели, не выходя из диалогового окна "Define Variable" (то есть не нажимая пока кнопку ОК). Для этого в окне переменных следует щелкнуть по стрелке справа, в результате появится список всех переменных модели. Для их последовательного определения щелчком по переменной Rate In в списке она помещается в окно переменных и делается активной. Положим ее равной 0.1, введя это значение в окно "Definition" (это можно сделать как с клавиатуры, так и щелкая мышью по соответствующим кнопкам в правом нижнем углу диалогового окна). 16 Итак, введя значение переменной Ratein и нажав кнопку Set, мы полностью определили ее. Однако при этом была допущена небольшая несогласованность: один и тот же объект был определен на диаграмме как вспомогательная переменная и задан в диалоговом окне как константа. Заметим, что POWERSIM уже исправил эту оплошность! Символом Rate in стала уже не вспомогательная переменная, а константа (как в окне переменных диалогового окна, так и на диаграмме). В результате с помощью POWERSIM Ratein определена полностью и корректно. Аналогично, если попытаемся на диаграмме провести связь к константе, то есть установить ее зависимость от другой переменной модели, то она автоматически превратится во вспомогательную переменную. Так POWERSIM обеспечивает непротиворечивость определения неременных и частично корректирует модель. Перейдем к определению переменной Rate out. Скорость вытекания воды из бассейна (следовательно, и скорость понижения уровня воды) зависит не только от параметров трубы, но и от уровня воды в бассейне. Из теории гидродинамики следует, что скорость понижения уровня воды Rate out пропорциональна квадратному корню от уровня воды Pondjevel. Выбрав в списке переменных Rate out, введем ее определение: 0.05*SQRT(Pond level). При этом функцию SQRT выбираем из списка функций в окне "Define Variable" и двойным щелчком мыши по названию этой функции помещаем ее в окно определения. Аргумент функции Pondjevel находим в списке переменных, связанных с активной переменной Rateout. Нажав кнопку SET, заканчиваем определение те- Сохранение документа Нажмем кнопку "Сохранить" из панели команд. В открывшемся диалоговом окне "Save As" необходимо ввести название файла, в котором будет храниться документ. В пакете POWERSIM все файлы, используемые для сохранения моделей, имеют расширение SIM. Нажатием ОК инициируется диалоговое окно "Properties". При желании можно указать в нем имя автора и описание модели. Нажатием ОК заканчивается сохранение модели. Теперь имя файла, в котором сохранена модель, заменит заголовок Diagram 1 окна диаграммы. Замечание. Цифры в определении переменных модели были подобраны приблизительно и используются только при построении учебной задачи. Моделирование и наглядное представление его результатов Чтобы начать моделирование, следует щелкнуть по кнопке Н из панели команд. Замечание. По умолчанию моделирование производится в соответствии со следующими установками: начальный момент (StartTime) равен О, конечный момент (StopTime) равен 100, интегрирование производится методом Эйлера, гиаг моделирования (TimeStep) равен 1.0. Изменить эти параметры можно в диалоговом окне "SimulationSetup ". Результаты моделирования будут видны в табличке со значением динамической переменной Pondjevel, изменяющимся в процессе моделирования, рядом с ее изображением на диаграмме (рис. 12) и на графике внутри изображения накопителя. Это так называемый "автоотчет" но результатам моделирования. Значения динамических переменных модели и графики внутри их изображений включены в отчет по умолчанию. Эту установку можно изменить в пункте "Auto Reports" меню Format»Options. Такое представление результатов неудобно, так как после окончания моделирования на экране остаются лишь значение переменной в последний момент и крохотный график внутри диаграммы. Чтобы наглядно отразить результаты моделирования, удобно добавить к диаграмме как отдельные объекты график и/или таблицу значений переменных. 18 Изобразим последовательные значения динамической неременной Pondlevel в процессе моделирования на графике. Чтобы можно было видеть одновременно диаграмму и график, развернем окно диаграммы на весь экран с помощью кнопки "Максимизировать" ("Треугольник вверх") в правом верхнем углу окна или пункта "Развернуть" управляющего меню (оно раскрывается щелчком по кнопке в левом верхнем углу окна). Для построения графика нужно: • выбрать кнопку "график" в панели инструментов; • поместить курсор (принявший вид графика) на свободное место в окно диаграмм (обычно ниже диаграммы) и, щелкнув левой кнопкой мы ши, создать в этом месте окно для построения графика; • выделить щелчком мыши пере менную, график значений которой мы хотим построить (Pondlevel), и, не отпуская кнопку мыши, передвинуть указатель в окно графика; • когда вид указателя изменится с тянущей руки на бросающую руку отпустить кнопку мыши. Теперь при запуске снова процесса моделирования значения выбранной переменной изображаются и на графике (рис. 13). Замечание. Чтобы изобразить на графике значения сразу нескольких переменных, молено последовательно "перетащить" их мышью на график, при этом переменные будут пронумерованы иокрашены в разные г^вета (рис. 14). Можно также сразу "перенести" все интересующие нас переменные на график. Для этого нужно выделить их, щелкая левой кнопкой мыши при на жатой клавише Shift, и перетащить указатель от любой из этих переменных до графика при нажатой кнопке мыши. При этом на графике появятся названия сразу всех выделенных переменных. Если при перетаскивании выделенных объектов в окно графика 19 будет нажата клавиша Shift или Ctrl, то эти объекты не добавятся к списку параметров графика, а заменят собой существовавший ранее список. Чтобы изменить расположение, длину или ширину графика, нужно щелчком мыши активизировать его окно. Окно графика можно перемещать и растягивать с помощью мыши так же, как любое окно в Windows. Когда нужные размер и положение получены, щелчком вне окна графика можно снять с него выделение. Точно так же можно, выбрав в панели инструментов кнопку "Таблица", поместить сетку для таблицы значений переменной в процессе моделирования в нужное место окна и "перетащить" в таблицу интересующие нас переменные. Во время моделирования таблица заполнится временными рядами из значений этих переменных. Размеры и расположение таблицы можно отрегулировать так же, как и у графика. Существует и второй способ построения графиков и таблиц с использованием их окон определения. Начнем рассмотрение с построения графиков. Двойным щелчком мыши по окну графика открывается диалоговое окно "Define Time Graph" (рис. 15). Это диалоговое окно также позволяет изменять оформление графика: группы "Time (X) Axis" и "Value (Y) Axis" предназначены для редактирования осей, группа "Drawing" - для выбора вида графика (изменение установок в этой группе относится к переменным, выделенным в списке параметров графика). В этой группе выбирается, будет ли закрашиваться область под графиком (Area), будет ли график изображаться линией (Line), будет ли график помечаться цепочкой специальных значков (Marker). Вид и цвет границы графика, области под графиком, вид (цифра, крестик, квадратик...) и цвет маркеров устанавливаются в диалоговом окне, открывающемся кнопкой "Custom". Кнопка "Generations" открывает диалоговое окно, позволяющее работать с временными рядами, полученными на предыдущих этапах моделирования. Кнопки "Background" и "Graph Area" используются для выбора вида и цвета окна графика и области графика, кнопка "Title" позволяет оформить заголовок графика, кнопка "Legend" -редактировать легенду (то есть расшифровку маркеров, которыми помечаются графики) и т.д. Размеры окна графика можно изменять, перемещая мышью его размерную рамку. Для построения таблицы со значениями переменной Pond_level за все время моделирования можно поступить следующим образом: выбрать кнопку "Таблица" в панели инструментов; поместить курсор (принявший вид таблицы) на подходящее место в окно диаграммы и, щелкнув левой кнопкой мыши, создать в этом месте сетку для таблицы; • двойным щелчком мыши на изображении таблицы открыть диалоговое окно "Define Time Table" (рис. 16); |