Я использую реализацию C# Mersenne Twister, которую я загрузил с CenterSpace. У меня есть две проблемы, связанные с ним:Mersenne Twister: посев и визуализация
- Независимо от того, как я засеять алгоритм это не проходит DieHard tests, и я имею в виду я получаю довольно много 1s и 0s для р-значения. Также мой KStest на 269 p-значениях равен 0. Ну, я не могу интерпретировать p-значение, но я думаю, что несколько 1s и 0s в результате - плохие новости.
- Меня попросили визуально показать случайность чисел. Поэтому я рисую числа по мере их создания, и это вообще не кажется случайным. Вот два скриншота результата after a few seconds и a few seconds later. Как вы можете видеть на втором скриншоте, числа попадают на некоторые параллельные линии. Я пробовал разные алгоритмы для сопоставления чисел с точками. Все они приводят к параллельным линиям, но с разными углами! Вот как я сопоставил числа с точками для этих скриншотов:
new Point(number % _canvasWidth, number % _canvasHeight)
. Как вы можете догадаться, визуальный результат зависит от ширины и высоты формы, а this is - катастрофический результат.
Вот несколько способов, которыми я пытался засеять алгоритм:
- запись пользователя. Я вводил некоторые числа, чтобы выровнять алгоритм как массив int.
- Случайные числа, генерируемые самим алгоритмом !!
- Массив
new Guid().GetHashCode()
Что я здесь отсутствует? Как я должен семенировать алгоритм? Как я могу пройти мимо DieHard?
Спасибо за ответ fbrereto. Ваше мнение о равной ширине и высоте очень верно. Я не знаю, как я это пропустил :) Вот как я начал отображение: var x = (int) (number & 0xffff0000); var y = число & 0x0000ffff; x = x% _canvasWidth; y = y% _canvasHeight; Это как-то похоже на ваше решение; однако, я думаю, функция мод все еще искажает результат. FYI это отображение вызвало вертикальные парализованные линии! –
вам нужно сдвинуть свои значения x вниз; после битовой маски они будут находиться в верхних двух байтах вашего числового вывода, и все они будут большими числами, которые могут исказить ваш мод. – fbrereto
Мод, вероятно, всегда будет показывать некоторый уклон, когда вы нарисуете результаты на экране. С тем, что вы пытаетесь сделать, я бы рекомендовал не рисовать большие координаты (вне окна) или линейную интерполяцию. – fbrereto