Насколько статистически равномерным будет псевдослучайное распределение генератора псевдослучайных чисел (ГПСЧ) при смене сида на каждую новую генерацию случайного числа и его полном перезапуске с новым сидом? То есть генерировать по одному числу каждый раз с новым сидом с полностью перезапущенным ГПСЧ.
Редактировалось 1 раз(а), последний 2021-11-08 15:57:42
Этот топик читают: Гость
Ответов: 1291
Рейтинг: 47
|
|||
карма: 3 |
|
Ответов: 8930
Рейтинг: 823
|
|||
Aziz, смысла в переустановке генератора случайных (псевдослучайных) чисел нет, достаточно одного при запуске программы. Более того, кроме лишнего времени, вы рискуете получить повторяющийся набор чисел на выходе, уж не говоря от том, что зашифрованные таким образом данные вы сами расшифровать не сможете
|
|||
карма: 19 |
|
Ответов: 1291
Рейтинг: 47
|
|||
Леонид, есть смысл, мне не для шифрования, допустим мне нужно создать "случайное" но жестко детерминированное число, которое пользователи смогли бы однозначно воспроизвести, проверить подставив текущий сид, скажем, выигрышное число в лотерее. Я модифицировал компонент Random (в модах компонентов лежит уже) добавив точку для сброса генератора без перезапуска программы. Я конечно проверю равномерность графически, посмотрев какую картинку белого шума создает такой генератор, но это эмпирический метод, может кто уже обжигался на этом и знает теорию.
|
|||
карма: 3 |
|
Ответов: 8930
Рейтинг: 823
|
|||
Aziz, следует помнить, что в любых играх со случаем, любая стратегия проигрывает случаю.
Компьютерный генератор случайных чисел представляет набор не повторяющихся чисел от "0" до максимума (2^n-1) расставленных однажды и навсегда в случайном порядке и при обращении к нему выдаёт следующее по очереди число. Переустановка (по умолчанию используется число из счётчика "тиков" процессора) не меняет расстановки чисел, а меняет лишь номер следующего числа. |
|||
карма: 19 |
|
Ответов: 4631
Рейтинг: 749
|
|||
Aziz писал(а): которое пользователи смогли бы однозначно воспроизвести, проверить подставив текущий сидВкладка "Инструменты"->"Криптография". |
|||
карма: 26 |
|
Ответов: 1291
Рейтинг: 47
|
|||
Леонид, у меня там другая идея, пока не хочу ее публиковать. А разве инициализация с другим сидом не выдает другую последовательность генератора? Или просто сдвигает индекс - указатель и на следующие в ряду фиксированные "случайные" числа? Вроде указано что он стойкий, прошел тесты Die Hard.
Netspirit, нет, мне нужно именно простое целое число, оно будет использоваться в дальнейшем как указатель. Ну скажем, 10 пользователей, выиграл 3-й. И остальные захотят узнать почему именно 3-й, может кто-то подкрутил генератор? И тогда они смогут убедиться что нет, тк при заданном сиде последовательность генератора будет предопределенной. Мне же нужно просто убедиться что у всех 10 пользователей будут равные шансы, и что нет перекосов шансов в сторону например первых 5-ти, тк это будет несправедливо и нечестно. |
|||
карма: 3 |
|
Ответов: 8930
Рейтинг: 823
|
|||
Aziz писал(а): инициализация с другим сидом Если вы используете генератор встроенный в какой-либо язык (например в HiAsm), то применив функцию Rendomize вы "просто сдвигает индекс - указатель", а последовательность выдаваемых чисел остаётся неизменной. Если вы используете свой, самопальный генератор и и термином "сид" обозначаете кодовое битовое слово используемое в побитном сравнении и изменение состояние генератора, то тогда, конечно, меняется вся последовательность выдаваемых чисел. Следует отметить, что таких "кодовых" слов, обеспечивающих полную функциональность генератора на все 2^n, не очень много и любое слово не подойдёт. |
|||
карма: 19 |
|
Ответов: 1291
Рейтинг: 47
|
|||
Только что проверил - не работает. При сбросе и инициализации выдает одно и тоже псевдослучайное число. Что в общем-то неудивительно) Хотел использовать в качестве ГПСЧ последние цифры 0-9 в котировках евро, доллара и рубля из Гугла, но потом закралось сомнение в статистической равномерности их случайности... Придется что-то придумывать свое. Велосипед) Чтобы на основе одного числа - сида генерировалась статистически равномерная псевдослучайная величина.. Если это не бред, тк равномерность может наверно присутствовать только в пределах одной последовательности..
Леонид, сид - да, я с Хиасма и начал знакомство с ГПСЧ, поэтому это некое стартовое число, от которого зависит вся последдовательность. Редактировалось 2 раз(а), последний 2021-11-09 16:18:10 |
|||
карма: 3 |
|
Ответов: 8930
Рейтинг: 823
|
|||
Aziz, При вводе одинакового числа в предустановку RND всегда выдаёт одинаковую последовательность чисел!
RND
|
|||
карма: 19 |
|
Ответов: 1291
Рейтинг: 47
|
|||
Леонид, спасибо. Придется свой генератор видимо создавать на основе имеющегося. Вопрос как проверять его равномерность ? Графический метод в виде вывода точек на изображении самый наглядный но он не позволит точно оценить параметры. Наверное нужно заполнять массивы специально подготовленными данными и потом измерять процент их распределения.
|
|||
карма: 3 |
|
Ответов: 8930
Рейтинг: 823
|
|||
Aziz, полагаю, что вновь изобретённый велосипед будет, как минимум не лучше имеющегося
А имеется 32-х битный RND (4.2 миллиарда значений), кроме того в HiAsm есть и 128-битный RND (3.4*10^38 значений) Функционал всех RND одинаков, необходим и достаточен -- обеспечивает повторяемость и отсутствие совпадающих значений. |
|||
карма: 19 |
|
Ответов: 1291
Рейтинг: 47
|
|||
Леонид, мне нужен видимо специфический RND - я пока не понял как схемой на основе штатного RND реализовать следующий функционал:
1) В качестве сида берется текущая дата, приведенная в формат Real - получаем однозначное число, меняющееся каждый день. 2) С помощью этого сида генерируется случайное число, скажем, в интервале 1 - 100 в случае 100 пользователей, соответствующий пользователь становится победителем. А остальные смогут проверить истинность числа, подставив текущую дату в ГПСЧ в своем приложении. 3) На следующий день, на основе нового сида полученного из даты, генерируется следующее случайное число, но оно должно быть статистически равномерно случайно распределено относительно уже выпавших ранее в этом месяце чисел. Цикл или период генератора можно сделать 30 дней. И вот тут проблема, понятно что можно каждый раз новое число сгенерировать, но как обеспечить его равномерность и верифицируемость пока неясно. Каждое новое число статистически будет не связано с предыдущим и вполне может вызвать повторы или наоборот пробелы в числах, "мертвые зоны", числа где участники будут иметь наименьшую вероятность выигрыша. А просто выдавать числа из генератора с периодом в 30 дней без верификации не вызовет доверия в нашу эпоху электронных лохотронов) |
|||
карма: 3 |
|
Ответов: 8930
Рейтинг: 823
|
|||
Aziz, ваш алгоритм с предустановкой по дате не годится -- все пользователи наперёд будут знать что выпадет на любой день
|
|||
карма: 19 |
|
Ответов: 1291
Рейтинг: 47
|
|||
Леонид, так и знал что к этому придеретесь)) Очевидно слабое место в безопасности и логике.
Это просто пример. Если уж заморочиться на эту тему то можно сделать так чтобы прога брала время с ntp сервера в инете и не позволяла неверную дату вводить) И даже если узнают то сути это не изменит в моем проекте) Суть вопроса не в этом а в равномерности и верифицируемости. Вообще открыл для себя интересное направление экспериментов, узнав насколько сложно и даже невозможно создание по-настоящему случайного числа программой. Редактировалось 3 раз(а), последний 2021-11-10 22:06:11 |
|||
карма: 3 |
|
Ответов: 8930
Рейтинг: 823
|
|||
Aziz, ну не так это делается! выбираете в качестве предустановки не дату, а любое число<2147483648, это число шифруете с каким-либо ключом и высылаете всем подписчикам. После розыгрыша публикуете ключ, ваши подписчики расшифровывают это число и вводят его в RND и все видят кто выиграл
(Все RND генерируют не чисто случайное число, но "псевдослучайное", одно из ряда неповторяющихся чисел. До компьютеров были специальные ГОСТ-ы с такими таблицами ) Редактировалось 1 раз(а), последний 2021-11-11 10:58:16 |
|||
карма: 19 |
|