LINUX.ORG.RU

IP-траффик по распределению Пуассона. Новые проблемы.


0

2

Прошу прощения. Вернулся к старой проблеме с генератором случайных величин по распределению Пуассона.

Задача: Написать генератор IP-пакетов для тестирующего модуля. Задается интенсивность(Мбит/с), допустим 100 Мбит/c, длина пакета — 12000 бит, время моделирования — 1000 мс, время между выдачей dt — 10 мс. По распределению Пуассона варьируется кол-во пакетов на всех dt.

Сделал по следующему алгоритму: 1. Нашел лямбда: lambda = интенсивность(Мбит/с) * dt(мс) / длина_пакета (бит) * all_time(мс); 2. Нашел множество вариаций выпадения кол-ва пакетов k = 0..n: интенсивность (Мбит/с) / длина_пакета(бит); 3. Посчитал для каждого k функцию вероятности: pmf(k) = (lambda * dt)^k * exp (- labmda * dt) / k!; 4. Проинтегрировал трапециями pmf(k) и получил функцию распределения Пуассона для всех k — cdf(k); 5. Сгенерировал случайное число r = 0..1 6. Для каждого отрезка dt нашел наибольшее значение k, при котором cdf(k) <= r; 7. Выдал k пакетов

Почитав книгу по теорверу, похоже на правду.

НО за секунду генератор выдает не требуемые 100 Мбит/с, а все 700-1000. ЧЯДНТ?


а почему бы не возпользоватся системами моделирования, как же блин она называлась, ns или nx

guilder
()

А почему у тебя лямбда, хоть и по размерности правильная (1/с), но зависит от времени моделирования?

Кажется, должно быть просто lambda = интенсивность(Мбит/с) / длина_пакета (бит)

mclaudt
()

>>Нашел лямбда: lambda = интенсивность(Мбит/с) * dt(мс) / длина_пакета (бит) * all_time(мс);

епт, man «приоритет операций и скобки»

mclaudt
()

>>Нашел множество вариаций выпадения кол-ва пакетов k = 0..n: интенсивность (Мбит/с) / длина_пакета(бит);

По идее тут k должно быть достаточно велико и не должно зависеть ни от чего. Это просто правый хвост, который нужно обрубить на достаточно малых значениях плотности вероятности, но никак не на лямбда=интенсивность (Мбит/с) / длина_пакета(бит), т.е. на самой середине.

Однако такое обрубание может лишь занизить итоговую интенсивность, но никак не завысить.

Так что главная причина - это, как сказано выше, неправильный выбор лямбды.

mclaudt
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.