There are a number of ideas that the project could be based on. There is the evolutionary arms race which takes place on the African plains between lions wildebeest, gazelles and cheetahs. There is how bees collect nectar from plants and move around pollen which is need for the plants to reproduce. Finally there is how shoals of anchovies form a sphere for protection against predators. A final decision will not yet be made on which subject to use. Instead work will be done on programming and deliberation on this matter will continue.
A 3D environment had been created with the classes set up for a plant and the environment, these two entities where able to interact, e.g. the plant could get the sunlight amount from the environment. The plant was drawn as a simple sphere and the sunlight parameter from the environment controlled the 3D light. This was made using the ofxBullet library in an empty example that came with the engine. Now the decision has been made not to use a physics engine this has been transferred to just a plain openFrameworks example.
Over the last few days research has been undertaken on ecosystems to find a subject on which to base the project. There have been many ideas and a decision is very close to being made. Once this decision is made a revised project plan will be finalised and the finished prototype will shortly follow. Work on the prototype has been temporarily postponed in order to find a subject ecosystem on which to base the project. A static page has alo been created on this website which holds a brief overview of evolution.
This has been a time to reflect on the direction of the project in order to get a clear understanding of the problem.
After a meeting with the project supervisor there is now a clear direction for this project. The decision has been made to construct a virtual ecosystem. The focus of the programming will be on the relationships between the organisms and the ecosystem, relationships between the organisms and other organisms, and the relationships between each creature’s individual characteristics. The creatures will be able to evolve new characteristics or parts based on natural selection. It would be helpful to find an example of a small and already existing ecosystem and use this as a basis for the project so some research will be undertaken in this area.
The decision was made after narrowing everything down to two choices – either what is stated above, a simulation of an ecosystem focusing on the relationships between the components, or to take an AI (artificial intelligence) approach to programming evolution. This would involve programming an AI controller or neural network which would control the creatures (an approach which would mainly be used to try and evolve behaviour). There are many examples of this approach already, some of which have been researched. This was also more the type of approach that was discussed with Tim Taylor (see Log 10/02/2012).
The main reason this decision was made was that the aim of the project was always to program an ecosystem.
The chosen approach can be programmed without need of a physics engine so the ofxBullet library will not be used.
This decision will result in changes to the project plan, as previously planned. It will also take a couple more days to produce a low level design and a prototype.
Following the decision to make one not two prototypes the date for the prototype to be completed was changed to the date that the original two where to be integrated by.
Much work has been done on the prototype:
- Work and learning was done in OpenGL to firm up knowledge of how to use it to program in 3D.
- ofxBullet was discovered as discussed in the previous post: Bullet Physics for OpenFrameworks 1/02/2012.
- Work has been done playing with the examples that came with bullet, which have proved rather difficult to understand.
- A project was made for the prototype itself with a class for the plants and a class for the environment, work on this is currently ongoing.
Research was conducted on the game Spore.
Many physics engines have been investigated which could be used for the project. It was first though that the Ogre game engine would be used which uses the Bullet physics engine. But it was decided early on that programming would be done using OpenFrameworks and OpenGL. For this reason the ofxMSAPhysics library was considered this is a physics library which is integrated with openFrameworks. This was a good good option but before the decision to use this library was made the possibility of using Bullet in openFrameworks was investigated.
Bullet is a very powerful physics engine which would be very good for the project, here is the official Bullet site for: http://bulletphysics.org/wordpress/
and these are videos of the what the Bullet physics engine can do (not using OpenFrameWorks) :
this video uses OpenGL which will be used for the project:
When researching the Bullet physics engine it was found that there is a Bullet addon for Openframeworks, ofxBullet, this was exciting news as it meant that not much work would be needed to get the Bullet physics engine working in Openframeworks. This was first discovered on this site: http://vimeo.com/26886772, it was then found that the ofxBullet library and examples could be downloaded from github: https://github.com/NickHardeman/ofxBullet and an example was up and running in no time.
Here is a screenshot of the Joints examples:
This example starts with 2 ball connected by a joint, every time the left mouse button is clicked another ball is created connected to the last by another joint.
It was first entended to finish the Sam’s Teach Yourself C++ book before starting programming. More progress was made on this but it was decided not to try and finish the book. This is because it would have been too time consuming and it best to start programming as soon as possible so as any problems are encountered early. However chapters on pointers, classes, overloading operators and Inheritance where covered and the book will be used as a reference instead of working through it.
Before starting programming the prototype a paper plan was written out in order to really conceptualise how it would work. Information was take from the http://www.bbc.co.uk/schools/gcsebitesize/ on the basics of food chains and biology.
A meeting was had with Tim Taylor, an expert on the subject of evolutionary computation. This is what was discussed:
- It was suggested that only one prototype should be made (3D and Evolution) as making two and then integrating them was extra work.
- Some more related works where suggested.
- The problem of what exactly the creatures would be and how they would evolve was discussed in detail. It was mentioned that some sort of controller or neural networks would be needed for the creatures which allowed them to receive input from the environment these controllers are what would be evolved. This Introduced the task of finding about how to implement controllers or neural networks.
- It was also suggested that virtual plants should be set up that just lived and died without evolution so as to move on to the problem of evolving controllers asap.
- Finally it was suggested that the problem statement needed to be slightly clearer still.
Programming was started for the 3D environment, first tutorials for openGL on this site were followed : http://www.videotutorialsrock.com/.
Different applications such as pic breeder (www.picbreeder.org) were researched and analysed for use in a draft background chapter.
Research was aslo continued into the subject of evolution itself. All of this research will be featured on this site in static pages.
A draft of the background project chapter was completed which consists of a clear statement of the problem, research into the problem area, a list of intended results and a project plan.
The project plan was also updated.
Here is a copy of the draft background chapter:
A Gant Chart:
And The project Plan: