Обсуждение участника:Davickh/Рандом
- Нормального распределения там и не надо. Надо распределение Бернулли. Но его тоже нет. C любовью, ваш Капитан Очевидность
- эээ, вроде бы от рандомизаторов обычно требуется равномерное распределение с возможно большей независимостью последовательных значений. Это я чего-то не понимаю или К.О. здесь фейковый?
- Просто равномерное распределение — штука абстрактная ибо оно непрерывное, так что на самом деле используется дискретное биномиальное. А Бернулли это частный случай биномиального. Впрочем, как человек имеющий к ММОРПГ непосредственное отношение могу сказать, что игроки всегда будут обвинять рандом в кривизне, даже если он нормальный. А «как можно большая независимость последовательных значений» это ересь, ибо все испытания должны быть независимыми, иначе это уже не рандом. Хм, может это в обсуждение сунуть?
- Игроки всегда во всем обвиняют рандом. Многие считают, что "раз столько раз сфейлилось, то щас уж точно проканает, там же ХХ% шанс", забывая, что рандом никому и ничего не должен, а следующий результат какбэ не зависит от предыдущего. Алсо, любой школьник может написать на любом доступном ему языке код, выдающий в цикле овер 9000 рандомных "да/нет" (псевдо, но кого это волнует?), и лично убедиться, что получить подряд туеву хучу "нет" очень даже возможно. Добавлю также, что конкретно в сервере л2 рандом не самописный, там обычный библиотечный rand().
- Хуле бы его не обвинять, если в результате его работы получается хрень.
- Результат рандома от игрока не зависит, зато игровой процесс от рандома – да. Рандом уменьшает влияние игрока на игровой процесс, оставляя его лишь наблюдать за "случайным" результатом, повторяя однообразные действия в ожидании выпадения лучшего результата. Рандом ворует игровой процесс у игрока. Рандом переворачивает взаимодействие так, что игра начинает "играть" в игрока. Рандом игроку не нужен. Рандом нужен для прикрытия уёбищности игр: уёбищная боевая система прикрывается вероятностями попадания и крита; уёбищные качество и количество подземелий и боссов прикрываются верояностью выпадения лута; уёбищное разнообразие оснащения и улучшений прикрывается боксами; уёбищная заточка уёбищна в своей сути и призвана как можно долше удерживать игрока за добычей материалов в бесконечных попытках улучшить эквип, в случае когда материалы предоставляются за донат – также высосать бесконечное количество денег.
- Рандом – это рак, убивающий игры.
- Игроки всегда во всем обвиняют рандом. Многие считают, что "раз столько раз сфейлилось, то щас уж точно проканает, там же ХХ% шанс", забывая, что рандом никому и ничего не должен, а следующий результат какбэ не зависит от предыдущего. Алсо, любой школьник может написать на любом доступном ему языке код, выдающий в цикле овер 9000 рандомных "да/нет" (псевдо, но кого это волнует?), и лично убедиться, что получить подряд туеву хучу "нет" очень даже возможно. Добавлю также, что конкретно в сервере л2 рандом не самописный, там обычный библиотечный rand().
- Просто равномерное распределение — штука абстрактная ибо оно непрерывное, так что на самом деле используется дискретное биномиальное. А Бернулли это частный случай биномиального. Впрочем, как человек имеющий к ММОРПГ непосредственное отношение могу сказать, что игроки всегда будут обвинять рандом в кривизне, даже если он нормальный. А «как можно большая независимость последовательных значений» это ересь, ибо все испытания должны быть независимыми, иначе это уже не рандом. Хм, может это в обсуждение сунуть?
- эээ, вроде бы от рандомизаторов обычно требуется равномерное распределение с возможно большей независимостью последовательных значений. Это я чего-то не понимаю или К.О. здесь фейковый?
к.о. считает, что теория относительности говорит, что шанс выпадения любого числа в оной таблице равен 50% в каждый момент времени: либо выпадет, либо нет... то-есть, шанс выпадения любого числа всегда в два раза меньше, чем ожидается, что кагбэ намекает быдлоколдинг
Есть мнение, что в ММОРПГ шанс выпадения редких предметов обратно пропорционален числу игроков в данный момент на сервере. Т.е. ночью, когда онлайн только задроты/боты, падает/спойлится лучше.
Библиотечный rand() и остаток от деления
Есть такая тупость, чуть менее чем во всех учебниках по программированию. В стандартной библиотеке си функция rand() возвращает целое значение в диапазоне от 0 до RAND_MAX (для 32-х битных систем это как правило 32767), но на практике почти всегда нужны другие диапазоны, например орёл/решка (0/1), или кубик (от 1 до 6) и т. д. И здесь все быдлокниги(и быдлопреподы) предлагают простую и «изящную» (в своём дебилизме) формулу: «int x = rand() % n», то есть брать остаток от деления результата вызова rand() на нужное тебе максимальное значение. Кривость этого метода заключается в следующем: например мы «кидаем монетку»(x = rand() % 2), сама по себе функция rand() равномерно выдает числа в своём диапазоне (0..32767), но ей абсолютно плевать какой у них остаток от деления на то или иное число, поэтому она вполне может выдавать чётные числа хоть 10, хоть 20, да хоть сто раз подряд (ещё раз: главное что значения распределяются в изначальном диапазоне равномерно) и мы соответственно получаем многократно выпадающую «решку». Православным способом использования библиотечного rand() является получение значения с плавоющей точкой в диапазоне от 0 до 1: «float x = rand() / float(RAND_MAX)», и уже это нормализированное значение приводить к нужному диапазону простыми математическими преобразованиями.
Срачи из примечаний
К.О. замечает, что не везде нужно именно равномерное распределние. Значительно чаще в реальном мире встречается w:нормальное распределение, а виной всему — w:центральная предельная теорема. Кстати, если один кубик дает равномерное распределение, то сумма двух кубиков уже подчиняется нормальному распределению. Но сути корейского рандома это не меняет.
- ЩИТО? Сумма двух кубиков есть дискретная случайная величина, а нормальное распределение непрерывно.
Капитан Очевидность забывает, что нормальное распределение получают как раз из равномерного w:Преобразование_Бокса_—_Мюллера, да и любые другие тоже. Читайте Кнута, блджад.
- K.O. преобразование - метод, нормальное (гауссово) распределение - результат. И получить нормальное распеределение можно в том числе и бросанием пары костей. Так то.
- Любое распределение легко и непринужденно делается из равномерного. А нормальное распределение - ни разу ни сумма 2 бросаний кубиков, а предел n сумм рандома с любым законом распределения (но все n должны быть одинаковыми) при n стремится к бесконечности, это и есть центральная предельная теорема. На практике используется сумма 5-12 случайных величин, распределенных равномерно.
- Пиздец, нашли из-за чего говнами пуляться. Критерии Пирсона и Стюдента дают для 2 кубиков отрицательный результат — довольны? Дял трёх — положительный; так что анонимус №5 абсолютно прав про ЦПТ, и нехер ебать мозги своими формализмами. Что же касается генераторов, то в программировании и по сей день не умер православный X(p):=q*sqrt(-2ln(sqrt(2*pi)*p*q))+a (ну вы поняли, ага?). И забейте на Вики, думайте своими мозгами, пожалуйста.
- Любое распределение легко и непринужденно делается из равномерного. А нормальное распределение - ни разу ни сумма 2 бросаний кубиков, а предел n сумм рандома с любым законом распределения (но все n должны быть одинаковыми) при n стремится к бесконечности, это и есть центральная предельная теорема. На практике используется сумма 5-12 случайных величин, распределенных равномерно.
А причем тут реализация функции rand() на клиентской стороне? Функция на серверной стороне работает как бе. В игровом клиенте только кнопку нажимают, посылается запрос серверу или получаем ответ, положительный или отрицательный.
Вавилонская лотерея
/r/ запилить в статью Коркиса-Боркиса. Он доставляет.
Вынесенный из статьи высер
Рандом есть результат случайного события, случайное событие в свою очередь есть событие, исход которого оценивающее лицо, не может предвидеть. Есть случаи с нежеланием предвидения, но это отдельная статья. Таким образом рандом может для одного быть нормальным явлением, а для другого полноcтью непредсказуемая система... но это уже больше не Рандом, а его восприятие человеком...
В этих ваших компьютерах существует некое подобие рандома, которое ругают псевдо-рандомом. Псевдо-рандом генерится при помощи жуткого матана, и имеет некоторые недостатки:
- Периодичность - через определенное количество случайных событий они начинают повторяться.
- Некоторые значения в пределе более случайны чем другие... допустим единицы меняются от вызова к вызову часто, а сотни редко.
- Неравномерность - например числа до 100 выпадают реже чем числа после 100
Все это от того, что компьютер не бросает кубик, а вычисляет псевдо-случайную величину по определенной умным пиндосом очень точной формуле.
Существуют также другие аналоги рандома:
- Запрос миллисекунд у биоса на момент надбности рандома - в принципе идея хорошая, но если рандом требуется в течении секунды много раз то недостаток очевиден, второе число будет больше первого, я обещаю. (не будет - например, первый запрос произошел в 997мс, а следующий через скажем через 50мс выдаст уже 043)(а вот если вызывать 25 раз в секунду(например один раз в главном цикле), то в 24 случаях будет)
- Внесение изменений в жуткий матан согласно действиям юзера - такой способ слишком быстро пропаливается пытливыми умами и троллится по полной.
В далекие деревянные времена бейсика прописанного в ПЗУ последовательно брались байты самой программы, а командой Randomize устанавливали по миллисекундам таймера с какого места программы начинать. Но это было давно и совсем уже неправда.
Аппаратные рандомы существуют, но засекречены. И для нормальных компьютеров их почему-то не выпускают. Вероятно они скрывают в себе формулу мира. Так-то! Правда, программер-кун подсказывает, что аппаратные рандомы аля Hardware RNG как минимумом Intel-ом включены во все процессоры, начиная с Pentium III - насладиться труевыми рандомными числами теперь может любой желающий. Также некоторые аноны ВНЕЗАПНО научились извлекать случайные числа из АЦП звуковой карты компьютера. Вот так-то!
Капитан Физика срывает покровы с сов.секретных технологий ZOG и утверждает, что сделать близкий к идеалу ГСЧ под силу любому умеющему паять и быдлокодить. Основываются они на неконтролируемых физических процессах, например:
- Поверхность кипящей жидкости
- Траектория электрической искры
- Распад радиоактивных веществ
- Шумы в радиоэфире
- Можно запилить в ссылки в статье - ГСЧ на основе атмосферных шумов. Да счас и запилю, ёпта.
При этом через определенные или тоже случайные промежутки времени (тут сойдет и программный рандом, поскольку его роль вторична) камера снимает кипяток/искру, подсчитывается количество разрядов в счётчике Гейгера или снимается осциллограмма шума. Для пущего разброса данных и приведения в удобный для обработки вид, результат скармливается хэш-функции - и близкий к идеалу рандом, тащемта, готов.
Штабс-капитан Монте-Карло добавляет, что описанным выше способом не пользуются потому, что трудно добиться достаточного количества случайных чисел в единицу времени. Эдак вам придется кипящими чайниками заставить небольшое кукурузное поле, гектаров на надцать. Во взрослой науке (например, КХД на решетках) требуются миллионы случайных значений в секунду. Есть, конечно, лаборатории, где действительно стоит туева хуча датчиков и идут реальные случайные процессы. Но результаты, которые они получают, по сути слабо отличаются от аналогичных, полученных благодаря грамотно сделанному алгоритму рандома. При этом на их получение уходит в десятки раз больше времени. Вот и приходится напрягать мозг, а не строить квадратно-гнездовым методом сотни установок-генераторов случайных чисел.
Иллюстрация
Есть же такой костыль в медиавики, идеально подойдет для иллюстрации. Но это к администрации, куда стучать?
Игры-игрочки
Доставляющий рандом из Великой и Ужасной Цивы: Из-за примитивной системы боя между юнитами, зависящей больше всего от рандома, Танки запросто могут проиграть Колесницам.
Плагиат детектед
Признавайтесь, кто заслал эту статью на конференцию "Молодежь и наука"? [1]
- анон, ты доставил! Innominatus
Алсо
Рандом в Dot'A подобных играх - это распределение, которое неравно. То есть в одной команде игроки слабее, в другой - сильнее.
Windows
Ходят упорные слухи, что это связано с неадекватной работой программного RND Windows.
Авторитетно заявляю - хуета, если исползуется, конечно, CryptGetRandom, т.к. это - ГСЧ, рассчитаный на использовании в криптографии, а там требования к СЧ повыше говноигр.
Тут полежит
X-серия
Что там было по поводу Великого Немецкого Рандома в X-серии? Это когда рандомно генерируемые нпс корабли получают характеристики, которые могут выходить за свой максимальный предел, или как? Начиная с Terran Conflict я не помню таких приколов (что происходило в более ранних версиях я вообще не помню). И хотя встречались крайне странные конструкции и конфигурации, но они вроде все были запланированными вручную. DirtyR(обсуждение)
Ваша статья - невыносимо отвратное унылое говно
Ни слова про генератор псевдослучайных чисел, ни про теорию вероятностей, с которой, собственно говоря, и пошло определение рандома, ни про аппаратный генератор случайных чисел, ни про влияние факторов на тот самый рандом. Зато мы имеем высер про корейский рандом, о котором уже все давно позабыли. Одним словом, статью нужно писать с нуля. Реквестируются авторы, которые разбираются в теории вероятностей и дисперсионном анализе. — Dupa Czerny
- Я в свое время довольно плотно учил тервер в универе, но это было давно и сейчас по большей части забыто из-за ненадобности на практике. Статья же написана тоже очень давно школьниками-игрозадротами, поэтому и в таком печальном состоянии. — F (обсуждение)
- Начал писать. Помощь была бы очень кстати. — Davickh
- Уже вроде неплохо, но ещё не фонтан. Надо написать раздел про дисперсионный анализ, который всё-таки может предскать исход события (выпадение случайного числа), но это адски сложный матан. Его нужно как-то объяснить луркморским языком, не скатываясь при этом в педивикию, что вдвойне усложняет задачу. — Dupa Czerny
- Я почитал немного про анализ, и, ты уверен, что это настолько интересно? Берётся кучу значений, исходя из которого пытаются найти факторы, с этим помогают очень сложные закономерности, а когда найдены факторы, и до формулы недалеко. Как-то так ведь, да? — Davickh
- Уже вроде неплохо, но ещё не фонтан. Надо написать раздел про дисперсионный анализ, который всё-таки может предскать исход события (выпадение случайного числа), но это адски сложный матан. Его нужно как-то объяснить луркморским языком, не скатываясь при этом в педивикию, что вдвойне усложняет задачу. — Dupa Czerny