Projects:

I wrote a short essay for a related class about how neural networks might (or might not) be able to help speed up emergent simulations, and I may try and test this idea in my tree simulation project. Here is my essay if you are interested; please let me know what you think!
Emergent systems (groups of relatively simple entities that when combined, give rise to complex and unpredictable higher-level behaviors) are very important to fields like artificial intelligence and artificial life. Living things are all emergent phenomena, in that their complex behavior arises from the interaction of simpler rules over billions of years of evolution. If we reject supernatural explanations for human cognition, then it is clearly an emergent phenomenon caused by the interaction of over 100 billion neuron cells and their electrochemical environment. Most current simulations of emergent behavior only focus on how one level of behavior arises from another. They simulate every single entity in one layer (such as cars on a road) and display the emergent pattern of behavior (such as a traffic jam). Unfortunately, most interesting emergent phenomena cannot be simulated in this way because they either span multiple layers, or consist of too many units to simulate.
Let us consider the human body as an example of an emergent system. It consists of over 100 trillion cells, forming tissues, forming organs, forming systems, which form the whole physical body. In a normal emergent simulation program, we would have to start with one layer consisting of elements with arbitrarily-defined behavior, and see what arises from their interaction. However, this program would be very slow. In computer science terms, it would be O(n), meaning that simulating twice as many entities would take twice as long. So if we wanted to simulate the human body on a cellular level, we would have to look at each cell individually. If the algorithm for simulating each cell took one millisecond, it would take over three thousand years to calculate one timestep (unit of simulated change) for the whole body.
To address this problem, we could train neural networks to find the patterns that emerge at each level of the system, and encode them in the output. For example, we could train one to find patterns of interactions of ten cells, train the next to find patterns of interactions of 100 cells (using the output of 10 of the previous neural nets as input), and so on. Using this kind of strategy could result in a program that is O(log[n]), meaning that it would only take about 1.3 times as long to simulate twice as many entities. This is much more appropriate for complex emergent systems. In this way, a body consisting of 100 trillion cells could be simulated using only 14 neural networks, and each timestep would take less than a second.
We have made several assumptions for simplicity; for example, we are assuming that all cells can be simulated in the same way, and that identical neural networks can learn the emergent patterns at each level. However, these are not important to my main point. Neural networks could extend the power of emergent system simulations by allowing us to look at every level of interaction rather than just one, and look at complex systems such as entire organisms or communities.