Как сгенерировать инклюзивно ограниченное случайное число Парето из Math.random JavaScript

Из Википедия:

Как сгенерировать инклюзивно ограниченное случайное число Парето из Math.random JavaScript

Я попытался реализовать эту формулу, хотя она основана на использовании случайного числа, равномерно распределенного по (0,1), и производит дроби, в то время как Math.random в JavaScript создает числа по [0,1), и я ищу целые числа без успеха:

function getRandomIntInclusivePareto(min, max, alpha = 1) {
  const u = Math.random();
  const x =
    (-(
    (u * max ** alpha - u * min ** alpha - max ** alpha) / 
    (max ** alpha * min ** alpha)
    )) ** -(1 / alpha);

  return x;
}

console.info(getRandomIntInclusivePareto(0, 1024));

Какая формула (или, еще лучше, код) позволит мне сгенерировать инклюзивно ограниченное случайное целое число Парето, используя Math.random?

Я ищу такой API:

function getRandomParetoIntInclusive(min, max, alpha = 1)

Что вы пробовали? Покажите нам код

Severin Pappadeux 09.07.2019 23:41

Я добавил ссылку на исходную статью в Википедии; это то, что вы должны делать каждый раз, когда цитируете другую статью в Интернете, но особенно для контента, лицензированного в соответствии с Лицензия Creative Commons Attribution-ShareAlike 3.0, как контент в Википедии (как и содержимое Stack Overflow).

Heretic Monkey 10.07.2019 02:16
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
2
282
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, во-первых, в вашем коде есть ошибка, у вас не может быть включительно 0, console.info(getRandomIntInclusivePareto(0, 1024) не будет работать.

Во-вторых, чтобы получить целое число, вы должны вычислить вероятности для целых и выборочных значений в виде дискретного распределения. Предоставленные вами формулы и код предназначены для непрерывная выборка, она не будет работать для дискретного Паретто. Чтобы сделать дискретную выборку, вы должны установить список (или диапазон) образцов с их вероятностями. Я использую код https://github.com/jacobmenick/sampling для дискретной выборки. Вероятности вычисляются с помощью распределения Паретто. Просто скопируйте код из ссылки и поместите его поверх фрагмента кода ниже, чтобы запустить.

Узел 12.1, x64 Win10

function getRandomIntInclusivePareto(min, max, alpha = 1.0) {
    var probabilities = []; // probabilities 
    for (var k = min; k <= max; ++k) {
        probabilities.push(1.0/Math.pow(k, alpha)); // computed according to Paretto
    }                                               // would be normalized by SJS

    var disc = SJS.Discrete(probabilities); // discrete sampler, returns value in the [0...probabilities.length-1] range
    q = disc.draw() + min; // back to [min...max] interval

    return q;
}

console.info("Testing Paretto");

var t = getRandomIntInclusivePareto(1, 10, 1.3);

console.info(t);

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

Похожие вопросы

Функции, которые принимают массив в качестве аргумента и генерируют случайные числа
Замените автономную строку регулярным выражением в Javascript
Создание независимых секундомеров для каждого элемента в массиве. Установка времени остановки на основе данных, возвращаемых API
Как уведомить внешний интерфейс о необходимости обновления после установки пользовательского утверждения с помощью облачных функций Firebase onCreate listener
Объединяйте таблицы в SQL с повторяющимися именами столбцов в точечную нотацию без необходимости указывать каждый столбец с псевдонимом
Есть ли исправление для этой неясной ошибки, связанной с датой и временем в iOS на несколько минут?
Почему мой дискорд-бот не выходит в сеть без ошибок или чего-то еще?
Правильный способ избежать ${} в строке шаблона JS
Как изменить порядок столбцов с помощью Knex?
Обертывание серии затворов