Как реализовать неравномерное распределение вероятностей?
Вопрос
Я пытаюсь реализовать неравномерное распределение вероятностей в генетическом алгоритме.
В реализации генетической программы у меня есть эксперимент, который имеет 3 результата, где каждый результат имеет разные вероятности. Скажем, вероятность одного результата составляет 0,85, другой - 0,01, а последний - 0,14?
PS: Недавно я узнал, что это называется неравномерным распределением вероятности. Я внедряю его в Java, может ли кто-нибудь сказать теорию неравномерной пробки. Распространение, а также любые Java Packages, реализующие его.
Не стесняйтесь спрашивать меня знать, если вам нужна дополнительная информация о проблеме!
Заранее спасибо!
Решение
Для простого дискретного распределения вы можете написать сэмплер, который вернет ваши результаты с желаемой частотой, используя кумулятивные вероятности.
Random r = new Random();
double v = r.nextDouble();
if (v <= 0.85) { return 0; }
if (v <= 0.86) { return 1; }
return 2;
Это вернет номера 0, 1 и 2 с вероятностью 0,85, 0,01 и 0,14.
Что касается теории неоднородных распределений вероятностей, вы можете начать с этой статьи Википедии на Распределение вероятностей; Возьмите особую ноту разных разделов в нижней части страницы. Вы обнаружите, что существуют десятки неравномерного распределения (как непрерывных, так и дискретных) с различными свойствами.
Другие советы
В вашем конкретном случае лучше получить случайное значение в [0; 100) Используя равномерное распределение, а затем проверьте, какой диапазон он попадает в: [0; 85), [85; 99), [99, 100)
Исходя из вашего описания, мне кажется, что вы говорите о фитнес пропорциональном отборе (также известный как выбор колеса рулетки).
http://en.wikipedia.org/wiki/roulette-Wheel_Selection.
Я думаю, что ответ Nailxx - довольно компактное описание, что вам нужно сделать.
смотрите такжеВыбор рулетки в генетических алгоритмах
Алгоритм выбора рулетки
Если я ошибаюсь, вот некоторые библиотеки, которые вы можете найти полезными:
http://www.ee.ucl.ac.uk/~mflanaga/java/stat.html.
http://commons.apache.org/math/apidocs/org/apache/commons/math/random/package-summary.html.