Are we living in a simulation?
Typing that question into Your Favourite Search Engine™ brings up a myriad of websites with different thoughts and ideas about whether we’re living in a simulation, as well as “proof” of why we might be. I haven’t given much thought to the idea, but I feel like I’m probably on the boat of “no, we’re not living in a simulation”*.
However, if we were living in a simulation, how might that be coded? Let’s forget about all other living things for this thought experiment and just focus on humans. If you were to program a human using computer code, how might you go about doing such a thing?
Let’s start with some basic attributes! You can think of some easy “stats” about yourself, for example, by simply looking at a piece of ID. We have information assigned to us such as “Name”, “Address”, “ID Number”, “Date of Birth”, among other information. If I were to start coding a human, I think I would probably combine “Name” and “ID Number” into a single attribute to refer to the human.
So now we have some basic stats to start our human! For simplicity, we’ll just assume that those will remain constant throughout our simulation. Can we think of attributes that may not stay constant? As I’m writing this, I’m currently eating an apple and I’m reminded of those energy levels from The Sims. If your character doesn’t eat for a while the energy level bar decreases, and when your character eats, it increases. So other stats we might be able to think of are ones that change with respect to time (we might call them temporal data if we want to be fancy), such as energy level which increases and decreases with food intake and digestion, respectively.
Of course, in order for a simulated human to eat, it would have to have an “eat function” programmed. So I would probably code it so that the eat function takes into consideration the potential energy of the food (Calories) and adds that onto the human’s energy level.
As you start thinking of more basic attributes and functions of humans, you would continually implement these functions until you have something that is “close enough” to a human. Once you have all these functions and attributes, you can begin your simulation and create any finite amount of humans to start “interacting” with each other, and see what happens!
What we just did was created a “pseudo” agent-based model! Agent-based models simulate one or more agents in a given environment and see what emergent properties come out of that simulation. In our case, our “agent” is a human (and we can create any number of those), and our environment could be anything from a single room, a house, a city, a country, or even the world!
Why would we want to create such a thing? As I mentioned, agent-based models allow us to see emergent properties that come from simulations. What that means is that after running a number of simulations – the more the merrier (#SmallSampleSizesMeanNothing) – we can see if there are any trends based on our initial input to the model. For example, if I wanted to test to see how humans survive only eating apples and sushi, I could run 100 simulations of a human (or humans) just eating those things for 10 years (you can simulate longer or shorter time spans) and see how they fare out!
You may be asking yourself: “what does this have to do with birds”? After all, I did advertise this blog to be a mixture of birding and computer science! For this post, I wanted to lay a very high level overview of what agent-based modelling is and what it can be used for. In my research this summer, I am using a variant of an agent-based model (called an environmental agent-based model – more on that later), to simulate the breeding season of the piping plover (see my previous blog post about why I’m studying them).
Agent-based models are often used in the field of ecology to conduct population risk assessments for different species. In my case, I am investigating the impacts of anthropogenic activities on breeding piping plovers. In particular, I’m looking at how anthropogenic presence affects the growth of hatchlings. With your newfound knowledge of how agent-based models work, what attributes or functions can you think of that might be implemented in an agent-based model of piping plovers?
In a future blog post, I’ll get more into the model I have created for my digital piping plovers and maybe share some of the preliminary results that have come from it!
*If we ARE living in a simulation, I’d love to see the source code for it! Life is impressively detailed so it would be great to see how it was programmed!