MathematicaForPrediction at WordPress​
​SystemModeling at GitHub​
October 2023

Introduction

In this notebook we present generalized Lanchester combat models and use one of them for simulation and calibration examples with data of the Battle of Iwo Jima.
Remark: The content of this notebook is intentionally theoretically fundamental, but short and simple both mathematically and code-wise. Author's intent is to develop similar computational workflows for (1) field battles, like the Normandy campaign during Word War II, 1944, or (2) urban warfare, like Second Battle of Fallujah, Iraq 2009, or Battle of Bakhmut, Ukraine 2023.
The main computational workflows are done with a System Dynamics (SD) software monad implemented in the paclet "MonadicSystemDynamics", [AAp2]. That paclet is based on the monad implementation presented in "A monad for Epidemiologic Compartmental Modeling Workflows", [AA1]. The functions provided by the paclet [AAp2] have the prefix "SDMon", which stands for "System Dynamics Monad".

Why use the Battle of Iwo Jima in examples?

The examples below use the Battle of Iwo Jima because that is convenient both data-wise and mathematics-wise. Here are our reasons:
◼
  • The battle is important for the USA military, hence well documented and used in multiple contexts.
  • ◼
  • See, for example, mathematical articles like [JE1] and [RS1].
  • ◼
  • (Relatively) well curated data can be found. Like:
  • ◼
  • Sizes of the military forces
  • ◼
  • Battle duration
  • ◼
  • There is no need to:
  • ◼
  • Take care of negative stocks
  • ◼
  • Simulate "will to fight" -- Japanese soldiers fought to the last one
  • ◼
  • Japanese Prisoners Of War (POWs) became POWs because they were found unconscious...
  • Notebook structure

    ◼
  • Generalized model and variants​
    Main theory.
  • ◼
  • SDMon Model​
    Programmer's version.
  • ◼
  • Direct model simulation​
    Using the Battle of Iwo Jima data and related pre-computed rates.
  • ◼
  • Calibration​
    We can get the theoretically computed rates by using numerics!
  • ◼
  • Future plans​
    Make models, not war.
  • Generalized models

    This section presents a translation to English of introductory paragraphs of [NM1]. (The same general model and breakdown is presented in [AS1].)
    In the most general form, the Lanchester models can be described by the by the equation:
    In[]:=
    ∂x
    ∂t
    ax+bxy+cy+d​​
    ∂y
    ∂t
    ey+fxy+gx+h
    (
    1
    )
    where:
    ◼
  • a
    and
    e
    define the rate of non-combat losses
  • ◼
  • b
    and
    f
    define the rate of losses due to exposure to area targets
  • ◼
  • c
    and
    g
    are losses due to forward enemy exposure
  • ◼
  • d
    and
    h
    are approaching or retreating reserves
  • To determine the casualties of wars, actual or potential, the following four models are of greatest importance.

    1. Lanchester proper model (only the coefficients
    b
    and
    f
    are available)

    In this case:
    ◼
  • The number of casualties is proportional to the number of encounters between individuals.
  • ◼
  • The number of encounters between individuals of the opposing sides is proportional to the number of victims.
  • ◼
  • The number of victims is proportional to the number of encounters between individuals of the opposing parties.
  • ◼
  • Product of the number of parties:
    x×y
    .
  • ◼
  • This interaction is most relevant when the two sides are located in a common territory:
  • ◼
  • Guerrilla warfare, repression, enmity between two ethnic groups, etc.
  • 2. Osipov model (coefficients
    a
    and
    e
    )

    ◼
  • The number of victims is proportional to the number of the opposing side.
  • ◼
  • This could be a classic military engagement where the two sides are in contact only on the front lines.
  • 3. Peterson model (coefficients
    a
    and
    e
    )

    ◼
  • The number of casualties is determined by the size of one's side.
  • ◼
  • This could be a model of the Cold War, where the more of their submarines are on alert, the more of them die.
  • 4. Brackney model (coefficients
    a
    and
    f
    or
    b
    and
    e
    )

    ◼
  • The casualties of one one side is proportional to the number of encounters and the other to the number of its opponent.
  • ◼
  • The model was inspired of the Vietnam War and describes quite satisfactory.
  • ◼
  • I.e. a conflict in which one side is engaged in classical warfare and the other in guerrilla warfare.
  • Model "rigidness"

    The simplest, with Osipov terms only, generalized Lanchester model is:
    ′
    x
    (t)-by(t),​​
    ′
    y
    (t)-ax(t).
    That model is a "rigid model" that admits an exact solution. (See Arnold's book "«Rigid» and «soft» mathematical models", [VA1].)
    Here is the solution:
    dx
    dy
    
    by(t)
    ax(t)
    ax(t)dx=by(t)dy
    a
    2
    x(t)
    -b
    2
    y(t)
    ==const.
    The evolution of the number of soldiers of armies
    x
    and
    y
    occurs along the hyperbola given by the equation
    a
    2
    x(t)
    -b
    2
    y(t)
    ==const.
    The war evolves along that hyperbola, hence it depends on the starting point.
    The corresponding manifold of hyperbolas is separated by the line
    ax=by
    . If the starting point lies above this line, then the hyperbola finishes on the
    y
    -axis. This means that in the course of the war army
    x
    decreases to zero and army
    y
    wins.
    Remark: Note that if the efficiency coefficients
    a
    and
    b
    are not constant then the equation
    ax=by
    determines a curve.
    Here is an interactive interface that illustrates the properties of the simplest model:
    Out[]=
    ​
    a, efficiency constant X:
    0.1
    b, efficiency constant Y:
    0.2
    efficiency function X:
    a
    a
    x
    efficiency function Y:
    b
    b
    y
    -100.
    -99.75
    -99.5
    -99.25
    -99.
    -98.75
    -98.5
    -98.25
    -98.
    -97.75
    -97.5
    -97.25
    -97.
    -96.75
    -96.5
    -96.25
    -96.
    -95.75
    -95.5
    -95.25
    -95.
    -94.75
    -94.5
    -94.25
    -94.
    -93.75
    -93.5
    -93.25
    -93.
    -92.75
    -92.5
    -92.25
    -92.
    -91.75
    -91.5
    -91.25
    -91.
    -90.75
    -90.5
    -90.25
    -90.
    -89.75
    -89.5
    -89.25
    -89.
    -88.75
    -88.5
    -88.25
    -88.
    -87.75
    -87.5
    -87.25
    -87.
    -86.75
    -86.5
    -86.25
    -86.
    -85.75
    -85.5
    -85.25
    -85.
    -84.75
    -84.5
    -84.25
    -84.
    -83.75
    -83.5
    -83.25
    -83.
    -82.75
    -82.5
    -82.25
    -82.
    -81.75
    -81.5
    -81.25
    -81.
    -80.75
    -80.5
    -80.25
    -80.
    -79.75
    -79.5
    -79.25
    -79.
    -78.75
    -78.5
    -78.25
    -78.
    -77.75
    -77.5
    -77.25
    -77.
    -76.75
    -76.5
    -76.25
    -76.
    -75.75
    -75.5
    -75.25
    -75.
    -74.75
    -74.5
    -74.25
    -74.
    -73.75
    -73.5
    -73.25
    -73.
    -72.75
    -72.5
    -72.25
    -72.
    -71.75
    -71.5
    -71.25
    -71.
    -70.75
    -70.5
    -70.25
    -70.
    -69.75
    -69.5
    -69.25
    -69.
    -68.75
    -68.5
    -68.25
    -68.
    -67.75
    -67.5
    -67.25
    -67.
    -66.75
    -66.5
    -66.25
    -66.
    -65.75
    -65.5
    -65.25
    -65.
    -64.75
    -64.5
    -64.25
    -64.
    -63.75
    -63.5
    -63.25
    -63.
    -62.75
    -62.5
    -62.25
    -62.
    -61.75
    -61.5
    -61.25
    -61.
    -60.75
    -60.5
    -60.25
    -60.
    -59.75
    -59.5
    -59.25
    -59.
    -58.75
    -58.5
    -58.25
    -58.
    -57.75
    -57.5
    -57.25
    -57.
    -56.75
    -56.5
    -56.25
    -56.
    -55.75
    -55.5
    -55.25
    -55.
    -54.75
    -54.5
    -54.25
    -54.
    -53.75
    -53.5
    -53.25
    -53.
    -52.75
    -52.5
    -52.25
    -52.
    -51.75
    -51.5
    -51.25
    -51.
    -50.75
    -50.5
    -50.25
    -50.
    -49.75
    -49.5
    -49.25
    -49.
    -48.75
    -48.5
    -48.25
    -48.
    -47.75
    -47.5
    -47.25
    -47.
    -46.75
    -46.5
    -46.25
    -46.
    -45.75
    -45.5
    -45.25
    -45.
    -44.75
    -44.5
    -44.25
    -44.
    -43.75
    -43.5
    -43.25
    -43.
    -42.75
    -42.5
    -42.25
    -42.
    -41.75
    -41.5
    -41.25
    -41.
    -40.75
    -40.5
    -40.25
    -40.
    -39.75
    -39.5
    -39.25
    -39.
    -38.75
    -38.5
    -38.25
    -38.
    -37.75
    -37.5
    -37.25
    -37.
    -36.75
    -36.5
    -36.25
    -36.
    -35.75
    -35.5
    -35.25
    -35.
    -34.75
    -34.5
    -34.25
    -34.
    -33.75
    -33.5
    -33.25
    -33.
    -32.75
    -32.5
    -32.25
    -32.
    -31.75
    -31.5
    -31.25
    -31.
    -30.75
    -30.5
    -30.25
    -30.
    -29.75
    -29.5
    -29.25
    -29.
    -28.75
    -28.5
    -28.25
    -28.
    -27.75
    -27.5
    -27.25
    -27.
    -26.75
    -26.5
    -26.25
    -26.
    -25.75
    -25.5
    -25.25
    -25.
    -24.75
    -24.5
    -24.25
    -24.
    -23.75
    -23.5
    -23.25
    -23.
    -22.75
    -22.5
    -22.25
    -22.
    -21.75
    -21.5
    -21.25
    -21.
    -20.75
    -20.5
    -20.25
    -20.
    -19.75
    -19.5
    -19.25
    -19.
    -18.75
    -18.5
    -18.25
    -18.
    -17.75
    -17.5
    -17.25
    -17.
    -16.75
    -16.5
    -16.25
    -16.
    -15.75
    -15.5
    -15.25
    -15.
    -14.75
    -14.5
    -14.25
    -14.
    -13.75
    -13.5
    -13.25
    -13.
    -12.75
    -12.5
    -12.25
    -12.
    -11.75
    -11.5
    -11.25
    -11.
    -10.75
    -10.5
    -10.25
    -10.
    -9.75
    -9.5
    -9.25
    -9.
    -8.75
    -8.5
    -8.25
    -8.
    -7.75
    -7.5
    -7.25
    -7.
    -6.75
    -6.5
    -6.25
    -6.
    -5.75
    -5.5
    -5.25
    -5.
    -4.75
    -4.5
    -4.25
    -4.
    -3.75
    -3.5
    -3.25
    -3.
    -2.75
    -2.5
    -2.25
    -2.
    -1.75
    -1.5
    -1.25
    -1.
    -0.75
    -0.5
    -0.25
    0
    0.25
    0.5
    0.75
    1.
    1.25
    1.5
    1.75
    2.
    2.25
    2.5
    2.75
    3.
    3.25
    3.5
    3.75
    4.
    4.25
    4.5
    4.75
    5.
    5.25
    5.5
    5.75
    6.
    6.25
    6.5
    6.75
    7.
    7.25
    7.5
    7.75
    8.
    8.25
    8.5
    8.75
    9.
    9.25
    9.5
    9.75
    10.
    10.25
    10.5
    10.75
    11.
    11.25
    11.5
    11.75
    12.
    12.25
    12.5
    12.75
    13.
    13.25
    13.5
    13.75
    14.
    14.25
    14.5
    14.75
    15.
    15.25
    15.5
    15.75
    16.
    16.25
    16.5
    16.75
    17.
    17.25
    17.5
    17.75
    18.
    18.25
    18.5
    18.75
    19.
    19.25
    19.5
    19.75
    20.
    20.25
    20.5
    20.75
    21.
    21.25
    21.5
    21.75
    22.
    22.25
    22.5
    22.75
    23.
    23.25
    23.5
    23.75
    24.
    24.25
    24.5
    24.75
    25.
    25.25
    25.5
    25.75
    26.
    26.25
    26.5
    26.75
    27.
    27.25
    27.5
    27.75
    28.
    28.25
    28.5
    28.75
    29.
    29.25
    29.5
    29.75
    30.
    30.25
    30.5
    30.75
    31.
    31.25
    31.5
    31.75
    32.
    32.25
    32.5
    32.75
    33.
    33.25
    33.5
    33.75
    34.
    34.25
    34.5
    34.75
    35.
    35.25
    35.5
    35.75
    36.
    36.25
    36.5
    36.75
    37.
    37.25
    37.5
    37.75
    38.
    38.25
    38.5
    38.75
    39.
    39.25
    39.5
    39.75
    40.
    40.25
    40.5
    40.75
    41.
    41.25
    41.5
    41.75
    42.
    42.25
    42.5
    42.75
    43.
    43.25
    43.5
    43.75
    44.
    44.25
    44.5
    44.75
    45.
    45.25
    45.5
    45.75
    46.
    46.25
    46.5
    46.75
    47.
    47.25
    47.5
    47.75
    48.
    48.25
    48.5
    48.75
    49.
    49.25
    49.5
    49.75
    50.
    50.25
    50.5
    50.75
    51.
    51.25
    51.5
    51.75
    52.
    52.25
    52.5
    52.75
    53.
    53.25
    53.5
    53.75
    54.
    54.25
    54.5
    54.75
    55.
    55.25
    55.5
    55.75
    56.
    56.25
    56.5
    56.75
    57.
    57.25
    57.5
    57.75
    58.
    58.25
    58.5
    58.75
    59.
    59.25
    59.5
    59.75
    60.
    60.25
    60.5
    60.75
    61.
    61.25
    61.5
    61.75
    62.
    62.25
    62.5
    62.75
    63.
    63.25
    63.5
    63.75
    64.
    64.25
    64.5
    64.75
    65.
    65.25
    65.5
    65.75
    66.
    66.25
    66.5
    66.75
    67.
    67.25
    67.5
    67.75
    68.
    68.25
    68.5
    68.75
    69.
    69.25
    69.5
    69.75
    70.
    70.25
    70.5
    70.75
    71.
    71.25
    71.5
    71.75
    72.
    72.25
    72.5
    72.75
    73.
    73.25
    73.5
    73.75
    74.
    74.25
    74.5
    74.75
    75.
    75.25
    75.5
    75.75
    76.
    76.25
    76.5
    76.75
    77.
    77.25
    77.5
    77.75
    78.
    78.25
    78.5
    78.75
    79.
    79.25
    79.5
    79.75
    80.
    80.25
    80.5
    80.75
    81.
    81.25
    81.5
    81.75
    82.
    82.25
    82.5
    82.75
    83.
    83.25
    83.5
    83.75
    84.
    84.25
    84.5
    84.75
    85.
    85.25
    85.5
    85.75
    86.
    86.25
    86.5
    86.75
    87.
    87.25
    87.5
    87.75
    88.
    88.25
    88.5
    88.75
    89.
    89.25
    89.5
    89.75
    90.
    90.25
    90.5
    90.75
    91.
    91.25
    91.5
    91.75
    92.
    92.25
    92.5
    92.75
    93.
    93.25
    93.5
    93.75
    94.
    94.25
    94.5
    94.75
    95.
    95.25
    95.5
    95.75
    96.
    96.25
    96.5
    96.75
    97.
    97.25
    97.5
    97.75
    98.
    98.25
    98.5
    98.75
    99.
    99.25
    99.5
    99.75
    100.

    SDMon model

    In this section we define the general model in a simple programmatic form using the paclet "MonadicSystemDynamics", [AAp2].
    Remark: A better programmatic form would have equation elements that prevent (army) stocks to become negative.
    Remark: Compared to the previous section, below we follow "wordier" but self-explanatory notation that helps model understanding, evaluation, and enhancements.
    Here are the stocks:
    In[]:=
    aStocks=<|​​X[t]->"Soldiers of army X",​​Y[t]->"Soldiers of army Y"​​|>;
    Here are the rates:
    In[]:=
    aRates=​​fireEfficiencyX"Efficiency of force X ",​​fireEfficiencyY"Efficiency of force Y",​​fireEfficiencyXonY"Efficiency of force X on Y",​​fireEfficiencyYonX"Efficiency of force Y on X",​​growthX"Growth rate of force X due to new recruits",​​growthY"Growth rate of force Y due to new recruits",​​diseaseX"Disease rate in force X",​​diseaseY"Disease rate in force Y",​​fireFriendlyX"Friendly fire rate in force X",​​fireFriendlyY"Friendly fire rate in force Y"​​;
    Here are rules that assign concrete values to the rates:
    Initial conditions (number of soldiers):
    Lanchester (or Lotka-Volterra) interactions:
    Osipov interactions:
    Equations:
    Make the model data structure:
    Display the model in tabular format:

    Direct model simulation

    Here we follow the equations setup and data in the article [JE1].
    Remark: The data in [JE1] is later revisited and new computations were made with almost the same results. See [RS1].
    Here replace the constant term of the first equation in the generalized model with the growth function growthIwoJimaX.
    Here create the monadic pipeline, put the fire efficiency rates found in [JE1], simulate the for battles number of days, and plot the result:

    Calibration

    In this section we show that using optimization methods -- calibration -- we can obtain the same efficiency rates as the ones theoretically computed in [JE1] using the same data.
    Remark: This should bring some confidence in using SDMon; and since the calibration process is easy to specify, it should encourage SDMon's use for other SD models.
    Consider the following calibration targets that are "time series" each derived via linear interpolation from two data points -- the start- and end values of the number of soldiers for each army:
    Here is a model setup pipeline:
    Here is a calibration pipeline that specifies:
    1
    .
    Target time series of the stocks
    2
    .
    Parameters to calibrate
    3
    .
    Parameter ranges, within which to search the calibration values
    4
    .
    Distance function from the computed time series to the target time series
    5
    .
    Parameters for NMinimize
    Here we plot the simulated army sizes using the calibrated values:
    Here we use a more "complicated" distance function that takes only the known points of the time series:
    Remark: Note that with that new calibration distance function we get almost the same results as the theoretically computed efficiency rates in [JE1]:
    In[]:=
    <|fireEfficiencyX -> 0.0106, fireEfficiencyY -> 0.0544|>

    Future plans

    Here are a few directions to extend this work into:
    ◼
  • Inclusion of different types of forces
  • ◼
  • Simulation of "will to fight"
  • ◼
  • Easy with NDSolve and, hence, with SDMon.
  • ◼
  • Inclusion of weapon and ammunition production stocks and related supply rates
  • ◼
  • For example, as in [AA2].
  • ◼
  • Modeling the war impact on countries' economics and populations
  • ◼
  • Modeling the role of propaganda
  • ◼
  • Make interactive interfaces with knobs for the parameters
  • ◼
  • With selectors of scenarios based on known battles.
  • References

    Articles

    [AA1] Anton Antonov, "A monad for Epidemiologic Compartmental Modeling Workflows", (2021), MathematicaForPrediction at WordPress.
    [AS1] Andrei Shatyrko, Bedrik Puzha, Veronika Novotná, "Comparative Analysis and New Field of Application Lanchester’s Combat Models", (2018), Post-conference proceedings of selected papers extended version Conference MITAV-2018, Brno, Czech Republic, 2018. P.118-133. ISBN 978-80-7582-065-5.
    [JE1] J.H. Engel, "A verification of Lanchester's law", (1953), Journal of the Operations Research Society of America, Vol. 2, No. 2. (May, 1954), pp. 163-171. (JSTOR link.)
    [NM1] Nikolai V. Mityukov. Determining the casualties of wars through Lanchester models, (2009), Historical Psychology and Sociology of History.
    [NM1ru] Н. В. МИТЮКОВ, ОПРЕДЕЛЕНИЕ ЖЕРТВ ВОЙН ЧЕРЕЗ ЛАНЧЕСТЕРСКИЕ МОДЕЛИ, Историческая психология и социология истории 2/2009 122–140.
    [RS1] Robert W. Samz, ⎡Some Comments on Engel's "A Verification of Lanchester's Law"⎦, (1972), Operations Research, Vol. 20, No. 1 (Jan. - Feb., 1972), pp. 49-52 (4 pages) (JSTOR link.)
    [Wk1] Lanchester's laws, Wikipedia.
    [Wk2] Battle of Iwo Jima, Wikipedia.

    Books

    [VA1] Vladimir I. Arnold, Rigid and soft mathematical models, 2nd ed. (2008), Moscow Center of Continuous Mathematical Education.
    In Russian: Владимир И. Арнольд, "«Жесткие» и «мягкие» математические модели", (2008), М.: МЦНМО, 2014, 32 с. ISBN 978-5-94057-427-9.

    Packages, paclets

    [AAp1] Anton Antonov, EpidemiologicalModeling, WL paclet, (2023), Wolfram Language Paclet Repository.
    [AAp2] Anton Antonov, MonadicSystemDynamics, WL paclet, (2023), Wolfram Language Paclet Repository.

    Repositories

    [AAr1] Anton Antonov, System Modeling, (2020-2023), GitHub/antononcube.

    CITE THIS NOTEBOOK

    Generalized Lanchester combat models​
    by Anton Antonov​
    Wolfram Community, STAFF PICKS, October 25, 2023
    ​https://community.wolfram.com/groups/-/m/t/3055705