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 работал для меня.