У меня та же проблема, что и здесь Генератор случайных чисел с распределенной вероятностью но в с ++. Я знаю, как это реализовать, но мой вопрос — это функциональная сборка в текущей версии c ++?
Для полноты я отвечу на вопрос.
Этот дистрибутив может быть создан с использованием библиотеки генерации случайных чисел в C ++ 11. Это сначала требует заполнения механизма случайных чисел (здесь я использую std::mt19937
), а затем использовать этот двигатель с std::discrete_distribution
распределение случайных чисел.
std::discrete_dstribution
конструктор принимает либо диапазон итератора по последовательности весов, либо initializer_list
весов. Сгенерированные числа затем взвешиваются в соответствии с соответствующим индексом в последовательности весов. То есть если {10, 5, 1}
вес, 0
будет производиться с 10/(10 + 5 + 1) = 0.625
вероятность и тд.
Следующий код демонстрирует решение другого вопроса:
std::random_device device;
std::mt19937 engine(device()); // Seed the random number engine
std::discrete_distribution<> dist({150, 40, 15, 3}); // Create the distribution
// Now generate values with:
std::cout << (dist(engine) + 1) << std::endl;
Других решений пока нет …