Hello,
Just wanted to hear some stuff on GP's, since I've just started reading up on them.
From what I've read so far, my basic understanding is that the designer has to, at the very least, provide the most basic modules, with which the GP process can the put together. Hmm, now that I think of it, this seems to be a typical search process in AI. We have to exactly define the most basic of operators which go from state to state, and then conduct a search to the correct order of their application. So in GP, we define THE most basic functions, without applying any bias as to how we expect the program to look, to allow the GP to put it together in the best way. This begs the question, for large complex systems how does one find out what the basic operators we expect to be? Or is this more a case, of not looking at the complexity. Look at the most basic question of the problem, and define the functions which must be a part of that answer. For example, how to get from location A to location B, we could just define the basic operations (turn in place X degrees clockwise, and move 1 step forward).
Has anybody seen an implementation in C, C++, or Java? How would one go about building a GP program in one of these languages, versus the more typical examples, like Lisp, where one can comfortably work with lists only? Or do they all suffer from similar problems in terms of the legality of function calling from one to the other, in terms of arguments. In Java everything can be declared to be an Object (including return types) to create a parallel to the Lisp style, and perhaps in C/C++ we could just use pointers (void *) for everything, though that's quite ugly. I take it that all of the construction mechanisms (or replacement in the case of mutation) would take care to handle the number of arguments correctly, right?
Just wanted to hear some stuff on GP's, since I've just started reading up on them.
From what I've read so far, my basic understanding is that the designer has to, at the very least, provide the most basic modules, with which the GP process can the put together. Hmm, now that I think of it, this seems to be a typical search process in AI. We have to exactly define the most basic of operators which go from state to state, and then conduct a search to the correct order of their application. So in GP, we define THE most basic functions, without applying any bias as to how we expect the program to look, to allow the GP to put it together in the best way. This begs the question, for large complex systems how does one find out what the basic operators we expect to be? Or is this more a case, of not looking at the complexity. Look at the most basic question of the problem, and define the functions which must be a part of that answer. For example, how to get from location A to location B, we could just define the basic operations (turn in place X degrees clockwise, and move 1 step forward).
Has anybody seen an implementation in C, C++, or Java? How would one go about building a GP program in one of these languages, versus the more typical examples, like Lisp, where one can comfortably work with lists only? Or do they all suffer from similar problems in terms of the legality of function calling from one to the other, in terms of arguments. In Java everything can be declared to be an Object (including return types) to create a parallel to the Lisp style, and perhaps in C/C++ we could just use pointers (void *) for everything, though that's quite ugly. I take it that all of the construction mechanisms (or replacement in the case of mutation) would take care to handle the number of arguments correctly, right?