powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Монетка, кости и генератор(ы) псевдослучайных чисел
21 сообщений из 21, страница 1 из 1
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115312
Фотография KeyKeeper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Сформулировать тему было трудно. Имею вопрос в области теории вероятностей в контексте генераторов псевдослучайных чисел.
В моей программе есть несколько мест в которых требуется использование случайных величин. Эти величины представляют различные случайные процессы, имеющие разные области допустимых значений.
Для простоты давайте примем, что имеем одну монетку, которая "подкидывается" в методе FlipCoin. Область значений монеты -- 0 (орёл) и 1 (решка). Также имеем шестигранный кубик (игральную кость), которая "кидается" в методе RollDice. Область значений - [1; 6] (или [0; 5], как угодно). Полагаю, что выпадение любого значения в пределах одной независимой переменной равновероятно (для монеты -- P = 1/2, для кости P = 1/6).
Вопрос такой. Следует ли мне использовать два разных экземпляра (объекта) генератора случайных чисел для моделирования этих величин? Или я могу использовать один и тот же объект? Какие опасности/важные моменты есть в этом?

Если вдруг непонятно объяснил, вот два наброска кода на чём-то типа C#. Выберети тот, что более правилен, по вашему мнению.
Код: plaintext
1.
2.
3.
4.
5.
6.
class Test
{
    private Random commonRandom = new Random(seed);
    public int FlipCoin() { return commonRandom.Next(0, 1); }
    public int RollDice() { return commonRandom.Next(1, 6); }
}

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
class Test
{
    private Random coinRandom = new Random(coinSeed);
    public int FlipCoin() { return coinRandom.Next(0, 1); }

    private Random diceRandom = new Random(diceSeed);
    public int RollDice() { return diceRandom.Next(1, 6); }
}
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115352
Algol36
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KeyKeeper,

Однозначно первый вариант.
Дело в том, что два экземпляра Random, созданные почти одновременно, скорее всего вам будут давать две эквивалентные последовательности. И ваши "подбрасывания" будут сильно скоррелированны.
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115358
Gwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что мешает проверить?
Посмотрите оба варианта на достаточно большой выборке и всё станет ясно..
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115367
Фотография KeyKeeper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Algol36KeyKeeper,

Однозначно первый вариант.
Дело в том, что два экземпляра Random, созданные почти одновременно, скорее всего вам будут давать две эквивалентные последовательности. И ваши "подбрасывания" будут сильно скоррелированны.

Вы не на то обращаете внимание. Я намеренно указал, что seed'ы у двух генераторов разные. Техническая реализация -- пустяк. Первое, что пришло в голову -- использование ленивой инициализации. Разумеется, есть и иные способы сделать seed'ы разными. Технически -- пустяк. Вопрос в другом. Следует ли разделять два генератора из-за того, что они представляют разные случайные величины ? Если у Вас есть теоретическое подкрепление ответа на вопрос, был бы раз почитать.
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115380
Фотография KeyKeeper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GwaА что мешает проверить?
Посмотрите оба варианта на достаточно большой выборке и всё станет ясно..
Признаюсь, я не умею проверять последовательности случайных величин. Кроме того, в случае с теорией вероятностей, можно "наколоться". Да, теоретически, при достаточно большом количестве испытаний, относительная частота событий равна их вероятности. Но всё-таки нельзя исключать, что я получу последовательность, которая будет выглядеть как неслучайная, но на самом деле являться случайной. Например, если 90 раз из ста выпадет "6" на шестигранной кости. А главное, как понять, что одна последовательность "случайнее" другой.
В общем, на эти вопросы я уж точно не могу ответить пока.
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115391
Gwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KeyKeeperGwaА что мешает проверить?
Посмотрите оба варианта на достаточно большой выборке и всё станет ясно..
Признаюсь, я не умею проверять последовательности случайных величин. Кроме того, в случае с теорией вероятностей, можно "наколоться". Да, теоретически, при достаточно большом количестве испытаний, относительная частота событий равна их вероятности. Но всё-таки нельзя исключать, что я получу последовательность, которая будет выглядеть как неслучайная, но на самом деле являться случайной. Например, если 90 раз из ста выпадет "6" на шестигранной кости. А главное, как понять, что одна последовательность "случайнее" другой.
В общем, на эти вопросы я уж точно не могу ответить пока.
На большой выборке сразу видно.
Числа должны выпадать равномерно -это и есть проверка.
Если как Вы говорите 90 раз из ста выпала 6, то это значит Ваш генератор случайных чисел никуда не годится.
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115413
Algol36
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А, сори, не заметил что у вас seed есть.
KeyKeeper Следует ли разделять два генератора из-за того, что они представляют разные случайные величины ?Теоретически - не следует. Два последовательных значения ГСЧ - не зависят друг от друга, какой смысл их разделять по разным генераторам? На практике, конечно, такие зависимости могут быть, но сказываются такие эффекты только в специфичных случаях.
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115421
Фотография KeyKeeper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.

Какой из двух подходов дал "более случайные" последовательности? Очевидно, на этом конкретном примере мы не можем сказать. Но как вообще оценивать какая из последовательностей более случайна?

Если можно, в объяснении давайте как-то больше примеров и объяснений мыслей.
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115427
Algol36
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KeyKeeperДа, теоретически, при достаточно большом количестве испытаний, относительная частота событий равна их вероятности. Но всё-таки нельзя исключать, что я получу последовательность, которая будет выглядеть как неслучайная, но на самом деле являться случайной. Например, если 90 раз из ста выпадет "6" на шестигранной кости. А главное, как понять, что одна последовательность "случайнее" другой.
В общем, на эти вопросы я уж точно не могу ответить пока.
Существует масса тестов для ГСЧ.
Обзор можно посмотреть здесь
GwaЕсли как Вы говорите 90 раз из ста выпала 6, то это значит Ваш генератор случайных чисел никуда не годится.Ничего это не значит. Вероятность этого события отлична от нуля, и оно выпадает с точно такой же вероятностью, как и любая другая последовательность.
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115430
Фотография KeyKeeper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Algol36А, сори, не заметил что у вас seed есть.
KeyKeeper Следует ли разделять два генератора из-за того, что они представляют разные случайные величины ?Теоретически - не следует. Два последовательных значения ГСЧ - не зависят друг от друга, какой смысл их разделять по разным генераторам? На практике, конечно, такие зависимости могут быть, но сказываются такие эффекты только в специфичных случаях.Я собираюсь использовать генераторы в ГА. Планировал, что один генератор будет использоваться для осуществления отбора, другой -- для выбора точки(ек) кроссовера, третий -- для определения потребности в мутации бита и т.д.
Мне интуитивно видится, что такой подход позволит мне получить "независимые случайные последовательности". Подкрепить это я ничем не могу. И признаю, что это очень даже может быть заблуждением.
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115434
Фотография KeyKeeper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Algol36GwaЕсли как Вы говорите 90 раз из ста выпала 6, то это значит Ваш генератор случайных чисел никуда не годится.Ничего это не значит. Вероятность этого события отлична от нуля, и оно выпадает с точно такой же вероятностью, как и любая другая последовательность.Вот! У меня нет дара объяснять!
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115445
Gwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Какой из двух подходов дал "более случайные" последовательности?
Нет такого понятия более случайная или менее слечайная.
В данном случае мы имеем дело в равномено распределённой случайной величиной.
Более того при программировании Вы имеете деле не с реальностью, а с моделью.
В реальности может быть флуктуация, в модели ее нет.
Если Вы хотите чтоб она была, то при программировании нужно об этом специально позаботится..
Ваш вопрос сводится лишь к одному: дают ли оба предложенные способа одинаковый результат. И это выясняется элементарной проверкой (тестом).
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115457
Algol36
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KeyKeeperЯ собираюсь использовать генераторы в ГА. Планировал, что один генератор будет использоваться для осуществления отбора, другой -- для выбора точки(ек) кроссовера, третий -- для определения потребности в мутации бита и т.д.
В таком случае я бы не заморачивался такими вещами как качество ГСЧ. Качество ГСЧ сказывается только в очень чувствительных стат методах, или в методах, типа Монте-Карло. Для грубой генерации дискретных величин, вам подойдет любой вариант. Единственное, что смущает - где вы будете брать эти самые seed? Если вы их зафиксируете, то у вас постоянно будет генериться одна и та же последовательность, что наврядли вам подходит. А если же вы их уберете, то генераторы будут коррелированы, как я уже писал. Поэтому вариант с одним ГСЧ - предпочтительнее. Правда, тут нужно не забывать о сминхронизации доступа к нему, при многопточности.
KeyKeeperМне интуитивно видится, что такой подход позволит мне получить "независимые случайные последовательности". Подкрепить это я ничем не могу. И признаю, что это очень даже может быть заблуждением. Это заблуждение, два последовательных значения ГСЧ должны быть независимыми. Это кстати легко проверяется построением автокорреляционной функции.
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115472
Фотография KeyKeeper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Algol36Единственное, что смущает - где вы будете брать эти самые seed? Если вы их зафиксируете, то у вас постоянно будет генериться одна и та же последовательность, что наврядли вам подходит. А если же вы их уберете, то генераторы будут коррелированы, как я уже писал. Поэтому вариант с одним ГСЧ - предпочтительнее. Правда, тут нужно не забывать о сминхронизации доступа к нему, при многопточности.
Самый очевидный способ получить seed -- из системного времени. Я бы написал примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
private Random _coinRandom = null;
private Random CoinRandom
{
  get
  {
     if (_coinRandom == null)
       _coinRandom = new Random(unchecked((int)DateTime.Now.Ticks));
     return _coinRandom;
  }
}
У двух разных Random'ов seed'ы окажутся одинаковыми, если два первых обращения к этим Random'ам произойдут в один и тот же момент. (Конечно, это не единственный вариант, но самый вероятный.) Это легко обойти, если запомининать, какие "зёрна" уже были использовать и исключать их. Да, это немного "неправильно", но как простой вариант может и подойти.

Algol36Это заблуждение, два последовательных значения ГСЧ должны быть независимыми. Это кстати легко проверяется построением автокорреляционной функции.Учёл. Спасибо.
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115486
Algol36
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KeyKeeperУ двух разных Random'ов seed'ы окажутся одинаковыми, если два первых обращения к этим Random'ам произойдут в один и тот же момент. (Конечно, это не единственный вариант, но самый вероятный.) Это легко обойти, если запомининать, какие "зёрна" уже были использовать и исключать их. Да, это немного "неправильно", но как простой вариант может и подойти.Ну и зачем вам эти костыли? Такие алгоритмы только ухудшают ГСЧ. Например, вы исключили некий seed. Но ведь в реальности начальное значение может быть любым, а вы его искуственно ограничили. Значит вы ухудшили ГСЧ.
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115495
Фотография KeyKeeper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Algol36Ну и зачем вам эти костыли? Такие алгоритмы только ухудшают ГСЧ. Например, вы исключили некий seed. Но ведь в реальности начальное значение может быть любым, а вы его искуственно ограничили. Значит вы ухудшили ГСЧ.Я Вас понял. Сразу написал, что вариант с уникальными зёрнами некрасивый.
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115540
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 14.02.2011 16:01, KeyKeeper wrote:

> Вопрос такой. Следует ли мне использовать два разных экземпляра (объекта)
> генератора случайных чисел для моделирования этих величин?

Это только тебе решать.

Или я могу
> использовать один и тот же объект?

Можешь и один, если можно отнормировать величины к двум диапазонам.

Какие опасности/важные моменты есть в этом?

Опасность такая, что почти все псевдослучайные генераторы величин
имеют корреляцию между соседними сгенерированными значениями.
Если тебе не страшно, если значения этих двух величин
будут корелировать между собой - можешь использовать один генератор.
Если нет -- используй два.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115545
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KeyKeeperВопрос такой. Следует ли мне использовать два разных экземпляра (объекта) генератора случайных чисел для моделирования этих величин? Или я могу использовать один и тот же объект? Какие опасности/важные моменты есть в этом?
Ответ на этот вопрос вообще говоря дать невозможно до тех пор пока Вы либо не исследуете статистически получающиеся результаты (и не скажете, устраивают ли они Вас) либо не посмотрите пристально на исходник ГСЧ и не поймёте, как именно в деталях он реализован и что Вы можете делать с ним, не ухудшая качество данных.

В данном конкретном случае никто не мешает Вам сделать так:

Код: plaintext
1.
public int rollDice() {return diceRandom.next ( 1 ,  6 );}
public int flipCoin() {return rollDice()% 2 ;}

Эти генераторы будут заведомо не хуже, чем одиночный.
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37115715
Фотография KeyKeeper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivОпасность такая, что почти все псевдослучайные генераторы величин имеют корреляцию между соседними сгенерированными значениями.Именно этого и опасаюсь на самом деле.

softwarer...посмотрите пристально на исходник ГСЧ и не поймёте, как именно в деталях он реализованДа, боюсь без этого никак не разобраться в последствиях каждого варианта. Жаль, что в математике слабоват. Но обязательно почитаю в будущем. Благо, MSDN явно указывает, какой алгоритм реализован:
MSDNТекущая реализация класса Random основана на Donald Е. Субтрактивный алгоритм генератора случайных чисел Кнута.

MrBlock...Толсто
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37116537
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 14.02.2011 19:25, KeyKeeper wrote:

> Опасность такая, что почти все псевдослучайные генераторы величин имеют
> корреляцию между соседними сгенерированными значениями.
>
> Именно этого и опасаюсь на самом деле.

Так опасайся ты или нет, разделяй генераторы между величинами или нет,
генераторы более случайными от этого не станут.

Тебе разбираться нечего. Если тебе нужны очень случайные величины,
в стандартных библиотеках ты их скорее всего не найдёш. Их надо
делать тогда самому или искать специальные библиотеки.

Вопрос разделять ли генераторы между величинами или нет, к этому делу
не относится.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Монетка, кости и генератор(ы) псевдослучайных чисел
    #37129338
Фотография Nikolay_1984
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Натыкался недавно на эту особенность использования .NETовского рэндома.

Поиграйся ручками на примере генерации более наглядных вещей, чем 0|1

Если интересны глубоко проверки последоваельностей на случайность (и способы самостоятельной генерации псевдослучайных последовательностей), то гоуту второй том Кнута.

http://lib.mexmat.ru/books/9034

Искусство программирования (Том 2. Получисленные алгоритмы)


Во втором томе представлено полное введение в теорию получисленных алгоритмов, причем случайным числам и арифметике посвящены отдельные главы. В книге даны основы теории получисленных алгоритмов, а также их основные примеры. Тем самым установлено прочное связующее звено между компьютерным программированием и численным анализом. Особого упоминания заслуживает предложенная Кнутом в этом третьем издании новая трактовка генераторов случайных чисел, а также рассмотрение способов вычислений с помощью формальных степенных рядов.


На мехмате без него ни один студень до 3-го курса бы не дожил :)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Монетка, кости и генератор(ы) псевдослучайных чисел
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]