replykatie - b

experiments in behavior evolution

[2021-05-04]

a year and a half ago, I spent little under a month working on replykatie, a Unity project where I simulated rabbits eating flowers. it was heavily inspired at the time by some youtube videos that I watched, and of course by evolution itself (I always liked biology, despite majoring in comp sci). I also wrote about the project here.

well, I totally forgot about that project and recently dug out that page from underneath my neocities pile. to my surprise it actually wasn't as shitty as I remembered! it was reasonably decent, I think.

on a completely different line of thought, for some weeks now I have been putting up a hummingbird feeder in front of my window. 3 different species of bird have been appearing: bananaquits, sombre hummingbirds and swallow-tailed hummingbirds. I have done this as an exercise in paying attention to my bioregion, which is something that touched me very much after reading Jenny Odell's 2019 book "How to Do Nothing". I have spent a lot of time watching these birds and trying to understand their motives and habits. they make me company during the day and offer me very welcome breaks from my academic work.

i like the birds a lot.

an unintended consequence of watching the birds come to my window is that I can't stop thinking about how birds are truly very different from each other in terms of behavior, despite being """normal birds""". I don't know how to express this very well, they're just like... they're so different. there are so many birds, it's like what the fuck has nature been doing, you know?

over time, this question has kind of transformed into a different one: could I obtain similar results - biodiversity - if I evolved my own ecosystem? in other words, I've been motivated to pick up where I left off in replykatie, but now with the *giant* complexity of adding mutable behaviors.

honestly this idea has been following me for a few weeks now but I just ignored it because I know it's going to be a lot of work and that I'll probably quit before reaching any sort of conclusion, because I can't even finish a well-scoped game, let alone a open-ended project like this. and also, I truly think that artificial life is something for the benefit of the programmer: it's way more fun to code an ecosystem than to use/watch someone else's. and also, I have tons of other, more relaxing, hobbies to do. in summary: there are many reasons why this is probably not a good idea.

however I was watching Machine Learning Street Talk video with Ken Stanley where they talk about his 2015 book "Why Greatness Can't Be Planned" (which I haven't read yet), and I've been truly inspired by his ideas. basically he thinks that objectives suck and that society should encourage people to explore a lot more than it does now. I know that he isn't exactly saying "do stupid stuff and see where it takes you" but it's how I've come to interpret it. in other words, fuck it.

fuck it, yeah? maybe this will be my first and last post. time shall tell, but at least I tried.

progress

the project is going to be in javascript because I like showing my projects to people and I've realized that no one wants to download a fucking executable file. I'll use p5js because it's the library I'm most comfortable with. if everything goes according to plan, I will regret this decision in a few days, when I inevitably fail to simulate 500 agents at the same time.

of course, I'm not going to be 100% stupid about it. to alleviate the computing, I'll make a sacrifice and use a tile-based system. this was not the case in replykatie, but it's going to be this time. I think this will free some memory because behind the scenes it's going to be just a goddamn matrix. this means that javascript is slow yes but I won't use fancy physics and probably everything is going to be fine.

I will use behavior trees to model the agents' behavior. I have used them before but nothing too complicated, so this will be a learning point for me. mutating behaviors will be a matter of evolutionarily changing the trees, which shouldn't be too hard because genetic programming (GP) has been doing it for decades right? just delete a node and cross the subtrees and interesting behaviors will emerge. I hope. I haven't thought too clearly about the crossover and mutation operators as of yet, but I don't think they will be a problem.

I am getting hungry, I'm gonna go get some dinner. I think this report will stop here. let me just show you what I did today, in ~3 hours: an agent that gets hungry, searches for food, and eats it when it finds it. yes they're all geometric shapes for now, that's the least of my concerns. I coded behavior trees and an inspector for watching them. it should be a good basis for what comes next.

and what does come next?