У меня такая же проблема, как здесь Distributed probability random number generator но в C++. Я знаю, как это реализовать, но мой вопрос: это функциональная сборка в текущей версии C++?Случайный генератор из вектора с распределением вероятности в C++
0
A
ответ
1
Для полноты, я отвечу на вопрос.
Это распределение может быть создано с использованием библиотеки генерации случайных чисел 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;
Там должно быть что-то здесь для вас: http://en.cppreference.com/w/cpp/numeric/random – jrok
Http: //en.cppreference.com/w/cpp/numeric/random/discrete_distribution thats it! Почему я не видел его впервые? Хорошо, спасибо. Ваш ответ помог мне. – Houp
И unfortunatelly Visual Studio не поддерживает конструктор с итераторами. (dist (someVector.begin(), someVector.end()) :( – Houp