Create a virtual room (10x10) and add a virtual robot in a random spot. 40% of the squares in the room contain batteries, which provide 5 units of power for your robot. The remaining
squares are empty. Moving your robot costs 1 unit of power. Your robot starts with 5 units of power and may hold an unlimited number of charges. The robot is capable of sensing the environment to the North, South, East, West and square it is standing on. It can deter-
mine if the space has a wall in it, a battery in it or is empty. Each turn it may either grab a battery (if one is in the square it is occupying) or move 1 space. Moving costs 1 unit of power. Moving into a wall costs 3 power units. Your robot “dies” if it runs out of power before the simulation is over (arbitrarily set to 25 moves per robot). The key is the robot brain. You will use genetic algorithms to “program” your robots. Out of a random population, some robots will do better than others. You will keep these robots and “breed” them so subsequent generations will become smarter and smarter at this task. Each generation will use 200 robots, only the initial generation will have randomly generated brains. Each robot will spend 200 turns in the room. You will compare robot performance on the total number of power units each has collected. Once each generation has been scored, you will select the top 50% robots and “breed” them. Each child robot will get 50% of it‘s behavior from 1 parent and 50% from the other. The children will replace the bottom 50% of the robot population. The simulation will run again. You will repeat your simulation1000 times (ie1000 robot generations). Specification. Record the average power collected for each generation and display at the end of the simulation. You should see an ever improving curve as the GA‘s get better and better at their task.
NOTE: this program needs to be written in c++ and Ubuntu OS. It should compile perfectly in terminal without giving warnings.
It isn't so important, but a happy coincidence that I am a robotic software engineer. The project itself, is pretty straightforward initially, then you introduce the genetic algorithm element. Now, I do have experience genetic algorithms, my final year thesis was in grammatical evolution. I previously worked in ESA on genetic algorithm toolkit (PaGMO), that used cross-breeding with archipelagos, and one use case was fuel conservation in planetary robotics.
I also work in nothing but Ubuntu.
I have over 10 years experience in c++ software developement using windows and linux. Furthermore I am doing currently my PhD in Machine Learning, so I am familiar with genetic algorithms and simiar concepts.
Are there any more contraints on the layout of the genetic algorithm, or would a rather simple implementation be sufficient? What are the requirements on the code documentation?
I am experienced in making games in C++ using DirectX for myself. I like the task and I can do this for you. Please send me some more info if you are interested.