I
Infernale
Всем привет! Хочу рассказать вам, как работает, так называемый "корейский" рандом.
На тему рандома было придумано сотни шуток, и ещё больше способов обмануть его (по одному на каждого игрока). Я тоже перепробовал множество тактик, начиная от заточки "елочкой", заканчивая беганьем вокруг статуи Шилен. Но некоторые вопросы так и оставались без ответа:
В коде определение успешности заточки выглядит так:
public static boolean chance(final double chance) {
return _rnd.nextDouble() <= chance / 100.;
}
В двух словах, генератор псевдослучайных чисел (далее ГПСЧ) выдает число в промежутке [0..1], и если результат меньше шанса на заточку (в нашем случае 0.7), то энчант успешен, иначе фейл.
Давайте посмотрим поближе на наш ГПСЧ. В нашем случае используется реализация Вихря Менсенна. Этот алгоритм удачен и популярен, так как:
Первым делом я решил проверить равномерность распределения получаемых значений. Для большей наглядности для получаемых значений был задан диапазон [0, 99]. В результате одного миллиарда итераций была построена гистограмма
На оси Y указано количество попаданий в промежуток [0, 1), [1, 2), [2, 3) и т. д. Как видно, среднее значение 10кк и максимальное отклонение от среднего значения 0.07%. Это показывает, что ГПСЧ выдает равномерное распределение. В результате можно сделать первый вывод:
Шанс заточки, установленный админами, будет соответствовать реальности.
Далее мною эмулировался процесс заточки оружия с +5 до +16 при заданном шансе 70%. Эмулировались два способа заточки:
Кстати, стоит отметить, что первый вариант заточки в игре практически невозможно повторить, так как один и тот же инстанс ГПСЧ используется для вычисления тысяч других случайных событий в игре. То есть чистую последовательность в игре вы вряд ли увидите.
Отвечая на вопросы из начала статьи:
P.s. Интересный факт, авторы ГПСЧ Макото Мацумото и Такудзи Нисимура японцы, а вся слава достается корейцам=)
На тему рандома было придумано сотни шуток, и ещё больше способов обмануть его (по одному на каждого игрока). Я тоже перепробовал множество тактик, начиная от заточки "елочкой", заканчивая беганьем вокруг статуи Шилен. Но некоторые вопросы так и оставались без ответа:
- Возможно ли вычислить последовательность и предугадать результат последующей заточки?
- Как выгоднее точить, один предмет по максимуму, или несколько по очереди?
- Зависит ли шанс заточки от кармы/времени суток
В коде определение успешности заточки выглядит так:
public static boolean chance(final double chance) {
return _rnd.nextDouble() <= chance / 100.;
}
В двух словах, генератор псевдослучайных чисел (далее ГПСЧ) выдает число в промежутке [0..1], и если результат меньше шанса на заточку (в нашем случае 0.7), то энчант успешен, иначе фейл.
Давайте посмотрим поближе на наш ГПСЧ. В нашем случае используется реализация Вихря Менсенна. Этот алгоритм удачен и популярен, так как:
- имеет огромный период
- новый результат практически не зависит от предыдущего
Первым делом я решил проверить равномерность распределения получаемых значений. Для большей наглядности для получаемых значений был задан диапазон [0, 99]. В результате одного миллиарда итераций была построена гистограмма
На оси Y указано количество попаданий в промежуток [0, 1), [1, 2), [2, 3) и т. д. Как видно, среднее значение 10кк и максимальное отклонение от среднего значения 0.07%. Это показывает, что ГПСЧ выдает равномерное распределение. В результате можно сделать первый вывод:
Шанс заточки, установленный админами, будет соответствовать реальности.
Далее мною эмулировался процесс заточки оружия с +5 до +16 при заданном шансе 70%. Эмулировались два способа заточки:
- Одно оружие точится до упора
- Последовательно точится n пушек по +1 заточке. При фейле добавляется новая пушка на +5 вместо сломанной.
Кстати, стоит отметить, что первый вариант заточки в игре практически невозможно повторить, так как один и тот же инстанс ГПСЧ используется для вычисления тысяч других случайных событий в игре. То есть чистую последовательность в игре вы вряд ли увидите.
Отвечая на вопросы из начала статьи:
- Вычислить последовательность? Нет, период ГПСЧ 219937 − 1. Даже не задумывайтесь о том, сколько цифр в этом числе и когда он повторится.
- Как же точить? Успешность заточки не зависит от "тактики".
- А как же фаза луны? Сторонние факторы не влияют на успешность заточки.
P.s. Интересный факт, авторы ГПСЧ Макото Мацумото и Такудзи Нисимура японцы, а вся слава достается корейцам=)
