BLITZ A conventional warfare simulator using a "blitzkrieg" attack model By Dr. Richard J. Stoll Professor of Political Science Rice University stoll-a@ricevm1.rice.edu version 2.1 PURPOSE Blitz simulates an attack on a defender's frontlines using the blitzkrieg strategy. The object of a blitzkrieg is to push the defender especially hard in a few "breakthrough" sectors while keeping him pinned down in other, relatively quiet sectors to prevent reinforcement of the breakthrough points. If the attack is successful, the attacker will break through the lines and will be free to wreak havoc in the defender's territory. History shows that this strategy works even for forces too small to do any real damage after a breakthrough, primarily because the breakthrough demoralizes the defender. This simulation is designed to answer the question of whether an attacker with a given force distribution can achieve one or more breakthroughs in the defender's lines. MODEL OVERVIEW The battlefield is a front of fixed length divided into sectors, which in turn are divided into segments (currently 25 km each). The defender maintains a linear defense across the front. The attacker designates breakthrough sectors as described above; all other sectors are considered quiet. For simplicity, we assume that breakthrough sectors are spaced evenly across the front and are surrounded by quiet sectors on each side. Thus if we designate K breakthrough sectors, there will be K+1 quiet sectors sandwiched around them. Note that breakthrough sectors need not be the same length as quiet sectors (they are usually much smaller). Initially, the defender does not know where the breakthrough sectors will occur, so he allocates his forces evenly (segment-wise) across the entire line in strength sufficient for a quiet sector. Any remaining forces are kept in ready reserve until needed. Once the breakthrough sectors are identified (after the first day of battle), the defender can increase the force strength in the breakthrough sectors. The attacker initially has intelligence as to the defender's planned force-to-space ratio in quiet sectors and distributes his forces accordingly, matching the defender in quiet sectors while overmatching him by a predetermined ratio in breakthrough sectors. Any remaining force is kept in ready reserve until needed. The reserve system has two components: ready and next-day. When ground troops are pulled out of a sector, they are placed in next-day reserves and cannot be used until the next day of battle, when they are transferred to ready reserves. Due to their higher mobility, close air support forces in reserve are always considered "ready" and may be transferred immediately between sectors. The daily battles are conducted using Epstein's model of ground-air combat [1]. USAGE blitz [-I] [-O] [-L][-P[L]] [-H] Arguments are case-insensitive -I - read input from (default is stdin) -O - write daily output to (default is stdout) -L - write final output to (default is none) -P - mirror output to stdout -H - print this message to stderr INPUT FILE FORMAT Blitz expects to be given an input file consisting of parameters for zero or more runs of the simulation. Each run, and each parameter within a run, must be separated by whitespace (spaces, carriage returns, or tabs). A run consists of the following parameters (in the order they are expected in the input file): 1) Length of front line in km. The Central Front in Europe is roughly 750 km. *2) Number of breakthrough sectors on the front 3) Length of each breakthrough sector (in km) *4) Number of days over which to conduct the run 5) Parameters for the attacking side a) Initial ground force strength of attacker in division equivalents (DE's). This is a standard military measure of force strength. b) Force to space ratio in breakthrough sectors in DE's per segment (NOT per sector!) c) Breakthrough attrition threshold (between 0 and 1). This value roughly determines the level of overall attacker force attrition beyond which the attacker cannot advance during the current day's battle. See Epstein for more info. d) Quiet attrition threshold (between 0 and 1). Same as c), but for quiet sectors. e) Breakthrough ground prosecution rate (positive value). This determines how hard the attacker "pushes" in the breakthrough sectors. A high prosecution rate means more territorial gain on success, but it also increases attacker attrition. f) Quiet ground prosecution rate (positive value). Same as e), but for quiet sectors. *g) Initial units of close air support (CAS). A unit is basically one combat aircraft. The main job of CAS is to take out armored fighting vehicles (AFV's) by flying sorties againt the enemy. h) CAS attrition rate per sortie (between 0 and 1). This rate determines the fraction of CAS aircraft that will be lost (shot down) during each sortie. i) CAS sorties per day j) AFV's killed per CAS sortie. Counts the number of AFV's killed by a single unit of CAS during each sortie. When a division equivalent has lost all its AFV's, it is completely dead. k) CAS fraction to breakthrough sectors (between 0 and 1). This fraction of remaining aircraft will always go to the breakthrough sectors under an absolute reinforcement policy (see below). *l) Reinforcement policy (0 or 1). If 1 (absolute), reinforcements from reserves are made with the intent of bringing each sector up to a predefined, fixed force-to-space ratio. If 0 (relative), reinforcements are made to match the other side's force strength. Since battlefield intelligence is delayed, the previous day's force strength is used to estimate the reinforcements needed. 6) Parameters for the definding side Same as above except as noted. a) Initial ground force strength of defender in DE's. b) Force to space ratio in breakthrough sectors in DE's per segment. c) Force to space ratio in quiet sectors in DE's per segment. This value is not given for the attacker; instead, the attacker matches the defender's ratio in quiet sectors. d) Breakthrough attrition threshold (between 0 and 1). In the defender's case, this determines the level of attrition for the current day beyond which the defender will begin to withdraw, allowing the attacker to make territorial gains in the sector. e) Quiet attrition threshold (between 0 and 1). Same as d), but for quiet sectors. f) Maximum withdrawal rate (km/day). This value determines the fastest rate at which the defender can withdraw, and consequently the most territory an attacker can gain per day. If this value is low, the attacker will suffer more attrition, since the defender will be fighting a rearguard action rather than retreating rapidly. *g) Initial units of CAS. h) CAS attrition rate per sortie (between 0 and 1). i) CAS sorties per day. j) AFV's killed per CAS sortie. k) CAS fraction to breakthrough sectors (Between 0 and 1). *l) Reinforcement policy (0 or 1). 7) AFV's per division equivalent. 8) Lethality points per division equivalent. This statistic estimates how effective a division equivalent is. It is also the value that is "killed" (decremented) by the enemy forces, and its loss during each day is therefore used to calculate the attrition rate. A typical American DE in Operation Desert Storm had upwards of 99,000 lethality points. See Epstein for more info. 9) Casualty Exchange Ratio (between 0 and 1). This is the ratio of attacker casualties to defender casualties. 10) Reinforcements There must be as many of these sets of values as there are battle days. Each set of reinforcements is assumed to arrive AFTER the day equal to its position in the list, ie the first set arrives after day 1, the second after day 2, etc. a) Attacker ground reinforcements (DE's). b) Attacker CAS reinforcements (units). c) Defender ground reinforcements (DE's). d) Defender CAS reinforcements (units). * All parameters marked with an asterisk (*) are integers. The rest are double-precision floating point values. Some sample inputs are provided with the program. OUTPUT OPTIONS AND FORMAT As noted in the usage, there are two different types of output file: a daily result file and a last-day result file. For each run in the input, the last-day file contains a summary of the input conditions and a summary of the situation after the last battle day (and the last, unused set of reinforcements). For each sector, the following information is given: * the battle day * sector number * whether the sector is breakthrough * the remaining ground forces (in DE's) in the sector for each side * the remaining units of CAS in the sector for each side * the ground prosecution rate of the attacker in the sector * the last-day attrition rates for attacker and defender in the sector * the distance covered by the attacker during the last day * the distance covered by the attacker during the entire war In addition, the following information is given for attacker and defender: * the total active ground forces in (DE's) * the ground forces still in ready reserve (in DE's) * the ground forces in unready reserve after the last day (in DE's) * the total CAS units (both active and reserve) remaining The daily output file produces the same results but lists the sector and force-strength figures after *every* day, not just the last. If no options are given, the daily output is printed to stdout. REFERENCES [1] Epstein, Joshua M. THE CALCULUS OF CONVENTIONAL WAR: DYNAMIC ANALYSIS WITHOUT LANCHESTER THEORY. Washington, DC: Brookings, 1985. This is the source of the daily battles' combat model. [2] Posen, Barry R. "Measuring the European Conventional Balance: Coping with Complexity in Threat Assessment." INTERNATIONAL SECURITY 9,3 (1984): 47-88. This is the source of the original blitzkrieg model. Brito and Stoll later added the conception of reserves as a two-step pool. REVISION HISTORY v1.0 (???) The original simulator, written in C for MSDOS. v2.0 (Dec 88 - Jan 89) * Got rid of column split * Set size of breakthrough sector on input. v2.1 (May-June 94) This version was extensively hacked on by Jeremy Buhler of the Rice Electronic Studio Project, jbuhler@owlnet.rice.edu . CODE CHANGES * Fixed bug in reinforcement allocation. * Moved code base to C++ (though it still uses stdio for convenience) * Made reasonably OS-independent by a port to UNIX, though the resulting code still compiles under MSDOS. As a side effect, there are no more fancy screen-updating functions (alas). * Eliminated gratuitous struct copies in the battle routine and when advancing the day timer. * Merged the multi-file I/O into device-independent routines. * Program now accepts data files from stdin and prints to stdout by default. * Reorganized functional and file structure of the code to ease verification of correctness MODEL CHANGES * Moved reinforcement allocation to before clock update to comply with the non-copying method for advancing the day timer. This change should not affect the model calculations performed during reinforcement. * Segments within sectors are no longer restricted to 25 km. A compile-time value sets the size of a segment. * The defender forces are initialized so that he *really* does not know where the attacker is (the previous version did not implement this part of the model properly). * During reinforcement, close air support levels in quiet sectors now accurately reflect the defender CAS fraction * Made a few small changes between use of current and previous day statistics to keep the state-change model consistent