If you're seeing this message, it means we're having trouble loading external resources on our website.

Ако си зад уеб филтър, моля, увери се, че домейните *. kastatic.org и *. kasandbox.org са разрешени.

Основно съдържание

Разпределение на случайни числа

Ще настъпи време в живота ти, в което няма да искаш равномерно (или Гаусово) разпределение на случайни стойности. Нека си представим за момент, че излизаш със случайна походка в търсене на храна. Да се движиш в пространство изглежда като разумна стратегия за намиране на нещо за ядене. В крайна сметка не знаеш къде е храната, така че може просто да я потърсиш тук-там, докато случайно я откриеш. Проблемът, както може да се досетиш, е че със случайна походка ще се върнеш към вече посещавани местоположения много пъти (това е известно като "oversampling" – свръх-дискретизация). Една стратегия, за избягване на такъв проблем е да се направи много голяма крачка. Това позволява на ходещия да търси случайно около конкретно местоположение докато периодично скача много далеч, за да намали количеството oversampling. Този вариант на случайна походка (известен като полет на Леви) използва определен набор от вероятности. Макар и да не е точно изпълнение на полет на Леви, можем да опишем вероятностното разпределение по следния начин: колкото е по-дълга стъпката, толкова по-малко вероятно е да бъде избрана; колкото е по-къса стъпка, толкова е по-вероятно да бъде избрана.
По-рано в този раздел видяхме, че можем да генерираме определени вероятностни разпределения чрез попълване на масив със стойности (някои от които се дублират така че да бъдат избрани по-често) или чрез проверка с резултата от изпълнението на random(). Бихме могли да изпълним полет на Lévy, като кажем, че има 1% шанс ходещият да направи голяма крачка.
var r = random(1);
// 1% вероятност за голяма стъпка
if (r < 0{,}01) {
  xstep = random(-100, 100);
  ystep = random(-100, 100);
} else {
  xstep = random(-1, 1);
  ystep = random(-1, 1);
}
Обаче, това намалява вероятностите до определен брой опции. Ами ако искаме да направим по-общо правило – например колкото по-голямо е числото, толкова по-вероятно е да бъде избрано? 3,145 ще бъде по-вероятно да бъде избрано от 3,144, дори ако вероятността е съвсем малко по-голяма. С други думи, ако x е случайно число, ние може да го свържем с y-оста с y = x.
Природата на кода изображение
Фигура I.4
Ако можем да разберем как да генерираме разпределение от случайни числа според горната графика, тогава ще можем да използваме същата методология за всяка произволна крива, за която имаме формула.
Едно от решенията е да изберем две случайни числа вместо едно. Първото случайно число е просто случайно число. Вторто, обаче, е това, което ще наречем "квалифицираща случайна стойност." То ще ни каже дали да използваме първата стойност или да я изхвърлим и да изберем друга. Числата, които по-лесно се квалифицират, ще бъдат избирани по-често, а числата, които по-рядко се квалифицират, ще бъдат избирани по-рядко. Ето и стъпките (засега нека разгледаме само произволни стойности между 0 и 1):
  1. Избери случайно число: R1
  2. Изчисли вероятността Р, където R1 трябва да отговаря на изискванията. Да опитаме: P = R1.
  3. Избери друго случайно число: R2
  4. Ако R2 е по-малко от Р, значи сме намерили нашето число – R1!
  5. Ако R2 не е по-малко от Р, върни се на стъпка 1 и започни отначало.
Тук ние казваме, че вероятността една случайна стойност да се квалифицира е равна на самото случайно число. Да кажем,че избираме 0,1 за R1. Това значи, че R1 ще има 10% шанс да се квалифицира. Ако вземем 0,83 за R1, тогава то ще има 83% шанс за квалифициране. Колкото е по-голямо числото, толкова е по-голяма вероятноста, че ние действително ще го използваме.
Ето една функция (кръстена на метода Monte Carlo, която е наречена на казиното Monte Carlo) която имплементира горния алгоритъм и връща случайно число между 0 и 1. Тази програма използва стойностите за да зададе размер на елипси, но бихме могли да използваме тези стойности за всякакви неща.

Курсът "Компютърни симулации на физични явления" е производeн на "Природата на кода" от Даниел Шифман, използвана от Creative Commons Attribution-NonCommercial 3,0 Unported License.

Искаш ли да се присъединиш към разговора?

Все още няма публикации.
Разбираш ли английски? Натисни тук, за да видиш още дискусии в английския сайт на Кан Академия.