Java: распределение по степенному закону

Я пытаюсь сгенерировать сеть p2p в соответствии с степенным законом распределения. Как создать распределение степенного закона в Java? у него есть какая-нибудь библиотека?

Спасибо:)

4 ответа

Решение

В библиотеке Apache Commons Math есть реализация для распространения Zipf, которая является степенным законом.

Если вы не можете / не хотите использовать библиотеку:

В этом случае самый простой способ - это создать CDF (сверьтесь с Wikipedia), то есть функцию F: x -> P(X

Изменить: ответ есть

Может быть, Java-библиотека Colt может помочь. Он генерирует случайные числа в соответствии со многими распределениями.

Эта библиотека: https://github.com/pbloem/powerlaws содержит генератор степенного закона, используемый следующим образом:

List<Double> data = new Continuous(3.14, 2.5).generate(1000);

Это дает 1000 баллов из степенного закона с минимальным значением 3,14 и показателем степени 2,5. Он также имеет дискретное распределение и непрерывное приближение дискретного распределения. Все эти распределения также могут соответствовать существующим данным.

(Отказ от ответственности: я написал эту библиотеку).

Apache Commons Math lib работал довольно медленно в моей системе (возможно, я что-то пропустил...). Этот автономный класс PowerLaw.java работал для меня.

Другие вопросы по тегам