Я студентка факультета компьютерных наук и в настоящее время обучаюсь на курсе по системному моделированию и моделированию. Он включает в себя взаимодействие с повседневными системами вокруг нас и моделирование их в различных сценариях путем генерации случайных чисел в различных кривых распределения, таких как, например, IID, Gaussian и т. Д. Я работал над проектом boids, и меня просто поразил вопрос, что же на самом деле является «случайным»? Я имею в виду, например, что каждое случайное число, которое мы генерируем, даже в наших языках программирования, например, с помощью Math.random()
метода в Java, по существу генерируется по «алгоритму».
Откуда мы на самом деле знаем, что последовательность чисел, которую мы производим, является на самом деле случайной и поможет ли нам, как можно точнее, смоделировать определенную модель?
источник
Ответы:
Короткий ответ: никто не знает, что такое настоящая случайность или существует ли такая вещь. Если вы хотите измерить или измерить случайность дискретного объекта, вы, как правило, обратились бы к колмогоровской сложности . До колмогоровской сложности у нас не было способа количественно определить случайность, скажем, последовательности чисел, не рассматривая процесс, который ее породил.
Вот интуитивный пример, который действительно мешал людям в тот день. Рассмотрим последовательность бросков монет. Результатом одного броска является либо голова ( ), либо хвост ( T ). Скажем, мы делаем два эксперимента, где мы подбрасываем монету 10 раз. Первый эксперимент E 1 дает нам Н , Н , Н , Н , Н , Н , Н , Н , Н , Н . Второй эксперимент E 2 дает нам T , T , H , T , H ,ЧАС T Е1 ЧАС, Ч, Ч, Ч, Ч, Ч, Ч, Ч, Ч, Ч Е2 . Посмотрев на результат, вы можете испытать искушение заявить, что с монетой в E 1 что-то не так , или, по крайней мере, по какой-то странной причине то, что вы получили, не случайно. Но если предположитькак H и T являются вероятным (монета является справедливым), вероятность получения либо Е 1 или Е 2 равно ( 1 / 2 ) 10 . Фактически, получениелюбойопределенной последовательности так же вероятно, как и любой! Тем не менее, E 2 чувствуетT, Т, Ч, Т, Ч, Т, Т, Ч, Т, Ч Е1 ЧАС T Е1 Е2 ( 1 / 2 )10 Е2 случайный, а нет.Е1
В общем, поскольку сложность Колмогорова не вычислима, невозможно вычислить, насколько случайной является последовательность чисел, независимо от того, какой тип заявленного «совершенно случайного» процесса породил ее.
источник
В случае Java (или аналогичных языков) мы знаем алгоритм, используемый для создания случайных чисел. Если он начинается с одного начального числа, числа вовсе не случайны, т. Е. Если мы знаем в последовательности a 0 , … , a n , мы знаем a i + 1 или задаем как условную вероятность: ∀ k , l , i : P ( a i + 1 = k ∣ a i = l ) ∈ { 0 ,aя a0, ... ,N aя + 1
Тем не менее, эти ряды могут соответствовать свойствам (см., Например, WP: Автокорреляция ), которым соответствуют случайные числа, и этих свойств часто достаточно для выполнения задач, где мы хотели бы использовать «реальные» (например, сгенерированные каким-либо физическим процессом) случайные числа, но можем: Усилие их.
источник
Невозможно точно знать, является ли данная последовательность случайной или нет. Однако вы можете посмотреть на характеристики (или параметры) последовательности и рассчитать вероятность такой последовательности с учетом распределения интересов.
Вы можете добавить дополнительные моменты распределения (такие как асимметрия), представляющие интерес для дальнейшей проверки. Для чисел IID вы также можете попытаться обучить алгоритм машинного обучения прогнозированию наступающих элементов последовательности, а затем проверить нулевую гипотезу о том, что история улучшает производительность. Однако ни один из этих методов не может доказать, что последовательность действительно случайна, и, в лучшем случае, может распознать, когда последовательности НЕ случайны (с некоторой степенью достоверности).
источник
Современная теория вычислений отвечает: «случайный источник - это источник, который выглядит случайным для вашего любимого класса алгоритмов». Это утилитарная перспектива: если источник случайности выглядит как истинная случайность для всех алгоритмов, которые вас интересуют, то больше ничего не имеет значения. Вы можете анализировать свои алгоритмы так, как будто они получают действительно случайные броски монет, и ваш анализ даст правильные ответы.
Эта идея стоит за любым современным формальным понятием псевдослучайности.
источник
Вот еще два цента.
Один из способов думать о рандомизированных алгоритмах состоит в том, чтобы изобразить блок, который принимает некоторые входные данные, делает загадочные вещи с этим входным сигналом и производит некоторые («непредсказуемые») выходные данные.
Но вместо этого было бы полезно думать о них как о детерминированных алгоритмах, которые принимают два входа: «истинный» вход и некоторые «случайные» входные данные, которые мы получаем из функций, подобных
Math.Random()
.Как упоминают Джонатан и Фрафл, существуют способы сортировки, чтобы случайный источник вел себя «случайным образом». Но все, что они сделают, это повлияют на то, что вы думаете о будущей информации, которая поступает из этого случайного источника. Если вы считаете, что каждый бит с равной вероятностью может быть равным нулю или единице, независимо от предыдущих битов, то, насколько вам известно, вы полагаете, что этот источник является равномерно и независимо случайным и, следовательно, насколько вам известно, и убеждения, это будет работать быстро или будет правильно или так далее. Во всяком случае, это мой философский взгляд.
источник
Мы не можем генерировать действительно случайные числа. Существуют разные способы генерации псевдослучайных чисел с использованием заданного уравнения и конкретного начального значения. Таким образом, случайная последовательность чисел зависит от начального значения. Как только мы узнаем начальное значение, мы можем предсказать, какой будет последовательность. Помимо этого есть другие методы для генерации случайных чисел. Сейчас люди используют некоторые методы для генерации истинных случайных чисел, например, время движения головки диска и другие физические методы, которые можно встроить в компьютер. См. Http://en.wikipedia.org/wiki/Random_number_generation#Generation_methods.
источник
с помощью данного метода, как вы сказали
Math.random () в Java
Randomize; Случайная (п); в Дельфи
Вы можете реализовать свою собственную структуру и логику для генерации случайных чисел,
где такой «алгоритм» может работать в соответствии с заданными вами спецификациями для лучших случайных результатов.
и строить на этом логику.
Спасибо.
источник
другие ответы хороши, вот некоторые другие аспекты этого очень важного / непреднамеренно глубокого вопроса. ученые-компьютерщики изучали случайность десятилетиями и, вероятно, продолжат ее изучать. у него много глубоких связей и самых открытых вопросов, остающихся на местах. Вот несколько указателей.
«истинная / реальная случайность» происходит с физическими процессами низкого уровня и «шумом», таким как в стабилитронах, квантовой механике и т. д., которые могут использоваться в аппаратных ГСЧ
другие числа, генерируемые в компьютерной сфере, - это то, что известно как «псевдослучайный», который имитируется и никогда не может совпадать с «истинной случайностью». это так называемые PRNG
существует важный смысл «криптографической стойкости генераторов случайных чисел», который в некотором смысле измеряет их «качество» или «безопасность», см., например, криптографически безопасный PRNG . в основном, «слабый» генератор не имеет такой сложной вычислительной сложности, как «жесткий» генератор, а «слабый» генератор легче сломать.
Важной темой исследования в TCS являются рандомизированные и дерандомизированные алгоритмы . идея состоит в том, чтобы примерно изучить, насколько сильно алгоритм изменяется путем замены «истинной случайности» на PRNG, и существуют различные глубокие теоремы на эту тему. Вот высокоуровневый вопрос cstheory.se, который дает некоторое представление об исследованиях в этой области: эффективные и простые рандомизированные алгоритмы, где детерминизм труден
Еще одна ключевая тема в TCS - информационная энтропия - изначально введенная в физике - которая изучает тесно связанную концепцию «информационного дисупорядочения» и, как и некоторые другие важные концепции в (T) CS, представляется одной из ключевых идей, которые пересекаются Граница между прикладным и теоретическим анализом даже по некоторым формулам совпадает .
Еще раз подтверждая статус активных исследований, есть другие вопросы высокого ранга на cstheory.se, которые относятся к этому вопросу. вот один из близких, почти одинаковых: это действительно случайный генератор чисел, вычислимый по Тьюрингу
источник