Что такое bless rng
Связанные словари
Blessrng
Происхождение: RNG сокращение от “Random Number Generator” или Генератор Случайных Чисел.
Впрочем, прежде чем вы продолжите, я бы хотел порекомендовать вам ещё парочку любопытных новостей по тематике интернет сленга. Например, что значит Бгг, как понять слово Пофиксить, что такое Get Rekt, что означает КД в ВК у девушек и т. п.
Итак, продолжим, что значит BlessRNG? Это сокращение состоит из нескольких слов, «Blessing» переводиться, как, «благословение», а «Random Number Generator» «генератор случайных чисел».
Blessing это хороший и совершенный дар от Бога. Это происходит, когда вы получаете то, что не заслуживаете. Blessing также может быть подарком, полученным в нужный момент в вашей жизни. » Favor from Heaven» (Благоволение от Небес). Чтобы дать кому-то ваше благословение, вы должны дать им разрешение на выполнение своего плана. Парень подойдет к родителям своей возлюбленной, чтобы они дали своё благословение, для женитьбы.
To be a blessing когда Вы выручаете кого-то такими способами, которыми они не могут позволить себе возместить Вам потери.
I was 200 dollars short on my rent this month and a financial blessing came in the mail unsuspectingly. I received her parents blessing. (Я потерял 200 долларов на мою аренду в этом месяце, и финансовое благословение пришло по почте ничего не подозревая. Я получил благословение родителей).
He was such a blessing; he helped me set up my new computer. (Он оказался для меня настоящим благословением, он помог мне настроить мой новый компьютер).
Прочтя эту небольшую статью, вы узнали, что значит BlessRNG, и больше не попадёте впросак, если ещё раз наткнётесь на это словечко.
BlessRNG или проверяем ГСЧ на честность
В геймдеве часто нужно что-нибудь завязать на рандоме: у Unity для этого есть свой Random, а параллельно с ним существует System.Random. Когда-то давно на одном из проектов сложилось впечатление, что оба могут работать по-разному (хотя должны иметь равномерное распределение).
Тогда в детали углубляться не стали — хватило того, что переход на System.Random исправил все проблемы. Сейчас решили разобраться подробнее и провести небольшое исследование: насколько «предвзяты» или предсказуемы ГСЧ, и какой выбрать. Тем более, я не раз слышал противоречивые мнения об их «честности» — попробуем разобраться, как реальные результаты соотносятся с заявленными.
Краткий ликбез или ГСЧ это на самом деле ГПСЧ
Если вы уже знакомы с генераторами случайных чисел, то можете сразу переходить к разделу «Тестирование».
Случайные числа (СЧ) — это последовательность чисел, генерируемая с помощью некоторого случайного (хаотического) процесса, источника энтропии. То есть это такая последовательность, элементы которой не связаны между собой каким-либо математическим законом — у них отсутствует причинно-следственная связь.
То, что создает СЧ называется генератором случайных чисел (ГСЧ). Казалось бы, все элементарно, но если от теории перейти к практике, то на самом деле реализовать программный алгоритм генерации такой последовательности не так просто.
Причина кроется в отсутствии той самой хаотичности в современной потребительской электронике. Без нее случайные числа перестают быть случайными, а их генератор превращается в обычную функцию от заведомо определенных аргументов. Для целого ряда специальностей в IT-сфере это серьезная проблема (например, для криптографии), для остальных же есть вполне допустимое решение.
Нужно написать алгоритм, который возвращал бы пусть и не истинно случайные числа, но максимально приближенные к ним — так называемые, псевдослучайные числа (ПСЧ). Алгоритм в этом случае называется генератором псевдослучайных чисел (ГПСЧ).
Есть несколько вариантов создания ГПСЧ, но для всех будет актуально следующее:
ГПСЧ является полностью детерминированным, поэтому заданный при инициализации seed однозначно определяет всю будущую последовательность чисел. Это значит, что отдельно взятый ГПСЧ, проинициализированный одинаковым seed (в разное время, в разных программах, на разных устройствах) будет генерировать одну и ту же последовательность.
Еще нужно знать характеризующее ГПСЧ распределение вероятностей — какие числа он будет генерировать и с какой вероятностью. Чаще всего это либо нормальное распределение (normal distribution), либо равномерное распределение (uniform distribution).
Нормальное распределение (слева) и равномерное распределение (справа)
Допустим, у нас есть честная игральная кость с 24 гранями. Если ее подбросить, то вероятность выпадения единицы будет равна 1/24 (как и вероятность выпадения любого другого числа). Если совершить множество бросков и записывать результаты, то можно заметить, что все грани выпадают примерно с одной и той же частотой. По сути эту игральную кость можно считать ГСЧ с равномерным распределением.
А если подбрасывать сразу 10 таких костей и считать общую сумму очков? Будет ли для неё сохраняться равномерность? Нет. Чаще всего сумма будет близка к 125 очкам, то есть к некоторому среднему значению. И как следствие — еще до совершения броска можно примерно оценить будущий результат.
Причина в том, что для получения средней суммы очков существует наибольшее количество комбинаций. Чем дальше от нее, тем меньше комбинаций — и соответственно, меньше вероятность выпадения. Если эти данные визуализировать, то они будут отдаленно напоминать форму колокола. Поэтому с некоторой натяжкой систему из 10 костей можно назвать ГСЧ с нормальным распределением.
Еще один пример, только уже в плоскости — стрельба по мишени. Стрелком будет ГСЧ, генерирующий пару чисел (x, y), которая отображается на графике.
Согласитесь, что вариант слева более приближен к реальной жизни — это ГСЧ с нормальным распределением. Но если нужно разбросать звезды на темном небе, то лучше подойдет правый вариант, полученный с помощью ГСЧ с равномерным распределением. В общем, выбирайте генератор в зависимости от поставленной задачи.
Теперь поговорим про энтропию последовательности ПСЧ. Например, есть последовательность, которая начинается так:
89, 93, 33, 32, 82, 21, 4, 42, 11, 8, 60, 95, 53, 30, 42, 19, 34, 35, 62, 23, 44, 38, 74, 36, 52, 18, 58, 79, 65, 45, 99, 90, 82, 20, 41, 13, 88, 76, 82, 24, 5, 54, 72, 19, 80, 2, 74, 36, 71, 9, …
Насколько эти числа случайны на первый взгляд? Начнем с проверки распределения.
Выглядит как близкое к равномерному, но если считывать последовательность по два числа и интерпретировать их как координаты на плоскости, то получится это:
Становятся отчетливо видны паттерны. А раз данные в последовательности определенным образом упорядочены (то есть обладают низкой энтропией), то это может порождать ту самую «предвзятость». Как минимум, такой ГПСЧ не очень то подходит для генерации координат на плоскости.
42, 72, 17, 0, 30, 0, 15, 9, 47, 19, 35, 86, 40, 54, 97, 42, 69, 19, 20, 88, 4, 3, 67, 27, 42, 56, 17, 14, 20, 40, 80, 97, 1, 31, 69, 13, 88, 89, 76, 9, 4, 85, 17, 88, 70, 10, 42, 98, 96, 53, …
Вроде бы тут все хорошо даже на плоскости:
Посмотрим в объеме (считываем по три числа):
И снова паттерны. Построить визуализацию в четырех измерениях уже не получится. Но паттерны могут существовать и на этой размерности, и на больших.
В той же криптографии, где к ГПСЧ предъявляются самые жесткие требования, подобная ситуация категорически недопустима. Поэтому для оценки их качества разработаны специальные алгоритмы, касаться которых мы сейчас не будем. Тема обширная и тянет на отдельную статью.
Тестирование
Если мы чего-то не знаем наверняка, то как с этим работать? Стоит ли переходить дорогу, если ты не знаешь какой сигнал светофора это разрешает? Последствия могут быть разные.
То же самое касается пресловутого рандома в Unity. Хорошо, если документация раскрывает необходимые подробности, но упомянутая в начале статьи история произошла как раз из-за отсутствия желанной конкретики.
А не зная, как работает инструмент, не сможешь его корректно применить. В общем, настало время проверить и провести эксперимент, чтобы окончательно убедиться хотя бы на счет распределения.
Решение было простым и эффективным — собрать статистику, получить объективные данные и посмотреть на результаты.
Предмет исследования
В Unity существует несколько способов генерации случайных чисел — мы протестировали пять.
По умолчанию за ожидаемые результаты брали те, что указаны в документации.
Методика
Мы написали небольшое приложение, которое генерировало последовательности случайных чисел каждым из представленных способов и сохраняло результаты для дальнейшей обработки.
Длина каждой последовательности — 100 000 чисел.
Диапазон значений случайных чисел — [0, 100).
Данные собирали с нескольких целевых платформ:
Реализация
У нас есть несколько разных способов генерации случайных чисел. Для каждого из них напишем отдельный класс-обертку, который должен предоставить:
Реализация System.Random.Next()
Этот метод позволяет задать диапазон значений, но он возвращает целые числа (integer), а нужны float. Можно просто интерпретировать integer как float, а можно расширить диапазон значений на несколько порядков, компенсируя их при каждой генерации СЧ. Получится что-то вроде fixed-point с заданной порядком точностью. Будем использовать этот вариант, так как он более близок к настоящему float значению.
Реализация System.Random.NextDouble()
Здесь фиксированный диапазон значений [0; 1). Чтобы спроецировать его на заданный в конструкторе используем простую арифметику: X * (max − min) + min.
Реализация UnityEngine.Random.Range()
Этот метод статического класса UnityEngine.Random позволяет задать диапазон значений и возвращает СЧ типа float. Никаких дополнительных преобразований делать не придется.
Реализация UnityEngine.Random.value
Свойство value статического класса UnityEngine.Random возвращает СЧ типа float из фиксированного диапазона значений [0; 1). Спроецируем его на заданный диапазон тем же способом, что и при реализации System.Random.NextDouble().
Реализация Unity.Mathematics.Random.NextFloat()
Метод NextFloat() класса Unity.Mathematics.Random возвращает СЧ типа float и позволяет задать диапазон значений. Нюанс лишь в том, что каждый экземпляр Unity.Mathematics.Random придется инициализировать некоторым seed — так мы избежим генерации повторяющихся последовательностей.
Реализация MainController
Несколько реализаций IRandomGenerator готовы. Далее нужно сгенерировать последовательности и сохранить результирующий датасет для обработки. Для этого создадим в Unity сцену и небольшой скрипт MainController, который будет выполнять всю необходимую работу и попутно отвечать за взаимодействие с UI.
Зададим размер датасета и диапазон значений СЧ, а также обзаведемся методом, который возвращает массив настроенных и готовых к работе генераторов.
А вот теперь формируем датасет. В данном случае генерация данных будет совмещена с записью результатов в текстовый стрим (в формате csv). Для хранения значений каждого IRandomGenerator отводится своя отдельная колонка, а первая строка содержит Name генератора.
Осталось вызвать метод GenerateCsvDataSet и сохранить результат в файл, либо сразу передать данные по сети с конечного устройства на принимающий сервер.
Исходники проекта лежат на GitLab.
Результаты
Чуда не произошло. Что ожидали, то и получили — во всех случаях равномерное распределение без намека на заговоры. Отдельные графики по платформам прикладывать не вижу смысла — они все показывают примерно одинаковые результаты.
Действительность такова:
Визуализация последовательностей на плоскости от всех пяти способов генерации:
И визуализация в 3D. Оставлю только результат System.Random.Next(), чтобы не плодить кучу одинакового контента.
Стримера BlessRNG забанили на Twitch и удалили его смайл после обвинений в жестоком обращении с девушкой
Администрация стрим-сервиса Twitch заблокировала канал Брэда BlessRNG Джолли, которого бывшая девушка обвинила в жестоком обращении и преследовании. После этого инцидента с платформы пропал фирменный смайл стримера — BlessRNG.
О ситуации с Джолли и его бывшей девушкой стало известно из анонимного письма — его прислали на почту компании Kanga, в которой работает стример. В письме было описано, как Джолли оказывал психологическое давление и преследовал девушку, которая не хотела с ним общаться. Вскоре после этого руководство Kanga уволило Джолли с формулировкой, что действия стримера противоречат культуре компании. Когда скандал стал достоянием общественности, администрация Twitch забанила канал BlessRNG и удалила его фирменный смайл с платформы. Впоследствии Джолли написал открытое письмо к сообществу, в котором признал ошибки и извинился за свое поведение. В тексте он также попытался переложить часть вины на своего партнера, за что его еще больше раскритиковали.
Будет ли канал BlessRNG разблокирован — неизвестно. Ранее администрация Twitch заявила, что очень серьезно относится к сообщениям о сексуальных домогательствах со стороны стримеров, поэтому будет банить их каналы пожизненно.
@A4Techies Научите в тачкиса блесс рнг.
12 Feb 2018 в 15:23
12 Feb 2018 в 15:23 #1
Собсно,как играть этим героем?
Как качаться,куда идти?
Какие фишки нужно знать?
как правильно минировать?
где минировать?
Как убивать красными минками?
13 Feb 2018 в 01:33 #3
13 Feb 2018 в 01:34 #4
13 Feb 2018 в 01:37 #5
Собсно,как играть этим героем?
в начале игры забанить его
и пикнуть нормального героя
13 Feb 2018 в 01:39 #6
Тоже любишь продолговатые твёрдые предметы в заднем проходе? Ну, тогда ты по адресу, дружок.
13 Feb 2018 в 01:40 #7
в начале игры забанить его
и пикнуть нормального героя
Например пуджа?
13 Feb 2018 в 01:40 #8
Например пуджа?
вы мыслите в правильном направлении, сер!
13 Feb 2018 в 01:43 #9
красные мины работают только против нубасов или героев с 99999 замедленной атакой типа боника, лины, траксы, и то люди на реакции будут ломать их на любом герое
ну или когда ставишь их после прыжка
или с пуджомтускомземелейктотамещёсфорсдмувментом
в остальном юзлесс герой для садо- и просто мазохистов (и тех и тех одновременно)
13 Feb 2018 в 01:44 #10
Собсно,как играть этим героем?
Как качаться,куда идти?
Какие фишки нужно знать?
как правильно минировать?
где минировать?
Как убивать красными минками?
Этим героем лучше не играть, хотя он сам по себе не играет
Без разницы куда идти и что качать, он юзелесс на любом лайне, хз как можно не разбить мину, когда наступил
Главная фишка течиса это руин игры 9 игрокам
На вопрос про минирование ты не тот форум выбрал
Шутканул бы, но не хочу отлететь
Если против тебя не 5 человек с 47 хромосомами то никак
глагол ↓
Мои примеры
Словосочетания
Примеры
May God bless you.
Пусть Бог благословит вас.
She is blessed with musical talent.
Она одарена музыкальными способностями.
The priest blessed the marriage.
Священник благословил этот брачный союз.
The Lord bless you and keep you.
Господь благословляет и хранит вас.
Good night and God bless.
Доброй ночи, и да благословит вас Бог.
Then the priest blesses the bread and wine.
Затем священник благословляет хлеб и вино.
The water for the baptism has been blessed.
Вода для крещения была освящена.
I have never been a rich man, but I have always been blessed with good health.
Я никогда не был богат, но зато у меня всегда было отличное здоровье.
I’ll be blessed if I can see your reasoning.
Будь я проклят, если пойму, к чему ты ведёшь.
Bless me, Father, for I have sinned.
Благослови меня, отче, ибо я согрешил.
May God bless you with a long life!
Да дарует тебе Господь долгую жизнь!
God bless this union!
Благослови, господи, этот союз!
I haven’t a penny to bless myself with.
У меня нет ни гроша за душой.
The dying man blessed his son.
Умирающий благословил сына.
Примеры, ожидающие перевода
‘Jess made this card for me.’ ‘Bless!’
He’s always willing to help. Bless him!
The priest blessed the baby I held in my arms.