[Home]EANN

Robo Home | Changes | Preferences | AllPages

EANN(Evolving Artificial Neural Network) is a software I have written to evolve NeuralNetwork architecture (or design) using Genetic algorithm. Note that it's not a strictly genetic algorithm (like I don't code everything in 01001...).

The software was not intended to be public so the code is not commented, it's partialy in french (code and software) and there are some terrible code.

you can find explaination on this page http://www.geocities.com/synnalagma/ and the program is on the page

it use NRLIBJ and the output is the array of String to build the best found NeuralNetwork.

you must write a project file. some of the feature are experimental (all feature about memory).

I wrote it because i saw that there were big difference between two NeuralNetwork and I don't exactly understand how to design the structure. I need several NeuralNetwork for my next project (for movement, targetting and dodging), so it was simplier than trying many different architecture.

please post any comment bug, suggestion.... Synnalagma

Sounds great! I haven't tested yet, but for what I see its a kind of external program? Or you use it directly on your robot? -- Albert

It's an external program. It would be really great to integrate it into a bot but actually it took too much CPU (100% if possible) and too much time (on my computer like 30 minutes to obtain first usable result and much more to obtain solid result). I think that it would be possible to integrate it if the search space is reduced (here it's really big).

It took a lot of thing from this article http://citeseer.nj.nec.com/230745.html if you are interested in evolving neural network read it.--Synnalagma

As it's an external program you must log data before you can run the program here is the class I wrote (so you have the right file format) :

public class Logger {
	int size=0, round=0;
	java.util.LinkedList in, out;
	private static Logger single = new Logger();
	/** Creates a new instance of Logger */
	private Logger() {
		this.in=new java.util.LinkedList();
		this.out=new java.util.LinkedList();
	}
	public static Logger getInstance(){return single;}
	
	public void add(float[] input, float[] output){
                //we only log in very different time so we have really different data and situation
                //you can add some randomness so you're safer (here if we have a patternbot with frequence = 150 it's not good
		if(RobotBase.monRobot.getRoundNum()==this.round){
			if(this.size>RobotBase.monRobot.getTime()) return;
			else this.size=(int)RobotBase.monRobot.getTime()+150;
		}
		else{
			this.round=RobotBase.monRobot.getRoundNum();
			this.size=(int)RobotBase.monRobot.getTime()+150;
		}
		in.add(input);
		out.add(output);
	}
	public void write(java.io.File f)throws java.io.IOException{
                java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(new java.util.zip.GZipOutputStream(new robocode.RobocodeFileOutputStream(f)));
		oos.writeObject(in);
		oos.writeObject(out);
                oos.close();
	}
	
	
}


Robo Home | Changes | Preferences | AllPages
Edit text of this page | View other revisions
Last edited May 18, 2006 21:41 EST by Florent (diff)
Search: