colgreen / sharpneat

SharpNEAT - Evolution of Neural Networks. A C# .NET Framework.
https://sharpneat.sourceforge.io/
Other
375 stars 96 forks source link

Multi-Objective Support for fitness metrics? #6

Closed jchristman closed 7 years ago

jchristman commented 7 years ago

Hello!

I was wondering if you:

a) had any plans to include MOEA support as a replacement for the speciation/fitness metric built into the original NEAT algorithm? I've had very good results in an implementation I wrote in ANJI, but I am looking to get out of that horrible code base. Yours is very cleanly written and I much prefer to work in it. b) if not, would you accept a pull request that adds the functionality in? I think that it would merely require an alternative to NeatEvolutionAlgorithm.cs that has a _genomerListMOEAEvaluator, which would evaluate on a list of IPhenomeEvaluators and then treat the results in an NSGA (or other MOEA) fashion. Because your code base is so much nicer, I don't see it being a major difficulty to add in...

Thoughts?

If you're interested in seeing some of the results I had with this, read http://ieeexplore.ieee.org/document/7424447/. It is a paper mostly focused on the benefits of MOEA's when working with Interactive Evolutionary Computing, but I did run an automated MOEA solution that evolved NEAT controllers for a robot in a maze domain and it did very well compared to standard fitness and with novelty search.

colgreen commented 7 years ago

Hi,

I'm currently working in other areas so there are no immediate plans to change anything or extend in anyway, however I am of the opinion that speciation based on genetic comparisons (as per NEAT) is probably significantly flawed, and some kind of multi-objective fitness approach is certainly on my radar of a promising/interesting directions to explore.

As far as human input goes, I think it's interesting to reflect on why it helps, with the view to automate whatever it is humans are doing (e.g. selecting strategies that are both novel but also coherent).

I would certainly consider accepting a pull request if it was complete and of a similar standard as the existing code base. My main aim is to provide a high quality 'kit of parts' that others can use to explore other ideas, and if those ideas work out and the code base is good then I'd be happy to merge it in to the main repository.

Finally, thanks for you interest and the encouraging words regarding the code quality :)