|
|
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Сформулировать тему было трудно. Имею вопрос в области теории вероятностей в контексте генераторов псевдослучайных чисел. В моей программе есть несколько мест в которых требуется использование случайных величин. Эти величины представляют различные случайные процессы, имеющие разные области допустимых значений. Для простоты давайте примем, что имеем одну монетку, которая "подкидывается" в методе FlipCoin. Область значений монеты -- 0 (орёл) и 1 (решка). Также имеем шестигранный кубик (игральную кость), которая "кидается" в методе RollDice. Область значений - [1; 6] (или [0; 5], как угодно). Полагаю, что выпадение любого значения в пределах одной независимой переменной равновероятно (для монеты -- P = 1/2, для кости P = 1/6). Вопрос такой. Следует ли мне использовать два разных экземпляра (объекта) генератора случайных чисел для моделирования этих величин? Или я могу использовать один и тот же объект? Какие опасности/важные моменты есть в этом? Если вдруг непонятно объяснил, вот два наброска кода на чём-то типа C#. Выберети тот, что более правилен, по вашему мнению. Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 16:01 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
KeyKeeper, Однозначно первый вариант. Дело в том, что два экземпляра Random, созданные почти одновременно, скорее всего вам будут давать две эквивалентные последовательности. И ваши "подбрасывания" будут сильно скоррелированны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 16:14 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
А что мешает проверить? Посмотрите оба варианта на достаточно большой выборке и всё станет ясно.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 16:17 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
Algol36KeyKeeper, Однозначно первый вариант. Дело в том, что два экземпляра Random, созданные почти одновременно, скорее всего вам будут давать две эквивалентные последовательности. И ваши "подбрасывания" будут сильно скоррелированны. Вы не на то обращаете внимание. Я намеренно указал, что seed'ы у двух генераторов разные. Техническая реализация -- пустяк. Первое, что пришло в голову -- использование ленивой инициализации. Разумеется, есть и иные способы сделать seed'ы разными. Технически -- пустяк. Вопрос в другом. Следует ли разделять два генератора из-за того, что они представляют разные случайные величины ? Если у Вас есть теоретическое подкрепление ответа на вопрос, был бы раз почитать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 16:21 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
GwaА что мешает проверить? Посмотрите оба варианта на достаточно большой выборке и всё станет ясно.. Признаюсь, я не умею проверять последовательности случайных величин. Кроме того, в случае с теорией вероятностей, можно "наколоться". Да, теоретически, при достаточно большом количестве испытаний, относительная частота событий равна их вероятности. Но всё-таки нельзя исключать, что я получу последовательность, которая будет выглядеть как неслучайная, но на самом деле являться случайной. Например, если 90 раз из ста выпадет "6" на шестигранной кости. А главное, как понять, что одна последовательность "случайнее" другой. В общем, на эти вопросы я уж точно не могу ответить пока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 16:25 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
KeyKeeperGwaА что мешает проверить? Посмотрите оба варианта на достаточно большой выборке и всё станет ясно.. Признаюсь, я не умею проверять последовательности случайных величин. Кроме того, в случае с теорией вероятностей, можно "наколоться". Да, теоретически, при достаточно большом количестве испытаний, относительная частота событий равна их вероятности. Но всё-таки нельзя исключать, что я получу последовательность, которая будет выглядеть как неслучайная, но на самом деле являться случайной. Например, если 90 раз из ста выпадет "6" на шестигранной кости. А главное, как понять, что одна последовательность "случайнее" другой. В общем, на эти вопросы я уж точно не могу ответить пока. На большой выборке сразу видно. Числа должны выпадать равномерно -это и есть проверка. Если как Вы говорите 90 раз из ста выпала 6, то это значит Ваш генератор случайных чисел никуда не годится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 16:29 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
А, сори, не заметил что у вас seed есть. KeyKeeper Следует ли разделять два генератора из-за того, что они представляют разные случайные величины ?Теоретически - не следует. Два последовательных значения ГСЧ - не зависят друг от друга, какой смысл их разделять по разным генераторам? На практике, конечно, такие зависимости могут быть, но сказываются такие эффекты только в специфичных случаях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 16:36 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
GwaНа большой выборке сразу видно. Числа должны выпадать равномерно -это и есть проверка. Если как Вы говорите 90 раз из ста выпала 6, то это значит Ваш генератор случайных чисел никуда не годится.К сожалению, это наивный подход. Я согласен, что он логичен. И даже заключение негодности генератора случайных чисел в описанном случае очень вероятно является верным. Очень. Но не гарантированно. Повторю. Я согласен, что относительная частота события стремится к вероятности этого события при увеличении кол-ва испытаний. Но нет гарантий. На более "скользкий" вопрос вы не ответили, к сожалению. Представьте, что в первом случае я получил такие события: Coin: 0, 0, 0, 0, 0, 0, 0, 0, 1, 1. Dice: 2, 4, 6, 2, 4, 6, 2, 4, 6, 2. Во втором: Coin: 1, 1, 1, 1, 1, 1, 1, 1, 0, 0. Dice: 1, 3, 5, 1, 3, 5, 1, 3, 5, 1. Какой из двух подходов дал "более случайные" последовательности? Очевидно, на этом конкретном примере мы не можем сказать. Но как вообще оценивать какая из последовательностей более случайна? Если можно, в объяснении давайте как-то больше примеров и объяснений мыслей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 16:38 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
KeyKeeperДа, теоретически, при достаточно большом количестве испытаний, относительная частота событий равна их вероятности. Но всё-таки нельзя исключать, что я получу последовательность, которая будет выглядеть как неслучайная, но на самом деле являться случайной. Например, если 90 раз из ста выпадет "6" на шестигранной кости. А главное, как понять, что одна последовательность "случайнее" другой. В общем, на эти вопросы я уж точно не могу ответить пока. Существует масса тестов для ГСЧ. Обзор можно посмотреть здесь GwaЕсли как Вы говорите 90 раз из ста выпала 6, то это значит Ваш генератор случайных чисел никуда не годится.Ничего это не значит. Вероятность этого события отлична от нуля, и оно выпадает с точно такой же вероятностью, как и любая другая последовательность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 16:41 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
Algol36А, сори, не заметил что у вас seed есть. KeyKeeper Следует ли разделять два генератора из-за того, что они представляют разные случайные величины ?Теоретически - не следует. Два последовательных значения ГСЧ - не зависят друг от друга, какой смысл их разделять по разным генераторам? На практике, конечно, такие зависимости могут быть, но сказываются такие эффекты только в специфичных случаях.Я собираюсь использовать генераторы в ГА. Планировал, что один генератор будет использоваться для осуществления отбора, другой -- для выбора точки(ек) кроссовера, третий -- для определения потребности в мутации бита и т.д. Мне интуитивно видится, что такой подход позволит мне получить "независимые случайные последовательности". Подкрепить это я ничем не могу. И признаю, что это очень даже может быть заблуждением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 16:42 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
Algol36GwaЕсли как Вы говорите 90 раз из ста выпала 6, то это значит Ваш генератор случайных чисел никуда не годится.Ничего это не значит. Вероятность этого события отлична от нуля, и оно выпадает с точно такой же вероятностью, как и любая другая последовательность.Вот! У меня нет дара объяснять! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 16:45 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
>>Какой из двух подходов дал "более случайные" последовательности? Нет такого понятия более случайная или менее слечайная. В данном случае мы имеем дело в равномено распределённой случайной величиной. Более того при программировании Вы имеете деле не с реальностью, а с моделью. В реальности может быть флуктуация, в модели ее нет. Если Вы хотите чтоб она была, то при программировании нужно об этом специально позаботится.. Ваш вопрос сводится лишь к одному: дают ли оба предложенные способа одинаковый результат. И это выясняется элементарной проверкой (тестом). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 16:50 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
KeyKeeperЯ собираюсь использовать генераторы в ГА. Планировал, что один генератор будет использоваться для осуществления отбора, другой -- для выбора точки(ек) кроссовера, третий -- для определения потребности в мутации бита и т.д. В таком случае я бы не заморачивался такими вещами как качество ГСЧ. Качество ГСЧ сказывается только в очень чувствительных стат методах, или в методах, типа Монте-Карло. Для грубой генерации дискретных величин, вам подойдет любой вариант. Единственное, что смущает - где вы будете брать эти самые seed? Если вы их зафиксируете, то у вас постоянно будет генериться одна и та же последовательность, что наврядли вам подходит. А если же вы их уберете, то генераторы будут коррелированы, как я уже писал. Поэтому вариант с одним ГСЧ - предпочтительнее. Правда, тут нужно не забывать о сминхронизации доступа к нему, при многопточности. KeyKeeperМне интуитивно видится, что такой подход позволит мне получить "независимые случайные последовательности". Подкрепить это я ничем не могу. И признаю, что это очень даже может быть заблуждением. Это заблуждение, два последовательных значения ГСЧ должны быть независимыми. Это кстати легко проверяется построением автокорреляционной функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 16:56 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
Algol36Единственное, что смущает - где вы будете брать эти самые seed? Если вы их зафиксируете, то у вас постоянно будет генериться одна и та же последовательность, что наврядли вам подходит. А если же вы их уберете, то генераторы будут коррелированы, как я уже писал. Поэтому вариант с одним ГСЧ - предпочтительнее. Правда, тут нужно не забывать о сминхронизации доступа к нему, при многопточности. Самый очевидный способ получить seed -- из системного времени. Я бы написал примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Algol36Это заблуждение, два последовательных значения ГСЧ должны быть независимыми. Это кстати легко проверяется построением автокорреляционной функции.Учёл. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 17:04 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
KeyKeeperУ двух разных Random'ов seed'ы окажутся одинаковыми, если два первых обращения к этим Random'ам произойдут в один и тот же момент. (Конечно, это не единственный вариант, но самый вероятный.) Это легко обойти, если запомининать, какие "зёрна" уже были использовать и исключать их. Да, это немного "неправильно", но как простой вариант может и подойти.Ну и зачем вам эти костыли? Такие алгоритмы только ухудшают ГСЧ. Например, вы исключили некий seed. Но ведь в реальности начальное значение может быть любым, а вы его искуственно ограничили. Значит вы ухудшили ГСЧ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 17:11 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
Algol36Ну и зачем вам эти костыли? Такие алгоритмы только ухудшают ГСЧ. Например, вы исключили некий seed. Но ведь в реальности начальное значение может быть любым, а вы его искуственно ограничили. Значит вы ухудшили ГСЧ.Я Вас понял. Сразу написал, что вариант с уникальными зёрнами некрасивый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 17:15 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
On 14.02.2011 16:01, KeyKeeper wrote: > Вопрос такой. Следует ли мне использовать два разных экземпляра (объекта) > генератора случайных чисел для моделирования этих величин? Это только тебе решать. Или я могу > использовать один и тот же объект? Можешь и один, если можно отнормировать величины к двум диапазонам. Какие опасности/важные моменты есть в этом? Опасность такая, что почти все псевдослучайные генераторы величин имеют корреляцию между соседними сгенерированными значениями. Если тебе не страшно, если значения этих двух величин будут корелировать между собой - можешь использовать один генератор. Если нет -- используй два. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 17:39 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
KeyKeeperВопрос такой. Следует ли мне использовать два разных экземпляра (объекта) генератора случайных чисел для моделирования этих величин? Или я могу использовать один и тот же объект? Какие опасности/важные моменты есть в этом? Ответ на этот вопрос вообще говоря дать невозможно до тех пор пока Вы либо не исследуете статистически получающиеся результаты (и не скажете, устраивают ли они Вас) либо не посмотрите пристально на исходник ГСЧ и не поймёте, как именно в деталях он реализован и что Вы можете делать с ним, не ухудшая качество данных. В данном конкретном случае никто не мешает Вам сделать так: Код: plaintext 1. Эти генераторы будут заведомо не хуже, чем одиночный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 17:42 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
MasterZivОпасность такая, что почти все псевдослучайные генераторы величин имеют корреляцию между соседними сгенерированными значениями.Именно этого и опасаюсь на самом деле. softwarer...посмотрите пристально на исходник ГСЧ и не поймёте, как именно в деталях он реализованДа, боюсь без этого никак не разобраться в последствиях каждого варианта. Жаль, что в математике слабоват. Но обязательно почитаю в будущем. Благо, MSDN явно указывает, какой алгоритм реализован: MSDNТекущая реализация класса Random основана на Donald Е. Субтрактивный алгоритм генератора случайных чисел Кнута. MrBlock...Толсто ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 19:25 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
On 14.02.2011 19:25, KeyKeeper wrote: > Опасность такая, что почти все псевдослучайные генераторы величин имеют > корреляцию между соседними сгенерированными значениями. > > Именно этого и опасаюсь на самом деле. Так опасайся ты или нет, разделяй генераторы между величинами или нет, генераторы более случайными от этого не станут. Тебе разбираться нечего. Если тебе нужны очень случайные величины, в стандартных библиотеках ты их скорее всего не найдёш. Их надо делать тогда самому или искать специальные библиотеки. Вопрос разделять ли генераторы между величинами или нет, к этому делу не относится. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2011, 11:07 |
|
||
|
Монетка, кости и генератор(ы) псевдослучайных чисел
|
|||
|---|---|---|---|
|
#18+
Натыкался недавно на эту особенность использования .NETовского рэндома. Поиграйся ручками на примере генерации более наглядных вещей, чем 0|1 Если интересны глубоко проверки последоваельностей на случайность (и способы самостоятельной генерации псевдослучайных последовательностей), то гоуту второй том Кнута. http://lib.mexmat.ru/books/9034 Искусство программирования (Том 2. Получисленные алгоритмы) Во втором томе представлено полное введение в теорию получисленных алгоритмов, причем случайным числам и арифметике посвящены отдельные главы. В книге даны основы теории получисленных алгоритмов, а также их основные примеры. Тем самым установлено прочное связующее звено между компьютерным программированием и численным анализом. Особого упоминания заслуживает предложенная Кнутом в этом третьем издании новая трактовка генераторов случайных чисел, а также рассмотрение способов вычислений с помощью формальных степенных рядов. На мехмате без него ни один студень до 3-го курса бы не дожил :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2011, 22:43 |
|
||
|
|

start [/forum/topic.php?fid=16&tid=1343127]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 305ms |

| 0 / 0 |
