Как я должен генерировать случайные числа для генетического алгоритма?

Я пишу генетический алгоритм для решения игры Master Mind. Я провел много исследований по лучшим подходам, и невероятно важно иметь разнообразное население. Я пытаюсь определить, как получить действительно хорошие случайные числа в C ++. я сделал srand(time(NULL)) в начале моей программы, чтобы установить семя, то я просто использовал rand(), То, что я хотел бы знать, насколько случайно это действительно? Это довольно хорошо? Есть ли другие лучшие библиотеки для случайных чисел?

Я знаю, что теория чисел и случайность — очень сложный предмет; есть ли у вас какие-либо указания по написанию вашей собственной версии rand()?

4

Решение

Для криптографии вам нужны очень сильные свойства случайных чисел. Большая часть литературы посвящена этим видам требований. Типичным решением будет заполнение итеративных приложений SHA-256 с использованием шума окружающей среды (задержки жесткого диска, сетевые пакеты, движения мыши, RDRAND, HAVEGE, …).

Для симуляции Монте-Карло или приложений ИИ требования к случайности действительно намного ниже. На самом деле очень простые генераторы будут достаточно хороши. Самым основным является пресловутый линейный конгруэнтный генератор, который в настоящее время считается старомодным, поскольку выходные шаблоны иногда приводят к заметным и нежелательным эффектам выборки (в частности, некоторые экспериментальные исследования, проведенные в 70-х и 80-х годах, вполне вероятно имеют недостатки из-за этот). В наши дни Mersenne Twister более популярен и более чем подходит для компьютерной игры. Он доступен в стандартной библиотеке C ++: см. станд :: mt19937.

5

Другие решения

rand()Случайность действительно плохая. Это болотный стандарт LCG и вообще имеет плохую случайность и плохое качество проекции. Если вы серьезно относитесь к качеству случайности для своего приложения, вам нужно пойти с чем-то лучшим. Тогда это зависит от того, хотите ли вы придерживаться стандартной библиотеки или нет.

Если вы хотите использовать стандартную библиотеку, перейдите с <random> Заголовок и Мерсенн Твистер.

Но я бы порекомендовал вам использовать случайная семья PCG вместо. Он быстрый, имеет хорошее качество и исправляет большинство ошибок <random>,

1

По вопросам рекламы [email protected]