- Регистрация
- 09.10.2015
- Сообщения
- 3 916
- Благодарностей
- 3 867
- Баллы
- 113
Интро
В множестве своих шаблонов я использую 4 вида Генерации Случайных Значений (ГСЗ; ГСЧ - чисел):- Кубик Random -> Число
- Кубик Обработка текста -> Spintax
- C# код с инициализацией Random с seed (сидом)
- C# код с инициализацией Random без сида
Наконец-то у меня выбрался свободный вечерок, когда я захотел отдохнуть от повседневной работы и разобраться с этим рандомом.
Но всё вышло не так, как я думал. Я перелопатил множество источников, испробовал кучу вариантов генерации случайных чисел, научил зенку строить графики (ну почти) и совсем запутался. Поэтому и решил, что лучше выложу свои мысли на форуме, авось придёт кто-то из разработчиков или форумчан, кто более подкован в теории вероятности (я что смог с давних времён универа, то сделал) и объяснит как это должно работать. И правильно ли в ZennoPoster реализовано.
Испробованные варианты
Я немного "упоролся" и попытался сделать генерацию максимально доступного мне количества вариантов - вышло аж 18. Полный список:- action_random - кубик Random [0, 10)
- action_random_cycle - кубик Random [0, 10), но он запускается в цикле внутри самого шаблона 5000 раз
- action_spintax - кубик Spintax {a|b|c|d|e|f|g|x|y|z}
- action_spintax_cycle - кубик Spintax {a|b|c|d|e|f|g|x|y|z}, но он запускается в цикле внутри самого шаблона 5000 раз
- csharp_global_random - Global.Classes.rnd.Next(0, 10)
- csharp_Mersenne_Twister - Вихрь Мерсенна, реализация: http://www.prowaretech.com/Computer/DotNet/Mersenne
- csharp_Mersenne_Twister_2 - Вихрь Мерсенна, реализация: https://github.com/grmartin/Mersenne-Twister (чуть адаптированная под зенку, вроде не сломал ничего)
- csharp_random_with_seed_DateTime_Millisecond - Random с сидом "DateTime.Now.Millisecond"
- csharp_random_with_seed_DateTime_Ticks - Random с сидом "(int) DateTime.Now.Ticks & 0x0000FFFF"
- csharp_random_with_seed_Rei_LCG - Linear Congruential Generator, реализация из библиотеки Rei.Random
- csharp_random_with_seed_Rei_MersenneTwister - Вихрь Мерсенна, реализация из библиотеки Rei.Random
- csharp_random_with_seed_Rei_MotherOfAll - Mother Of All, реализация из библиотеки Rei.Random
- csharp_random_with_seed_Rei_RanrotB - Ranrot-B, реализация из библиотеки Rei.Random
- csharp_random_with_seed_Rei_SFMT - Быстрый Вихрь Мерсенна, реализация из библиотеки Rei.Random
- csharp_random_with_seed_Rei_Well - Well, реализация из библиотеки Rei.Random
- csharp_random_with_seed_Rei_Xorshift - Xorshift, реализация из библиотеки Rei.Random
- csharp_random_with_seed_RNGCryptoServiceProvider - Random с сидом "RNGCryptoServiceProvider"
- csharp_random_without_seed - Random без сида
Как это использовать
- Добавляйте Rei.Random.dll в ExternalAssemblies
- Добавляйте все шаблоны к себе в ZennoPoster
- Выделяете все шаблоны кроме "_draw_charts.xmlz"
- Добавляйте 1 выполнение
- Убираете выделение с шаблонов, которые на конце содержат "_cycle" (action_random_cycle, action_spintax_cycle) - чтоб было выделено 16 шаблонов
- Ставите всем шаблонам "Максимум потоков": 20
- Ставите всем шаблонам "Сколько делать": 5000
- Ждёте завершения работы всех шаблонов
- Убираете выделение со всех шаблонов
- Запускаете шаблон _draw_charts, чтобы сгенерировать репорт с графиками
Расшифровка графика
Каждый тест (шаблон) генератора случайных чисел получает вот такой график:Под шаблоном идет подсчёт некоторых параметров (что я смог придумать и вспомнить):
- Min - минимальное количество полученных значений из всего интервала (для текущего примера: это 460 раз мы получили число 8 )
- Max - максимальное количество полученных значений из всего интервала (для текущего примера: это мы 536 раз получили число 1)
- Diff - разница между максимальным и минимальным
- Arithmetic Mean - среднее арифметическое (сумма всех значений к их количеству)
- Diff in percents - разница между максимальным и минимальным в процентах по отношению к среднему (то есть среднее арифметическое - это 100%, а разница - это X%, собственно здесь и считается это X)
Итог
А нету итога. Я так и не понял нормально ли это, что выходит достаточно приличная разница, что варианты выпадают не равновероятно (не достаточно равновероятно). Я ожидал, что часть вариантов будет иметь меньшую разницу, а те, что криптостойки - большую. Но получил что-то среднее между этим, поэтому в силу недостатка знаний - не могу разобраться.Собственно поэтому и выкладываю это всё здесь. Давайте порассуждаем и подумаем как это должно быть?
PS: выкладываю это всё "вне конкурса", т.к. нет итога. Если был бы итог - выложил бы на конкурсе может даже.
Вложения
-
317,3 КБ Просмотры: 235
-
2,2 КБ Просмотры: 191
Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.
Последнее редактирование: