what's the matter? automata!
“we are living through a movement from an organic, industrial society to a polymorphous information system”
– Donna Haraway
For the rest of this class, we’re going to be thinking about what it means to simulate: specifically, what it might mean to simulate on the web. In particular, we will be thinking about how different kinds of simulations can tell different stories, and how we can make complexity and chaos out of very simple code.
Final Assignment
In this class so far we’ve looked at the internet from the perspectives of data, representation and communication.
We know that the web is full of countless streams of information, far too vast to represent in one way or one place. We’ve also started to look at representing that information in different ways, to try and make sense of it. Simulation in this sense is a way of taking complex information and exploring the outcomes of different actions based upon it.
Right now, the whole world is watching simulation models: models of predicted spread, of mortality rates, of the effects of different kinds of social isolation. These models are all attempts at understanding an impossibly complex system: how Coronavirus spreads through a population, and what effects it has. Simulation models are wildly influential: in the case of the UK, the fate of an entire country was changed by the release of a single research paper, a model that analysed the government’s strategy and calculated a death toll of hundreds of thousands.
Simulations tell us things about our world that, without them, would be far too complex to percieve. We aren’t used to thinking in terms of global systems, and simulations give us a way to achieve that.
Your final project is to make a simulated environment that exists on the web
- this simulation must be affected by 1) user interaction and 2) at least 1 external API
- this simulation should change over time
- the simulation should be of a system you encounter in your life. You can be as material or as abstract with this as you want!
‘simulation’ in this case is a term we’ll explore further over the next few classes, but it refers to a model of how a particular set of variables affects a set of outcomes. As we’ll see in this class, simulations don’t have to be complicated to be interesting and effective!
‘environment’ in this case means an immersive, visual and interactive exploration of your system, e.g. not just a graph! You can be very creative with this: it does not mean you need to make a realistic environment. Instead, think about how you can use this medium to tell a story about your system.
The goals of this project are your own to set, and depend on what you think you might want to learn about. The next 3 classes will introduce different ideas about and philosophies of simulation and environments.
How this project will be structured
We will iterate on these projects together in stages, with each week having a deliverable component (ideas, concepts, designs, code) that will move your project forward. While for all the COVID reasons I’m happy to be flexible with deadlines, for your own sake I really advise that you stick to them as they will help to balance out your work. The deadline that is not flexible is the final crit.
NB: If you’re worried that this flexibility will prevent you from working to your full abilities, let me know and I will be more than happy send you mean emails if you don’t submit stuff on time :)
FAQ:
-
can I make a coronavirus simulation? yes, by all means! Like all other simulations, think critically about how you’ll represent the data: remember, your task is to create an environment, not just a graph! For inspiration, have a look at Nicky Case’s Evolution of Trust, which manages to represent what could be quite a dry topic in a really interesting way
-
can I make a simulation about climate change? Of course, but you will want to be creative! Climate change as a concept is far too large to model in its entirety: instead, pick a part of the system that’s relevant to you and try to map it out. Games like Dwarf Fortress (while far too complex for this assignment) are interesting in their attempts to simulate environmental conditions.
-
aren’t simulations super complicated? How will I do this? Some simulations are complicated! But they don’t have to be. What we’ll see in class today is that you can do a lot with some very simple code. If you only use things that we’ve covered in class already, I guarantee you’ll be able to make an interesting simulation. Examples (with instructions) of complex and interesting simulations with very little code. Check out these videos on boids, and the game of life.
-
can I make a simulation of my day? Sure: you should think about the kinds of qualities of your day you want to represent. Given you’re probably stuck at home, it might not be very interesting to simulate where you might go today, but simulating your feelings, what you might cook, or where you could be going if things were normal might be an interesting form of escapism. Have a look at Jenny Jiao Hsia’s Consume Me (a game about living with an eating disorder), and also the classic Tamagotchi.
-
can I make a game? Ya totally! Games are a great way of exploring systems (it’s what one of this week’s readings is about), and in fact, even if you’re not making a game per se, it might be helpful for you to think about what you’re doing as game-like. There’s a nice concept of simulation as a Zero-Player Game (a game that plays itself). I did a project like this a while ago.
-
tl;dr: the answer is yes, but make sure what you’re doing is 1) tractable, 2) sufficiently ambitions
Guidance (for this and for life)
-
start small, work in steps: figure out the most minimal version of whatever you’re trying to achieve, and try and build that first. Once that’s working, commit to git. Then, plan your next steps, and iterate.
-
If you’re stuck for what to work on, try prototyping an idea! Even if it’s not what you end up working on, you’ll learn a lot more about what you do want to do from trying something out
-
document your work. Document everything. Notes, screenshots, git commits, thoughts, I want it all! When I’m working on a big project, at the end of every day I make to-do lists of all the things I did, all the thoughts I have, all the things I’m thinking about. That way I can pick up where I left off. Because of how essential this is, it’s also required by this class, and is as important as the code that you write. It can feel like a chore at first but there’s no better habit to form if you want to work on big software projects (I promise you!)
-
If you’re feeling overwhelmed, that’s a sign that you’re trying to bite off too much at once! Put your computer down, and plan the steps for what you need to do with a pen and paper (for each day you work on this project, you should be doing this at least once)
How this project will be assessed:
We will be having a final critique for this project! This will take place over Zoom. I’m still confirming people to come in, but you should assume there will be at least 2 external critics. One will be Owen Trueblood, an artist and researcher who works with simulation and robotics.
During this critique, you will:
-
circulate a link to everyone on the call, so they can interact with your project. It must be online and working.
-
talk about and demonstrate your project. give a short (3min) presentation on the goals and ideas you have decided to explore
-
once people have had 5 minutes or so to play with your project, we will have a 10-minute discussion about the project’s content, its goals and how well it achieves them
Feedback you will get for this project will be based on 4 things:
-
form: does the project make sense as a user experience? is it compelling? does it achieve its stated intentions?
-
finish: the completeness and attention to detail in the project (have you tied up loose ends? are there errors that can cause it to crash or break?)
-
documentation: how thoroughly have you documented your work? Would it be possible for someone who hasn’t worked on this project to read it, understand your processes, then contribute to the code?
-
adventurousness: I’m familiar with all of your work from the past semester, and I know the level you’re all working at. This project should be a chance for you to challenge yourself, but that will look like different things to different people! Compare your work with yourself earlier this term and ask: am I developing? What’s something new I want to learn from this final project?
lecture: games of life
This class is about a simulation technique called Agent-Based modelling (ABM). ABMs allow us to achieve complexity with very simple starting conditions!
conway’s game of life
patterns
particle life
emergence
snowflakes
stigmergy
pattern formation
reaction diffusion turing pattern conus textile
nervous system software
swarms
leafcutter ants supercolonies termites slime moulds
boids how-to
kilobots
supercolonies
generative artworks
sol lewitt Mass MOCA MIT student art lending program solving sol
conditional design fungus
anders hoff github
covid
Washington Post ABM NYTimes Interactive model Why It’s So Freaking Hard to Make A Good COVID-19 Model
make your own
wolfram mathematica atlas of simple programs
Simulating
cellular automata in the browser
agent based modelling
schelling segregation
Humans of Simulated New York
Language evolution simulation
Ian Cheng’s Emissaries Project
Subreddit Simulator
ABMs in games
Dwarf Fortress
Party Fortress
tutorial:
Using Nicky Case’s Simulating to make cellular automata.
in-class assignment
In groups, use Nicky Case’s Simulating to make a cellular automaton model of some system that you relate to or experience.
-
Check out an existing simulation model in your groups. Try changing the parameters over screenshare to get some different results. Document your results as you go with notes and screenshots.
-
Add in a new variable: how does this change the system?
-
Together, decide on a system to simulate, and build using the Blank Sim Canvas. At the end of the class, we will exchange simulations.
assignment
Come to class with a system that exists in your life, that you might like to explore in your final project. (you can change this in the future but it’s an important exercise). In addition come with one specific technology or coding skill that you would like to learn during the remainder of the class. This can be something we’ve touched on already that you like to consolidate, or something totally new. Your assignment this week is to write these things on your site, accompanying reading responses for the week.
Write a paragraph on your website about the system, addressing the following questions:
- what factors control how the system behaves? (list as many of these as you can think of)
- how much control do you have over these factors? which are affected by external events vs internal control?
- are the effects short, medium or long term?
- how do some factors affect other factors
- are there any chaotic modes or feedback loops in the system
An example: the food that’s in my house is affected by:
- what I want to eat today
- what the people I live with are eating
- how much money i have
- what’s in season (affects how expensive and quality)
- what’s in the store
- how often I can go to the store, because of the virus
- my diet
- what I ate last week
- how much time I had to go shopping
- climate change
What I want to eat today is short term, my income is medium term, climate change is long term. Some of these factors interact with one another: e.g. the amount of money I’m earning might affect the amount of time I have to go shopping, or if I buy local and in season, perhaps it has a (minor) affect on the climate.
(genuinely, myself and my flatmates are building a simulation of this right now…)
reading
Ian Bogost The Rhetoric of Video Games
FiveThirtyEight Why It’s So Freaking Hard to Make A Good COVID-19 Model