Чи можете ви використовувати Pi як сирий генератор випадкових чисел?


30

Нещодавно я зустрічався з цим питанням на math.SE. Це змусило мене задуматися. Чи можна Пі використати як генератор сирого випадкового числа? Я маю на увазі результати добре відомі (скільки часу обчислювались пі?), Але, здається, Pi є цілком випадковим, коли брати 1 цифру за один раз.

Чи має це взагалі сенс?


Де будуть використовуватися ці випадкові числа?
NullUserException

2
Теоретично це може бути, але, ймовірно, буде менш оптимальним, ніж сучасні методи. Просто інстинкти на цьому, але, здається, випадковий пул більший таким чином, меншими накладними.
Ріг

@NullUserException Не впевнений ... Мені просто цікаво, чи можна їх використовувати ВСІХ. Я припускаю, що це точно не було б для криптографії, хоча '
Earlz

3
@FrustratedWithFormsDesigner - її частина пакету ent. Він використовує випадкові числа для обчислення площі кола, вписаного у квадрат, і з цього можна обчислити pi. Використовуючи біти pi в якості випадкових чисел, існує певна елегантність використання цих даних для обчислення pi.

1
@FrustratedWithFormsDesigner ent - це набір коду для аналізу псевдо випадковості купи байтів. Один тест всередині нього - це Монте-Карло для обчислення пі та порівняння випадкового обчислення з фактичним значенням, щоб побачити, наскільки це випадково.

Відповіді:


50

Копати з http://www.befria.nu/elias/pi/binpi.html, щоб отримати двійкове значення pi (щоб було легше конвертувати в байти, а не намагатися використовувати десяткові цифри), а потім запустити його через ent Для аналізу випадкового розподілу байтів я отримую наступне:

Ентропія = 7.954093 біт на байт.

Оптимальне стиснення зменшило б розмір цього файлу 4096 байт на 0 відсотків.

Розподіл квадратів Chi на 4096 зразків становить 253,00, і випадково перевищив би це значення в 52,36 відсотка разів.

Середнє арифметичне значення байтів даних становить 126,6736 (127,5 = випадкове).

Значення Монте-Карло для Pi становить 3,120234604 (помилка 0,68 відсотка).

Коефіцієнт послідовної кореляції становить 0,028195 (абсолютно некорельований = 0,0).

Так, так, використання pi для випадкових даних дасть вам досить випадкові дані ... розуміючи, що це добре відомі випадкові дані.


З коментаря вище ...

Залежно від того, що ви робите, але я думаю, ви можете використовувати децималі квадратного кореня будь-якого простого числа як генератор випадкових чисел. Вони повинні хоча б мати рівномірно розподілені цифри. - Паксинум

Отже, я обчислив квадратний корінь 2 у двійковій формі, щоб скористатися тим самим набором проблем. Використовуючи Ітерацію Вольфрама, я написав простий сценарій Perl

#!/usr/bin/perl
use strict;
use Math::BigInt;

my $u = Math::BigInt->new("2");
my $v = Math::BigInt->new("0");
my $i = 0;

while(1) {
    my $unew;
    my $vnew;

    if($u->bcmp($v) != 1) { # $u <= $v
        $unew = $u->bmul(4);
        $vnew = $v->bmul(2);
    } else {
        $unew = ($u->bsub($v)->bsub(1))->bmul(4);
        $vnew = ($v->badd(2))->bmul(2);
    }   

    $v = $vnew;
    $u = $unew;

    #print $i,"  ",$v,"\n";
    if($i++ > 10000) { last; }
}

open (BITS,"> bits.txt");
print BITS $v->as_bin();
close(BITS);

Виконуючи це протягом перших 10 збігається A095804, тому я був впевнений, що я мав послідовність. Значення v n, як записане у двійковій формі, з двійковою точкою, розміщеною після першої цифри, дає апроксимацію квадратного кореня 2.

Використання ent проти цих двійкових даних створює:

Entropy = 7.840501 bits per byte.

Optimum compression would reduce the size
of this 1251 byte file by 1 percent.

Chi square distribution for 1251 samples is 277.84, and randomly
would exceed this value 15.58 percent of the times.

Arithmetic mean value of data bytes is 130.0616 (127.5 = random).
Monte Carlo value for Pi is 3.153846154 (error 0.39 percent).
Serial correlation coefficient is -0.045767 (totally uncorrelated = 0.0).

Саме той тип відповіді я шукав. Я поняття не маю, як обчислити всі
подібні

Навіть якщо розподіл чисел є досить випадковим, чи не потрібно знаходити спосіб випадкового вибору його частини?
Блюмер

1
@Blumer ні. Випадковість вимірюється на послідовності чисел. Послідовність цифр пі, як кажуть, є випадковою. Дивіться en.wikipedia.org/wiki/Statistic_randomness
Саймон Бергот

11
Абсолютно вірно. А оскільки це добре відомі випадкові дані, ви ніколи не наважуєтесь використовувати це для криптографічних цілей.
Сокіл

3
+1 для "добре відомих випадкових даних". Якщо вам потрібні випадкові дані, про які хтось не може здогадатися, pi не для вас, якщо просто потрібна купа випадкових чисел з якихось причин, це працює чудово.
jmoreno

5

Ну, серед інших властивостей генератора випадкових чисел ви, мабуть, хочете, щоб це було нормальне число . І кілька відповідей на питання math.SE, які надихнули ваше запитання, вказують на те, що в даний час пі вважається нормальним, але це не було доведено.


2

Такий генератор був би генератором псевдо-чисел, тобто даючи однакове насіння, результат завжди був би однаковий. Це говориться, у більшості фреймворків, коли ви використовуєте стандартний генератор випадкових чисел, виникає та сама проблема, як псевдовипадкові.

Розподіл цифр здається досить подібним до стандартних генераторів випадкових чисел¹, тому цифри π можуть використовуватися для звичайних сценаріїв генерації випадкових чисел.

Проблема полягає в тому, що алгоритм, ймовірно, буде дуже повільним, порівняно зі звичайними генераторами випадкових чисел, тому це не дуже корисно на практиці.


Я вважаю, що це правда, але не маю жодних доказів. Було б цікаво (і не ускладнювати) зробити порівняння на основі великої кількості цифр.


5
@NullUserException: Ні, деякі генератори випадкових чисел використовують джерело ентропії. Це можна здійснити або за допомогою спеціалізованого обладнання (підхід, який використовує random.org ), або за допомогою існуючих джерел ентропії (вимірювані коливання в межах існуючих апаратних датчиків, певні типи взаємодій користувачів, мікро-варіації певних типів тестів на ефективність тощо). ).
Брайан

1
@NullUserException: є криптографічно захищені PRNG, які все ще є псевдовипадковими. Тоді є реальні РНГ, які базуються на вході з реального світу: радіоактивний розпад, шум тощо.
Арсеній Мурценко

2
@MainMa Але навіть тоді випадковість радіоактивного розпаду, атмосферного шуму, отриманого від введення користувача тощо, є дискусійною. Тільки тому, що ми не розпізнаємо модель, це не означає, що її не існує.
NullUserException

1
@NullUserException: Минулого року Колбек / Реннер опублікував документ, який має на меті довести: "Жодне розширення квантової теорії не може покращити прогнозовану силу". Якщо припустити, що це стримується, може бути джерело ентропії, яке справді непередбачуване, а не просто неможливо передбачити.
Брайан

1
@MainMa - ви все одно будете виконувати математичні тести на випадковість. Хоча фізика, що лежить в основі, є випадковою (наскільки нам відомо), це не означає, що це вимірювання. Детектори всіх типів мають багато "цікавої" поведінки в реальному світі
Мартін Бекетт

2

Випадковість цифр pi (або з цього приводу будь-яка інша послідовність) може бути виправдано перевірена так званими «тестами на батареї». Один з популярних тестів на акумулятори - це тест батареї Джорджа Марсагліа Diehard Battery . Існує також спеціальна публікація NIST 800-22, яка описує ряд таких тестів та результати застосування цих тестів до ряду фізичних констант, включаючи - lo та be - pi для понад мільйон біт. Результат pi наведено в Додатку B до звіту і виглядає так:

Statistical Test                            P-value
Frequency                                   0.578211
Block Frequency (m = 128)                   0.380615
Cusum-Forward                               0.628308
Cusum-Reverse                               0.663369
Runs                                        0.419268
Long Runs of Ones                           0.024390
Rank                                        0.083553
Spectral DFT                                0.010186
Non-overlapping Templates (m = 9, B = 000000001)          0.165757
Overlapping Templates (m = 9)               0.296897
Universal                                   0.669012
Approximate Entropy (m = 10)                0.361595
Random Excursions (x = +1)                  0.844143
Random Excursions Variant (x = -1)          0.760966
Linear Complexity (M = 500)                 0.255475
Serial (m = 16, 2m∇Ψ )                      0.143005

Пі хороший генератор випадкових послідовностей? Подивіться на наведені вище результати (або пошукайте значення змінної лівої колонки, якщо ви не маєте поняття, що вони означають), і перевірте, чи задовольняють вони ваші потреби.


1
Прочитаний мені для Diehard говорить, що для цього потрібно близько 10-12 мегабайт двійкових даних (найкраще, що я міг знайти, - 32 кілобайти). Якби ви зіставили це з даними ascii, тест був би цілком відхиленим від того, що чекає програма.

Моя відповідь була на питання щодо ОП та оригінальне запитання на Math.SE - жоден з яких не згадував нічого про ascii порівняно з бінарними даними та довжиною вибірки. Як без достатньо великого набору вибірки, як можна визначити статистичну випадковість будь-якої послідовності?
sm535
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.