По-перше, немає справжньої випадковості в сучасних комп’ютерах, створених "випадковими числами". Всі псевдовипадкові генератори використовують детерміновані методи. (Можливо, квантові комп'ютери це змінять.)
Складне завдання полягає в розробці алгоритмів, які дають вихід, який не може змістовно відрізняти від даних, що надходять із справді випадкового джерела.
Ви маєте рацію, що встановлення насіння запускає вас на певну відому стартову точку у довгому списку псевдовипадкових чисел. Для генераторів, реалізованих у R, Python тощо, цей список надзвичайно довгий. Достатньо довгий, що навіть найбільший здійсненний імітаційний проект не перевищить "періоду" генератора, щоб значення почали повторно кругообіг.
У багатьох звичайних додатках люди не встановлюють насіння. Потім автоматично вибирається непередбачуване насіння (наприклад, з мікросекунд на годиннику операційної системи). Псевдовипадкові генератори загального користування піддавались випробуванням акумуляторів, що значною мірою складаються з проблем, які виявилися важкими для моделювання з попередніми незадовільними генераторами.
Зазвичай вихід генератора складається з значень, які не відрізняються від практичних цілей від чисел, вибраних справді випадковим чином, рівномірним розподілом наТоді цими псевдовипадковими числами маніпулюють так, що відповідають тому, що можна було б отримати вибірковою вибіркою з інших розподілів, таких як двочлен, Пуассон, нормальний, експоненціальний тощо.(0,1).
Одне тестування генератора полягає в тому, щоб переконатися, що його послідовні пари в «спостереженнях», симульованих як
насправді виглядають так, що вони заповнюють одиничний квадрат навмання. (Зроблено двічі нижче.) Злегка мармурований вигляд є результатом властивої мінливості. Було б дуже підозріло отримати сюжет, який виглядав ідеально рівномірно сірим. [У деяких резолюціях може бути звичайна муарова модель; будь ласка, змініть збільшення чи вгору, щоб позбутися від цього хибного ефекту, якщо воно виникне.]Unif(0,1)
set.seed(1776); m = 50000
par(mfrow=c(1,2))
u = runif(m); plot(u[1:(m-1)], u[2:m], pch=".")
u = runif(m); plot(u[1:(m-1)], u[2:m], pch=".")
par(mfrow=c(1,1))
Іноді корисно встановити насіння. Деякі такі сфери використання:
При програмуванні та налагодженні зручно мати передбачуваний вихід. Так багато програмістів ставлять set.seed
заяву на початку програми, поки не буде зроблено написання та налагодження.
При навчанні про моделювання. Якщо я хочу показати учням, що я можу імітувати рулони справедливого штампу, використовуючи sample
функцію R, я можу обдурити, виконавши багато моделей та вибравши той, який найбільше наближається до цільового теоретичного значення. Але це створило б нереальне враження про те, як моделювання справді працює.
Якщо я встановити насіння на початку, моделювання буде отримувати однаковий результат кожного разу. Студенти можуть перечитати свою копію моєї програми, щоб переконатися, що вона дає намічені результати. Тоді вони можуть запускати свої власні симуляції, як із власними насінням, так і дозволяючи програмі вибрати власне початкове місце.
Наприклад, ймовірність отримати загальну кількість 10 при двох справедливих кісток становитьЗа допомогою мільйона експериментів з двома кубиками я маю отримати точність приблизно двох-трьох місць. Похибка моделювання в 95% становить приблизно
3/36=1/12=0.08333333.
2(1/12)(11/12)/106−−−−−−−−−−−−−−−√=0.00055.
set.seed(703); m = 10^6
s = replicate( m, sum(sample(1:6, 2, rep=T)) )
mean(s == 10)
[1] 0.083456 # aprx 1/12 = 0.0833
2*sd(s == 10)/sqrt(m)
[1] 0.0005531408 # aprx 95% marg of sim err.
При обміні статистичними аналізами, що передбачають моделювання.
На сьогоднішній день багато статистичних аналізів включають певне моделювання, наприклад, тест на перестановку або пробу Гіббса. Показавши насіння, ви даєте можливість людям, які читають аналіз, точно повторити результати, якщо вони бажають.
При написанні наукових статей, що стосуються рандомізації. Наукові статті зазвичай проходять кілька раундів експертної оцінки. Ділянка може використовувати, наприклад, випадкові тремтіння точки, щоб зменшити перенапруження. Якщо аналізи потрібно дещо змінити у відповідь на коментарі рецензентів, добре, якщо певне непов'язане тремтіння не зміниться між раундами огляду, що може спричинити занепокоєння для особливо неповажних рецензентів, тому ви встановлюєте насіння перед тремтінням.
2^19937 − 1
. Насіння - точка цієї надзвичайно довгої послідовності, з якої запускається генератор. Так так, це детерміновано.