Distributed peer to peer evolution
Gnubert's Distibuted Computing Engine
Gnubert's Evolution Engine
The Source Code
How to use Gnubert
Gnubert is yet another program attempting to use the otherwise idle time of the millions of computers hooked up to the internet around the world to solve problems of one sort or another.Currently programs exist that run when the user is away processing data, hoping to do things such as cure cancer, participate in code breaking contests, and even look for radio signals from extra-terrestrials. The main thing that makes Gnubert different from all of these projects is that each of them is dedicated to it's own single cause. Gnubert will allow it's users to submit their own projects and have them worked on by the various machines connected to the network. Hopefully as Gnubert approaches maturity it will attract a number of users whom will submit all kinds of interesting projects to it but also many users whom simply run it to donate cpu time and perhaps get the chance to learn about the projects that others are working on.
A project will consist of two parts. The first is the problem module which will define the kind of problem that is being worked on. Some possible problem modules might be one that evolves electronic circuits that fit some specification, or one that evolves a protein that will react with some give enzyme to help cure a disease. Or it may do something simpler such as solve a maze, as I have been using as my example while I develop the program. When Gnubert is developed to the point that it is ready to accept problem modules I hope that there will be volunteers interested in helping write some as they could come from a variety of fields other than just Computer Science which is mainly what I have studied.
The second part of a project is the data file. The data file defines the specific problem being solved. In the above examples it would define the specifications of the circuit being evolved, the enzyme that a protein is needed to react with or the maze being solved. This is the part that any user will be able to submit to the network to be worked on.
Gnubert will use evolutionary programming to solve problems. As it evolves bitstrings towards a solution for the same problem on multiple computers it will pass bitstreams back and forth between computers. It is hoped that this will have an effect similar to a single computer evolving a huge population at speeds that could not be achieved with one computer alone. At the same time it is hoped that users machines which are on logically distant parts of the network might develop multiple unrelated solutions to the same problem.
Each Gnubert computer will sit and work on a problem, sometimes asking other computers for bitstreams to immigrate into it's population. At intervals it will stop the problem it is working on, store it's bitstreams and work on a different one, eventually coming back to each until it is either solved or timed out. If it is getting low on projects to work on it will ask other Gnubert computers for more projects. Another way a Gnubert computer may get a project is if it's user creates one. The user will load the data file into Gnubert and not only will that computer begin to solve it but it will also pass it to others to share.
Gnubert started as a project for one of my classes in college and since then has progressed fairly slow. At the time I started it I had almost no experience with Java but for various reasons I decided to write it in Java anyway. As a result I am and have always been learning as I go and some of the older code is not necessarily something I am proud to claim as my own! All of the older stuff will however be replaced in time. Currently I am working mainly on the networking portion of the project and mostly ignoring the evolutionary side. This is partly because the networking side fits better with what I am currently learning as I study Java (I am working on Java Programmer certification) and also because I think it might be usefull as a framework for future P2P projects.