Почему у нас так странно падают предметы и точатся вещи?
-
70% - это шанс заточки 70кк вещей из 100кк вещей. т.е. ты можешь точить подряд 30кк вещей и все сломать
хоть это и почти невозможно, но тем не менее не противоречиво -
Стоит как нибудь написать топик по вероятности, дропу, дисперсии, шансам, и прочей ерунде, дабы меньше было подобных непониманий. )
З.Ы. В игре используется следующий механизм получения рандомного числа:
рандомное целое от 0 до (q-1) находится, как rand()%q, язык Си, если кто не знает.
Все вычисления целочисленные.Теперь в предположении правильного равномерного распределения:
Если шанс дропа p (13,4% = 0.134), то из N мобов в среднем выпадет n = pN вещей, дисперсия D = sqrt(p(1-p)*N) = sqrt((1-p)n) ~ sqrt(n), последнее приближение при малых шансах дропа p.
Далее, если n достаточно велико, то вы выбьете V = n +- sD вещей, где s - число порядка 1-3. Точно не вспомню, но шанс уложиться в s=1 порядка 68%, шанс уложиться в s=2 95.4%, в s=3 99.7%.Далее, если n - мало, такое часто бывает, когда мы выбиваем карту, для упрощения возьму еще условие малости p (p < 1%): Шанс выбить из N мобов хотя бы одну вещь с малым шансом p равен (1-exp(-p*N)), таким образом убив 10к тар, вы имеете шанс выбить карту 63%, убив 20к тар - шанс карты 86.5%, и наконец 30к - аж 95%
Поскольку рандом на самом деле дает квази-рандомные числа ("почти-случайные"), то возможны отклонения.
Непроверенная информация:
Чаще всего быстрый короткий генератор случайных чисел устроен следующим образом: X(n+1) = (a*X(n)+b)%(2^m), где a и b - специально подобранные автором генератора числа, дающие более-менее близкое к равномерному распределению данное, m - 16 или 32 или 64, вобщем битная размерность чисел, с которыми оперирует считалка. В коде остаток от деления берется автоматически из-за переполнения числа (порылся в инете, делят и на другие числа, не степени двойки). Вроде как это распределение кривое в младших битах, это можно проверить. Скорее всего именно такой генератор используется в игре поскольку он а) стандартный, б) быстрый. Кому интересно - в инете есть константы a и b, можете поискать.
Теперь манул к выбиванию крими карты:
Creamy: Creamy Card 0.03%, Honey 1.5%
Оцениваем число забитых бабочек по меду:
К примеру выбили 60 меда, 60 - это приблизительно 1.5%N, т.е. 4000 бабочек, дисперсия для меда sqrt(60) ~ 8, плюс-минус 8 меда - это около 8/1.5% = 600 бабочек, значит вы завалили 4000+-600 мобов. Щанс выбить из 4к мобов карту крими равен 1-exp(-40000.0003)=70%. Это значит, что на серваке при прочих равных условиях в среднем у тебя и двух твоих друзей выпадет 2 карты и 1 кукиш ) -
всё время забываете что генератор работает не на каждого в отдельности, а на всех и сразу, и почти на каждое событие.
-
@Furcube:
всё время забываете что генератор работает не на каждого в отдельности, а на всех и сразу, и почти на каждое событие.Угу, есть такая неприятность... Стандартный генератор и сам по себе не очень характеристики имеет, а что с ним творится при таком массовом использовании, страшно представить.
Создается впечатление, что чем больше онлайн, тем противнее ведет себя генератор. В крайнем случае, варка/ковка/заточка ведет себя куда ровнее в 4-5 утра, чем в 9-12 вечера :lol:
Хотя, иногда просто диву даюсь... На тестовом сточил 12 баклеров, +6 так и не получился. Потом сточил еще больше десятка чейнов (оружие 2 ур), до +8 не дожил ни один :lol:
И не надо рассказывать про коварную вероятность, так как вероятность "сточить" 12 баклеров по дороге до +6 - 0.03%, а если сюда еще приплюсовать чейны, то в сумме вероятность того, что Спакум случайно позвонит мне в двери окажется куда выше :lol:
ЗЫ: Может начнем агитировать Спакума, что бы он внедрил в эмулятор куда более "устойчивый" генератор?
-
@Max-Damage:
ЗЫ: Может начнем агитировать Спакума, что бы он внедрил в эмулятор куда более "устойчивый" генератор?
Тогда рухнет сервер к чертям. -
Линейный конгруэнтный генератор, используемый в нашем сервере, вполне достаточен для наших целей.
Кроме того использование его на массе игроков значительно повышает его вероятностные характеристики применительно к одному игроку.
-
Но нелепые вероятности выскакивать продолжают).
Правда...когда кто-то впервые увидев тару фрог выбивает из них карту, он об этом баге не форуме не вопит))).
Я лично ходил на тар по часику раз в недельку. Раз на 5-ый выбил через 5 минут ^_^ Потом пошел и выбил буклер за 30 минут и точнул его на +6 с первой попытки, кузнецом конечно. Но поперло так поперло
Надеюсь в этот день никто не сломал 10 фуллплейтов на +5, хех))
Ещё пример: все сетуют о тех же фазах луны и бранчах/час). А никто не задумывался, что просто респ плохой?
Я считал деревья между бранчами, максимальный перерыв 53 дерева и после этого 3 штуки упало почти подряд.
Стабильные 3% имхо=) -
@Spacoom:
Линейный конгруэнтный генератор, используемый в нашем сервере, вполне достаточен для наших целей.Но это ведь самый простой (и самый шустрый) из генераторов, которые могут быть реализованы програмно. Конечно, если вопрос упирается в производительность серверов, то ничего не попишешь.
А случаев странного поведения генератора много, подозрительно много. Взять тот же "двойной дроп", когда из двоих монстров подряд падает один и тот же набор лута (с рарным айтемом).
И откуда ноги растут у таких "странностей", понять тяжело. Весь теорвер пасует, разве что в коде что-то накручено.
-
Двойной дроп - это два слота с одной вещью.
Странных вероятностей не бывает, для любой последовательности выпадений можно подсчитать свою вероятность. Например вероятность, что из тридцатитысячного монстра выпадет карта - 95%. А из первого 0.01%.
-
Спакум как всегда молодец И он отлично ответил на вопрос, почему в то время как мы теряем зрение и деньги безуспешно пытаясь выбить какоую-нибудь карту или заточить какую-нибудь шмотку, он с ноутбуком лазит по горам и живет намного более полноценно, чем мы с вами
Но ответа на некоторые вопросы так и не прозвучало. Потому повторю их:
-
Как объяснить то, что случайные события происходят крайне неравномерно. То очень долго не выбивается что-то даже с большой вероятностью, а то вподряд выпадает что-то с очень маленькой.
-
Чем объясняются сложности заточки даже с довольно большим процентом успеха. Мои расчет касаемо конкретного примера и выдающегося шанса 0.16% никто почему-то не попытался опровергнуть. Меж тем такое везение меня окружает повсюду. Уверен, что не меня одного.
Отступление. Я знаю, что есть такой психологисечкий аспект, когда неудачи считаются чем-то из ряда вон выходящим, а удачи само собой разумеющимся. Я достаточно много провел времени в этой игре, чтоб заметить определенные закономерности в случайном выпадении и т.п.
-
Чем можно объяснить то, что ночью все работает несколько иначе (т.е. когда нагрузка на сервер уменшается)? Это замечают многие, а не только я.
-
Почему по свидетельству людей, которым я вполне склонен доверять, какие-то предметы раньше выпадали намного чаще (например, композиты и т.п.)?
-
Почему раньше те же композиты всегда можно было найти в продаже по цене 3кк, а сейчас их нереально найти ни по какой цене?
Если предположить, что Спакум и сотоварищи, не мутили ничего специального (а уж при таких познаниях в точных науках, если судить по репликам типа той, что выше, намутить что-нибудь - раз плюнуть), то я сам попробую ответить на первые 3 вопроса. Два последних, видимо, придется оставить на совести администрации, которая не слишком охотно делится секретами функционирования сервера.
Итак, немного порывшись в интернете, я нашел не только расшифровку сокроментальной фразы о конгруэнтном генераторе, но и кое-что любопытное, о чем я напишу ниже.
Для начала сделаю то, чем не удосужил себя великий. Вот формула этого генератора, кому интересно:
Xn = (Xn-1 * A + B) mod M;
где
Xn - получаемое число.
Xn-1 - предыдущее число.
A - множитель.
B - приращение.
M - модуль.Начальное число есть X0. которое ты укажешь сам.
вот подходящие константы:
A - 4096
B - 150889
M - 714025получаемое значение 32 бита.
Взято отсюда: <!-- m --><a class="postlink" href="http://www.gamedev.ru/forum/?action=showtopic&group=0&topic=4634">http://www.gamedev.ru/forum/?action=sho ... topic=4634</a><!-- m -->
или более подробно тут: <!-- m --><a class="postlink" href="http://ru.wikipedia.org/wiki/Линейный_конгруэнтный_метод">http://ru.wikipedia.org/wiki/Л�% ... 0%BE%D0%B4</a><!-- m -->Данный алгоритм имеет кучу недостатков, которые кратко перечисленны в другом источнике (<!-- m --><a class="postlink" href="http://ru.wikipedia.org/wiki/">http://ru.wikipedia.org/wiki/</a><!-- m -->):
Любой ГПСЧ с ограниченными ресурсами рано или поздно зацикливается. Длина циклов ГПСЧ зависит от самого генератора и в среднем составляет около 2(n/2) где n это размер внутреннего состояния в битах, хотя линейные-конгруэнтные генераторы и РЛСО (LFSR) генераторы обладают максимальными циклами порядка 2n. Если ГПСЧ может сходиться к слишком коротким циклам, такой ГПСЧ становится предсказуемым и является непригодным.
Большинство простых арифметических генераторов хотя и обладают большой скоростью, но страдают от многих серьёзных недостатков:
- Слишком короткий период/периоды
- Последовательные значения не являются независимыми
- Некоторые биты «менее случайны», чем другие
- Неравномерное одномерное распределение
- Обратимость
Думаю, что кмментариев тут даже не требуется, но попробую пояснить на практике. 3 и 5-ый пункты не осбо интересны, хотя по идее обратимость могла бы быть нам на руку А вот на остальных остановлюсь поподробне.
Собственно, наличие периодов (пункт 1) уже не должно радовать и я поясню почему. Если для каких-то конкретных настроек генератора мы смоделируем последовательность выбивания какой-нибудь редкой вещи, то может так получится, что за период, который, кстати, не больше М, эта редкая вещь выпадает всего 1 раз, а в последовательности 20000 чисел (следствие неравномерности распределения, пункт 4). Если предположить, что мы используем генератор, только для одного человека и только для выбивания предметов (т.е. вся наша последовательность у нас в руках, а не разбросана по кучи участников и событий), то получится, что убив 20000 мобов пы стабильно получим 1 карту. Не больше, и не меньше! 40000 - 2 карты. И т.д. Все это будет происходить именно так, а не иначе вследствии того, что значения не являются независимымми (пункт 4) Т.е. от нашей удачи ровным счетом ничего не зависит. Все зависит лишь от того, в каком месте последовательности мы в данный момент очутились. Если бы уметь это предсказывать, то можно ыбло бы приходить в нужное место, убивать нужного моба и получать нужную карту или еще чего-то.
Но у нас играет не один человек, генератор используется не только один раз при подсчете выпадения мегарара, а очень и очень часто. Но это даже хуже, так как если вы пробегаете всю последовательность, то у вас шанс выбить карту был бы хотя бы 1 из 20000. Причем это случилось бы наверняка рано или поздно и только когда именно не известно заранее. Но может случится вот что. Вы уже добиваете моба и вам как раз должно выпасть это самое заветное число, которое даст карту. Но в это время кто-то другой решил телепортнутся (а этот процесс так же "абслолютно случайный") и ваше счастливое число уплыло на следующий цикл. Т.о. то как выпадают всякие редкие вещи полностью зависит от того, что в данный момент делаете вы, другие игроки, мобы и т.п. Но только не от вашей удачи или неудачи.
Так как вызовов случайных чисел очень много, то эти счастливые числа последовательности, дающие редкие вещи, раз за разом могут пролетать мимо вас. А так же могут именно вам раз за разом попадаться
Потому, когда нагрузка на сервер снижается, то последовательность получаемых случайных чисел становится как бы более равномерной для конкретного игрока, так как цикл начинает крутится с меньшей скоростью.
-
-
Вот еще один пример из котрого видно, что в стандартном ANSI-C цикл имеет максимальную длину всего лишь 32768:
<!-- m --><a class="postlink" href="http://algolist.manual.ru/maths/generator/standard.php">http://algolist.manual.ru/maths/generator/standard.php</a><!-- m -->
-
вот блин математики
если вероятность выпадения вещи с монстра 0.1 % это вовсе не значит что все попытки запоинаются и с тысячного монстра выпадет вещь.
это значит при убивании милиона монстров выпадет количество вещей близкое к 1000
а если кто-то убил 2000 и возмущается что не выпало 2 штуки, то он нуб и в математике и в РО ^_^и не надо тут говорить что неправильный генератор случайных чисел. при такой нагрузке на него, он выдаёт действительно СЛУЧАЙНЫЕ результаты а не предсказуемые, как многим бы хотелось
то есть даже если вы делаете больше попыток чем надо В СРЕДНЕМ то всё равно есть вероятность (и немалая) что ничего не получится.
среднее оно на то и среднее что у кого-то получается с 1 попытки а у кого-то с 20ну и что же делать тем кто хочет гарантированного результата?
во первых и переточенную вещь и рар можно купить
во вторых полагаться на закон больших чисел и делать много попыток.
при заточке 1 ножика вы во власти судьбы, при заточке 100 штук - есть хорошие шансы что количество заточившихся до нужного уровня будет в пределах погрешности. -
Но ответа на некоторые вопросы так и не прозвучало. Потому повторю их:
-
Как объяснить то, что случайные события происходят крайне неравномерно. То очень долго не выбивается что-то даже с большой вероятностью, а то вподряд выпадает что-то с очень маленькой.
-
Чем объясняются сложности заточки даже с довольно большим процентом успеха. Мои расчет касаемо конкретного примера и выдающегося шанса 0.16% никто почему-то не попытался опровергнуть. Меж тем такое везение меня окружает повсюду. Уверен, что не меня одного.
пошарь в инете на тему учебника по теории вероятности и почитай, там есть все ответы на твои вопросы :twisted:
ещё раз, с чего ты взял что события должны происходить равномерно?
это СЛУЧАЙНЫЕ события. вероятность всяческих редких событий типа выбивания 2 карт за 1000 попыток можно посчитать и она не такая уж маленькая -
-
ieshua, пример, который ты привел про одного игрока, получающего всю последовательность - это конечно "модель победы абсолютно упругого сферического коня в вакууме"; поскольку функция rand() используюется невероятно часто в игре (не только дроп и телепорт, но и атака, монстры и еще куча всего) то та под-последовательность, которая достается тебе на дроп карты совсем уж не предсказуема. В случае большого числа пользователей на период этого генератора можно забить.
Ну и конечно же тут нет щастливчиков, которые точат вещи с первой попытки на +7+8.
Про мизерный шанс именно той комбинации заточки (вроде 6 вещей на +5) - это уж совсем не в кассу. В теорвере шанс до испытания и после - две большие разницы. Если взять случайные целые числа от 1 до 10^6, вытащить число 12345, а потом кричать "Как такое случилось, ведь шанс вытащить это плохое число был 0.0001% !!!" - то это тот же крик про заточку.
-
Товарищи, закон больших чисел никто не отменял. Так что карта с тысячного моба это идеал, к которому стремится дроп.
Гадайте на кофейной гуще, чтоб выбрать момент для нажатия кнопки для заточки с +5 на +6 ;)) Бейте в шаманский бубен, пляшите ритуальные пляски, сгоняйте электроны в кучу. Может и поможет -
@Sasha-san:
вот блин математикиЛюди, не надо нас так яростно теорверу учить, тут же не школьники собрались.
По пунктам. Посчитайте вероятность того, что карта выпадет из 2 монстров подряд. История о таком должна быть одна, ну две максимум - за недолгую жизнь МОТРа... И одни должны быть легендами сервера.
У меня такого не было, но 2 раза я видел своими глазами, как это происходит. И историй таких слышал я немало - не меньше десятка.
А насчет ранвномерности распределения - если кто-то сможет в реальной жизни 10 раз подкинуть монетку, и все 10 раз выбить решку - я пожму его мужественную руку.
@Grif:
В теорвере шанс до испытания и после - две большие разницы.Угу, а с каждой рожденной девочкой шанс родить мальчика все больше и больше У независимых событий шанс стабильный, было испытание или нет.
@Grif:
Если взять случайные целые числа от 1 до 10^6, вытащить число 12345, а потом кричать "Как такое случилось, ведь шанс вытащить это плохое число был 0.0001% !!!" - то это тот же крик про заточку.Ты не путай, "плохое число" было известно наперед, и ВСЕ остальные были "хорошими" - твоей же терминологией.
Ну это все так, уже просто дискуссии для фана. Ясно, что ничего меняться не будет.
А дикая неравномерность генератора имеет место, и это видно буквально во всем - в работе флай вингов, в "групповом" выскакивании критов, в двойных-тройных ударах от монстров от которых 95% уворота...
Хотя, кто знает - возможно накал страстей игроков тому причиной... И никакие апгрейды генератора тут не помогут
-
Max Damage, "плохое известно наперед" - это как же ? Плохо - когда из 6 щапок сломалось 3 и более ? А хорошо - это когда из 6 заточились 5 или 6 ?
И из 6 шапок заточить только одну шанс вовсе не 0.15%, а в 6 раз больше, почти 1%. Можно подойти к вопросу заточки с другой стороны, 6 шапок, шанс успеха 0.7, среднее 60.7 = 4.2, дисперсия 60.7*0.3=1.26, тогда в 3-сигма вкладываются заточки от 0.83 предметов (считай от 1) до 7.6 (их всего 6, значит до 6). 3-сигма самое простое и действенное правило, и за его рамки случай не выходит, и кричать не надо, что рандом кривой.А про девочек и мальчиков - хоть шансы не зависят ни от чего, но попробуй из 100 родов вытащить 95 мальчиков
Про повторные каты, ты для начала посчитай, сколько карт выбивают, а потом прикинь, что на каждые 3.5к карт приходится 1 повторная. А для всяких порингов-сопор, там и того меньшее число карт на 1 двойную.
Шанс, что из N мобов выпадет одна и только одна карта(шанс p) равен aexp(-a), a=pN, шанс, что из тех же N мобов выпадет 2 подряд равен paexp(-2a), теперь в среднем a=1, и отношение шансов одинарные:двойные = 1/(p*e). -
Max Damage, По поводу карт могу сказать одно: я на прошлой неделе от нечего делать провоукнул 4 поринга и разорвал их брандишом.. получил 4 поринг карты я на полном серьезе говорю. А уж то, что винги кидают в три точки по кругу (и эти круги нарезаются раза по 4-5) так ето ни для кого не секрет, я думаю...
И еще, люди, не путайте пожалуйста математическую вероятность и машинную. Те "случайности", которые выдает программа, они совсем не те, что дает математический идеализированный рассчет... Хотя, при том количестве запросов к случайному числу, которые происходят при онлайне в 3,5к человек, машина должна выдавать воистинну случайное (!) число... а на деле выходит не так
-
Последняя фраза в тему. Си не юзал, но паскалевский генератор случайных чисел должен работать по тому же принципу Суть в следующем. Слабое место в вычислениях, это получение случайного числа - Random(x) Ведь если бы псевдослучайное число генерировалось удовлетворительно, не нужны были бы никакие длинные формулы, они призваны лишь скрыть недостатки генерации псевдослучайного числа. На деле, получаемый ряд чисел во многом зависит от изначальной инициации генератора(поэтому она должна быть только одна!) частоты обращения к генератору и скорости компьютера. То есть в вычислениях присутствуют данные снимаемые с системных часов или их эмулятора. Значит, если на быстром компе часто обращаться к генератору, то очень велика вероятность получения ряда одинаковых чисел. И тут нужно угадать, какой ряд наиболее вероятен Так что удача присутствует, кто-то может настроиться на нужную волну интуитивно и бомбить в нужное время в нужном месте. Наверно, разум тут только мешает.
-
Grif, сразу видно теор.вер. почти родной язык%)