интересно
Предыдущая | Содержание | Следующая

Программирование условий прохождения транзакта по графу модели

Рассмотрим случайный выбор из класса узлов. При построении моделей часто может встретиться ситуация, когда какой-либо объект имеет несколько подчиненных объектов, объединенных общим именем класса, в который они попадают, и требуется решить, в какой из подчиненных узлов направлять транзакт. В этом случае можно поступить, например, следующим образом: транзакт тем чаще направляется в узел, чем больший вес он имеет. Под весом в данном случае понимается любая количественная характеристика объекта, по которой может производиться сравнение. На рис. 4.2 приведен пример фрагмента графа модели.

Условие выбора узла с номером к выглядит следующим образом:

где/> - случайная величина, равномерно распределенная на отрезке [0,1]. Условие нормирования записывается так:

Следует учесть, что

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

Функция Number, определяющая номер выбираемого узла, показана ниже. Входными параметрами являются массив весов, число узлов и суммарный вес. Функция возвращает номер элемента мас-:ива весов.

Накапливаемое значение рО соответствует суммам площадей трямоугольников на рис. 4.3. Оно будет накапливаться до тех пор, тока функция Number не доберется до нужного столбика.

может выглядеть следующим образом:

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