With the help of Google, I was able to discover that there has been quite a bit of research into Rock Paper Scissors (also called RoShamBo) theory. This research can be summed up as follows:
a) It's very hard to improve on the “Choose At Random” method. Out of 125 programs submitted to a recent competition, half of them performed worse than Choose At Random would have.
b) There are a couple of decent algorithms out there, that examine the history of an opponents moves in an attempt to predict the next move. These do slightly better than choosing at random.
c) There are a couple of decent algorithms out there that combine 5 or 6 other algorithms, and simply choose the one that has been performing the best. These do even better.
To sum up the above summary, there is no way I can improve on any of these programs. Some of these programs have been written by Doctorate students, and some by AI experts.
I am left with two choices with respect to my RPS program.
Choice A) Pick the best performing alogrithm with public source code, and implement that in .NET.
Choice B) Just continue choosing RPS at random, which relies pure chance (50/50) to win. I may not win, but I could still finish in the top half.
I haven't decided which way to go. I'm going to see how easy it would be to port the C programs to C#. If it's too much work, I may forget about it.
I still need to make a few improvements to my program. I'd like to develop a better way of recording results. Currently, I write everything out to a log file. Maybe I need a separate log file analyzer for RPS. Also, maybe I could write a Web Serivce Consumer, so I can play RPS against the program. That would be cool.
Lastly, there is a Simpsons episode where Bart thinks: “Good ol' Rock. Nothing beats rock.” I'm tempted to go that route as well. (Choice C?)