The primary achievement of this project is that it successfully calculated Ramsey numbers and provided algorithms that successfully and significantly cut processing time, among other things. According to our mentor David Metzler, the hardest parts in calculating Ramsey numbers is to cycle through colorings and to check colorings for monochromatic subgraphs. This program does both of those and does it with more efficiency than a simple brute-force method. In fact, while the time saving mechanisms in the program already save a significant percent of time when run with small inputs on a home PC, the program’s time savings should increase logarithmically as we input larger and larger graphs and subgraphs. Therefore, apart from just overcoming the challenges to calculate Ramsey numbers, this program adds significant performance enhancements.
Research in the field of Ramsey numbers is still limited. While the ideas behind Ramsey numbers are simple, computer science approaches to calculating Ramsey numbers are still rare. So while the research that we are doing is not unique, our program has created algorithms that have the potential to overcome the barriers that other computer science approaches to the problem have hit, namely in processing power. This program has actual potential to contribute to the mathematical community if it were included as part of further and much broader professional research into using supercomputers to calculate Ramsey numbers or a related problem.
However, apart from the basic requirements, another achievement of the project is that the program is fully expandable and structured for continual improvement. This type of program is very dependent on having the most efficient algorithms and if at any point we found, for instance, an even quicker way to generate combinations, we could easily switch out the combination generator classes and within minutes have implemented a whole new time-saving algorithm. Additionally, our use of objects and many methods/functions helps to modularize the code and give it a dynamic, expandable structure. For a problem like this where performance is key, this type of structure fit the project very well. All of these features also allow the program to be open to solving derivative problems with only small changes in the code. For instance, we could easily try to find three subgraphs of three different colors within the larger graph using nearly all of the code from this project.