I took a class this semester called “Wargaming.” It was a project course in which teams of five were instructed to devise an agent-based model which reenacted an historical battle. The teams were all split between Computer Science undergrads and International Affairs grads, in hopes of training us for the kind of cross-talk between the disciplines which would be expected of us in a professional setting. My group selected the Battle of Prokhorovka, a tank battle within the larger battle of Kursk. This quickly attracted my professor’s interest, since he had never had a group attempt a tank battle before. (He had always favored pre-modern battles for their comparative simplicity.)
The idea driving this course is that by constructing models which reenact battles with relative accuracy according to the historical record, we can then alter variables to determine what errors were made by the commanders. For Prokhorovka, the Germans were ordered to retreat before the outcome of the battle was established, since the Northern Front of Kursk had faltered and the Panzerkorps were needed to reinforce German support of Italian defenses following the Allied landing in Sicily. For this reason, the battle is considered to be a German loss, though a number of historians have claimed that the Germans could have won the battle.
In addition to the withdrawal, the Germans held the XXIV Panzerkorps in reserve for strategic reasions. If the Germans couldn’t guarantee a victory by remaining in the battle, perhaps they could solidify that victory by putting the XXIV into play. My team built the model with these two variables (withdrawal and XXIV) as the elements which could be controlled between runs. Here’s the model. [I apologize, the interface was designed by one of the CS undergrads who used an absurdly high resolution, so it's a pretty big Java applet.]
As it runs by default, the Germans retreat. This is exactly what happened in reality, but the force depletions (listed by the graphs in the bottom right) are totally wrong. The Soviets followed the Germans after the retreat, overextending their defenses by taking the offensive, and taking massive casualties because of it. So we admit that the model is inherently flawed, but the mantra of the course (and the modeling community at large, it seems) was “All Models are Wrong.” Even so, I would have liked to start with a slightly more accurate model (forthcoming).
Setting aside this enormous methodological flaw, let’s continue playing the game. If we run the model again with the German retreat turned off, the Germans pretty reliably take Prokhorovka, and often then with no remaining tanks (if you turn “Deathmatch” on and hit run again, you’ll see this behavior after the German footsoldiers take the town. So it seems the inclusion of the XXIV is entirely superfluous. Or is it?
Modeling in this manner is, frankly, a little silly. I could rewrite the source of the model (seen at the bottom of the model’s page) so that the Germans are slower (which would more closely match historical record). And I could add more Soviet troops, also probably more accurate. And I could try to rewrite the damage model so that tank guns are seen to be more effective at longer ranges, but Soviet tanks execute the kamikaze collision attacks the Soviets actually did. Or we could do exactly the opposite.
In order to get the German force depletion rates down to levels which approximately matched the historical records, we fortified the German forces with a Deathstar. Yes, that deathstar.
[If you want to try it out, the variable switch is in the top right corner of the applet.]
Because this model holds little ground in the historical record, its results are entirely unsound. Were the model a little more faithful to the force depletion mechanics of the German escape, I might be more confident in my group’s work. That said, I learned a lot from this project.
As a business matter, I now know how to write ABMs in Netlogo. This is not an especially difficult language to master, especially for someone with a reasonable knowledge of programming control structures and boolean logic.
More importantly, I learned some of the limitations of ABMs. As abstract models, ABMs can help us understand incredibly complex behaviors with very simple rules, a la John Conway’s Game of Life. In terms of International Relations, this can be a valuable theory-building tool (for example, see Cederman 2003). However, an attempt to rebuild a complex real-life event (like a specific battle, for instance) is on less solid methodological grounds (though I can’t think of many other approaches which would be appropriate for this sort of study).
I’ll be playing with ABMs this summer, between my class (GIS), internship (OPAR), job and other projects. We’ll see if I can’t build a more cohesive approach to Prokhorovka, and ultimately some other more theoretical work (like a replication of Cederman’s model, though that may be down the road a bit).
For posterity, the most important thing I learned from the class: All models are wrong.