Раздельные датчики
 

Принципиальным условием применения МПД является независимость случай-ных величин каждого типа (для модели СМО – интервалов между заявками, длительно-стей обслуживания, типов заявок, узлов-преемников в сетях обслуживания и т. п.). Не-зависимость достигается использованием для их генерации раздельных ДСЧ. Для удоб-ства реализации датчики должны быть однотипны. Как правило, это генераторы муль-типликативного вида с общим множителем, но различными начальными значениями. Требуется гарантировать непересекаемость генерируемых серий, но конструктивные рекомендации на этот счет в литературе отсутствуют.
Упомянутую проблему можно решить, если разделить период генератора (для хороших ДСЧ это где m – разрядность датчика) на требуемое число серий и взять в качестве начальных значений числа с соответствующими номерами. Для получения этих чисел можно применить алгоритм ускоренного получения случайного числа, ос-нованный на двоичном разложении его номера k:
subroutine fastrand(k,p)
integer k,p
integer x0,z
integer j,j1,j2
data x0 /57539/
j=k
p=x0
z=1220703125
do while(j.gt.0)
j1=j/2
j2=j-2*j1
if (j2.eq.1) then
p=p*z
if (p.le.0) p=(p+2147483647)+1
end if
z=z*z
if (z.le.0) z=(z +2147483647)+1
j=j1
end do
end
Здесь как очередной «полуфабрикат» p, так и степень множителя z копятся по модулю датчика . Возведение в степень выполняется на каждом шаге, а домножение на p – в среднем на половине шагов, что дает для трудоемкости получения k-го числа оценку умножений. Заметим, что двоичный логарифм миллиарда не превосхо-дит 30. Алгоритм применим к любым начальным значениям и множителям и (после очевидной модификации) – к любому модулю датчика.
Идея этого алгоритма некогда была предложена А. П. Ершовым для реализации возведения в степень в Альфа-трансляторе; применительно к имитации она использо-валась Ю. Г. Полляком [4], но была изложена неотчетливо и не связывалась с разнесе-нием серий чисел. Правильность приведенной программы подтверждается совпадением результатов прямой и ускоренной генерации для заданного номера.

Сформированные целые числа для получения делятся на модуль датчика или умножаются на обратную ему величину. На большой выигрыш в быстро-действии от этой замены рассчитывать не стоит. Согласно [3], трудоемкость умноже-ния вещественных чисел по отношению к присваиванию целых оценивается в 5 еди-ниц, деление – в 9, а вычисление стандартных функций – в 150. Следовательно, для по-казательно распределенных чисел выигрыш составит менее 2%.
Из полученного набора начальных установок по степени согласия результатов моделирования с эталонными можно выбрать наилучшую комбинацию датчиков.

 
назад

вперед