Обсуждение участника:Davickh/Рандом

Материал из Lurkmore
Перейти к навигации Перейти к поиску
Нормального распределения там и не надо. Надо распределение Бернулли. Но его тоже нет. C любовью, ваш Капитан Очевидность
эээ, вроде бы от рандомизаторов обычно требуется равномерное распределение с возможно большей независимостью последовательных значений. Это я чего-то не понимаю или К.О. здесь фейковый?
Просто равномерное распределение — штука абстрактная ибо оно непрерывное, так что на самом деле используется дискретное биномиальное. А Бернулли это частный случай биномиального. Впрочем, как человек имеющий к ММОРПГ непосредственное отношение могу сказать, что игроки всегда будут обвинять рандом в кривизне, даже если он нормальный. А «как можно большая независимость последовательных значений» это ересь, ибо все испытания должны быть независимыми, иначе это уже не рандом. Хм, может это в обсуждение сунуть?
Игроки всегда во всем обвиняют рандом. Многие считают, что "раз столько раз сфейлилось, то щас уж точно проканает, там же ХХ% шанс", забывая, что рандом никому и ничего не должен, а следующий результат какбэ не зависит от предыдущего. Алсо, любой школьник может написать на любом доступном ему языке код, выдающий в цикле овер 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 (ну вы поняли, ага?). И забейте на Вики, думайте своими мозгами, пожалуйста.

А причем тут реализация функции 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