To begin my research project, I did a lot of reading on random number generators. Once I understood the usefulness and functionality of random number gerators, I began reading about statistical testing for these utilities. I constructed the simple Equidistribution Test and used it on first the random number generator inherent to Java and then the shuffled nested weyl generator, the focus of my research project. I was introduced to gnuplot, which is a useful tool in plotting the results of any test.
My work this week began a lot more smoothly since I already have accounts on the computer systems and I am accustomed to programming in the Unix environment, a new experience for me. This week I programmed more significant tests on the random number generator, the chi-square test and the KS test. The Kolmogorov-Smirnov test was based on the writings of D. E. Knuth. I attended my first weely meeting with other faculty members and students actively involved in computer science research this summer. It was great to see and hear what other students are doing. I hope to gain lots of useful knowledge from these meetings.
This week's programming work began with attempting to perform the KS test on the results of several chi-square tests on different sets of numbers. This algorithm is quite complex and involves other functions, such as the gamma function. Instead of writing the gamma function on my own, and "reinventing the wheel", I downdoaded a copy of the gamma function written in Java from the Internet. I revised this function to suit my purposes. This test did not produce the expected results, so I ended up rewriting the gamma function in case it was the culprit. This effort was soon proven futile. Next, I programmed an alternate algorithm for the same test. Once these basic statistical tests worked properly, I was finally able to begin programming the tests on parallel number generation.
This week began with frustration. Tests that were supposed to output data heading towards 0, went to infinity. Finally I realized that I had an integer overflow. After correcting this, I plotted my data and found that the graphs did not quite resemble the theoretical plot. I followed Dr. Whitlock's advice and plotted the average of data produced by several sequences of numbers. One exciting discovery: After trying these tests on java's generator, I realized that they produced different results each time, unlike the generator I normally test. Now that I'm getting used to researching on the Internet, I found documentation that explained that different seed values are used each time, based on the current time. No wonder the same test gives different results a few seconds later! Next, I began generalizing the parallel tests, comparing threee sequences of numbers drawn from the same number generator within a short span of time. Many points must be compared in each of these tests, so the processing time increased considerably.
By the time this week began, I had already produced enough basic tests. Because of this progress, I was able to generalize these tests for the case of three simultaneous sequences of numbers drawing from the same generator. Of course, I also had to modify the code that produces the theoretical results, so I can compare the results in statistical tests. I realized that my code is a little messy , so I took some time out to neaten it up and document it so it would be quite simple for someone else to run these tests. Perhaps someday someone will run these tests on a different generator!
This week I used the code I wrote last week to run various parallel tests on several variations of the pseudorandom number generator I am testing. Whenever I obtained results that varied from the expected range of values, I spent time analyzing the results of these tests were further data to be generated. I analyzed 3, 4, 5, 6, and 7 sequences of numbers, to find correlations among the distinct sequences. I compared both pairs and triplets of numbers, when the sequences are split before being distributed to processes and when the pairs are distributed to processes one after another.
This week I coded another random number generator, the nested weyl generator. I ran the same parallel tests on this generator, and found many correlations between the sequences. This was ecpected, and I documented the results. I also began another two tests, to find the length of the period and the minimum distance between the points in many sequences. I read the online documentation on the java command and realized that I can increase the size of the memory allocation for any program. This is nice to know since I had encountered "out of memory" errors in some of my programs that required many arrays of large sizes to be stored in memory. I still have to test the shuffled nested weyl generator in its capabilities of generating uncorrelated 10 parallel sequences of numbers, since I hear that the generator is used in this fashion, perhaps inaccurately.
This week I modified the tests for parallel generation so they work on the nested weyl generator I created. It seems like I actually coded the nested weyl generator properly since there is a significant deviation from the theoretically "good" results. We expected this because the nested weyl generator has been documented to fail in parallel computing environments. I'm wondering whether my test that finds whether a generator is periodic or aperiodic actually works, because it tells me that every varsion of the shuffled nested weyl, and the nested weyl generators that I tested are aperiodic.
This week I began by coding generators that have obvious periods. I was happy to see that my program that finds the period of a generator works properly. I also carried my test for parallel random number generation further. I checked the number of numbers that land in bins, but the two-dimensional bins each contained a smaller range of numbers, since there were 20 or 50 of them in each dimension. I hope to finish creating, testing, and using my minimum-distance test next week.
I used this week to wrap up this research project and tie up any loose ends. I reviewed my progress with Dr. Whitlock. We discussed the results of my programs and further tests and variations I would develop were I to carry this project further. When we noticed gaps in the data, I clarified and completed the result set.