5. Основные конструкции, используемые в Easy Flow

5.3 Циклический перебор значений из заданного множества

Композиция «Если…, то…» не поддерживается текущей версией CLAVIRE.

Цикл с условием также не поддерживается. Но возможен запуск одновременно нескольких экземпляров пакетов в одном шаге с осуществлением вариативного перебора одного или нескольких параметров. Формат варьирования одного из параметров шага, который предусматривает параллельный запуск соответствующего количества экземпляров пакета, представлен в листинге 13.

Листинг 13. Формальное описание инструкции вариативного перебора

<параметр шага><wsns>=<wsns>sweep<множество значений>,

Множество значений задаётся в квадратных скобках через запятую. Например, строка «StepParam = sweep[1, 2, 3, 4]», означает, что произойдёт запуск четырёх экземпляров соответствующего пакета со значениями параметра StepParam равными 1, 2, 3, 4 соответственно. На схеме, которая обычно отображается справа от скрипта, такой шаг отображается одним прямоугольником. Но на схеме запуска WF отображается варьирование параметра: отображается столько прямоугольников, сколько указал пользователь во множестве после sweep (рис. 5.3). На данном рисунке очевиден параллельный запуск четырёх экземпляров рассмотренного во второй части учебного пакета TESTP (с методом arithm, который в настоящей версии языка EasyFlow указывать не обязательно).


Рис. 5.3. Отображение варьирования параметров при запуске шага.

В CLAVIRE допускает варьировать любое количество и любые типы параметров. При варьировании более одного параметра можно определять режим перебора – перебор всех возможных комбинаций или векторов – с помощью установки значения атрибута потока sweepmode@default или @zip. Установка значений атрибута определяется синтаксисом, приведённым в листинге 4. Значение атрибута @zip действует только на последующем после его установки шаге. Если перед следующим шагом он не устанавливается, то принимается значение по умолчанию.

Значение атрибута по умолчанию (@default) явно не устанавливается. Это означает, что установлен режим перебора всех возможных комбинаций значений параметров, указанных во множествах после оператора sweep. Если в шаге варьируются два параметра, то формируется матрица перебора; если более двух – формируется куб значений соответствующей размерности. Количество перебираемых элементов равно произведению мощностей всех множеств варьируемых параметров.

Если перед шагом указана строка [flow:sweepmode = @zip], то устанавливается векторный режим перебора. Если в шаге варьируется только один параметр, оба установка любого из режимов не влияет на результат. Если варьируется более двух параметров, то в режиме @zip количество вариантов перебора в каждом параметре должны быть одинаковым. Это же количество и является общим количеством вариантов перебора на шаге. Поясним на примере. Если шаг построен так, как указано в листинге 14, то перебирается три вектора значений параметров par1, par3, par4: (1, “a”, “one”), (3, “s”,two) и (7, “d”, “four”).

Листинг 14. Определение работы шага в режиме sweepmode = @zip

[flow:sweepmode = @zip]

step sweep_vect runs package (

...

par1 = sweep [1, 3, 7],

par3 = sweep [“a”, “s”, “d”],

par4 = sweep [“one”, “two”, “four”],

...

);

Естественный вопрос, который может возникнуть у вас – можно «подбирать» результат работы всех экземпляров пакета? В текущей версии CLAVIRE поддерживается «подбор» результатов запуска всех экземпляров пакета по отдельности, либо в виде соответствующего множества. Формат «подбора» результатов работы экземпляров пакета по отдельности представлен в листинге 15.

Листинг 15. Формальное описание инструкции вариативного перебора результатов предыдущего перебора

<параметр шага><wsns>=<wsns>sweep<wsnp>

<имя другого шага>.Result.sweep_outs

<LSQ><имя выходного файла WF><RSQ>,

Вышеприведённый листинг показывает, что «параметру шага» подставляется множество (набор файлов одного формата), сформированное из результатов вариативного перебора в «другом шаге». При этом параметр должен быть файловым. Тем самым, если в других параметрах шага не используется оператор sweep, то текущий шаг является очередным этапом обработки вариативных данных, указанных в «другом шаге». Если хотя бы один из оставшихся параметров шага определяется через оператор sweep, то при значении атрибута sweepmode равным @normal к существующему вариативному перебору добавляется новая размерность, соответствующая указанному после sweep множеству. Иными словами, количество вариантов перебора умножается на мощность этого множества.

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

Листинг 16. Формальное описание инструкции задания на вход пакету результатов предыдущего перебора (набора файлов или значений параметра)

<параметр шага (множество)><wsns>=<wsns>

<имя другого шага>.Result.sweep_outs

<LSQ><имя выходного файла WF><RSQ>,

При такой передаче параметра на вход пакету поступает группа однотипных файлов, которые были получены в «другом шаге».

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

Рассмотрим варьирование параметров на примере моделирования распространения слухов в сети, в которой удаляется один произвольный узел. Необходимо рассмотреть четыре варианта таких сетей. Удаление узла из сети осуществляется пакетом excluder, который требует на вход файл с информацией о сети и конфигурационной файл, в котором указывается способ выбора удаляемого узла. Как и в предыдущем примере, изначальная сеть должна содержать 10000 узлов и генерироваться таким же образом по данным распределения меньшей реальной сети.

После моделирования работы сети необходимо собрать статистику моделирования с помощью специального пакета spreadstats, который на вход требует группу файлов – пошаговые отчеты о моделировании распространения информации в сети. Полученные статистические данные необходимо визуализировать с помощью пакета scilabadd (пакет программ SciLab [4]). Здесь пакету необходимо указать, что будет представляться один график, и передать пакету файл с полученными результатами статистической обработки.

Скрипт композитного приложения представлен в листинге 17

Листинг 17. Скрипт моделирования распространения слухов сетей с удалённым узлом с визуализацией

require networkStructure,SpreadConfFile;

require extConfFile;

step FreqCaculation runs statnet (

inDataFile = networkStructure

);

step NetworkGennerating runs cnm(

in_format = "alt",

NodesCount = 10000,

inData = FreqCaculation.Result.outs["output.out"]

);

step NodeExcluder runs excluder after NetworkGennerating (

inDataFile = sweep

[NetworkGennerating.Result.outs["output.dat"],

NetworkGennerating.Result.outs["output.dat"],

NetworkGennerating.Result.outs["output.dat"],

NetworkGennerating.Result.outs["output.dat"]],

inConfigFile = extConfFile

);

step RumorSpreadModelling runs ism after NodeExcluder (

inDataFile = sweep

NodeExcluder.Result.sweep_outs["output.dat"],

inConfigFile = spreadConfFile

);

step SpreadStatistic runs spreadstats after RumorSpreadModelling (

spreadGroup =

RumorSpreadModelling.Result.sweep_outs["output.dat"]

);

step Visualising runs scilabadd (

graf_type = "OneCurve",

inFile = SpreadStatistic.Result.outs["output.dat"]

);

Отображение скрипта композитного приложения и его схема представлена на рис. 5.4.


Рис. 5.4. Моделирование сетей с удалением узов

Первые два шага полностью повторяют предыдущий пример. Далее четыре экземпляра полученной сети из 10000 узлов подаются в пакет excluder, который исключает из них заданное количество узлов. В следующем шаге RumorSpreadModelling осуществляется моделирование распространения слуха во всех сетях, полученных с помощью пакета excluder. Шаг spreadGroup выполняет статистическую обработку пошаговых отчётов моделирования, а шаг Visualising отвечает за получение изображения – графика максимального, среднего и минимального количества узлов, распространяющих информацию.

По данному методическому материалу Вы можете найти видеоролик в разделе"Электронные тьюторы".

Для скачивания документа в формате SCORM необходимо обладать правами привилегированного пользователя.





Наш Адрес

НИИ НКТ НИУ ИТМО
Санкт-Петербург,
Биржевая линия, д.4.
Телефон: +7 812 337-6495
E-mail: dukhanov@mail.ifmo.ru