Danny Loeb

Computer Interpretation
of Diplomacy Openings

The Observation Module applied
to Spring 1995 in "dippouch"


As an example of the use of the observation module described in the article devoted to it elsewhere in this issue, and as a source of practical advice for potential "investors," let us apply the observation module to the results of the first turn of the game "dippouch", as shown in the first issue of this magazine.

General Comments about Spring 1901

In the previous issue of this magazine, I discussed how an opening book (such as the one published in this issue of Diplomatic Pouch) can be used to select a good opening.

Similarly, looking up your opponents openings in such a book gives you a good idea about kind of alliances they are likely to indicate. For example, in the game "dippouch," here is a brief summary of each country's opening. Click on the country's name for full details.

The openings library supplemented perhaps by a systematic search of games containing similar openings can occasionally give clues as to what kind of tell-tale moves to look for in Fall 1901 as well!

However, we hope that our diplomat's general operating procedures will be robust enough to work well in all phases including Spring 1901. Thus, we plan to use the normal observation routine even in Spring 1901 as described below. It is interesting however to use the openings library as a tool by which to judge the performance of the Observation Module.

One of the inputs of the Observation Module is the Friendliness Matrix produced in the previous season. Since this doesn't yet exist in Spring 1901, it must be invented. Below we take the all zero matrix as a default, however there are other possibilities.

Conversion to DPP Protocol

Using a conversion program developed in LCS by Per Westling and myself, Diplomacy Adjudicator (judge) results can be directly converted to the DPP protocol language which is understood by the Bordeaux diplomat. First, I saved the results in a file called "dippouch". Then, I load the package in LCS
% lcs
LCS Project - CNRS/LAAS - 1992 
lcs version 3.1,  created 6-10-1992
val it = () : unit

- use "convert.pw.sml";
.....

convert.pw.sml file loaded
val it = () : unit

- val s = convert "dippouch";
val s = 
"ORD (SPR 101)
((AUS AMY BUD) MTO SER VLD) ((AUS AMY VIE) MTO BUD VLD) ((AUS FLT TRI) MTO ALB VLD)
((ENG AMY LVP) MTO WAL VLD) ((ENG FLT EDI) MTO NTH VLD) ((ENG FLT LON) MTO ENG VLD)
((FRA AMY MAR) MTO SPA VLD) ((FRA AMY PAR) MTO BUR VLD) ((FRA FLT BRE) MTO MAO VLD)
((GER AMY BER) MTO KIE VLD) ((GER AMY MUN) MTO RUH VLD) ((GER FLT KIE) MTO HOL VLD)
((ITA AMY ROM) MTO APU VLD) ((ITA AMY VEN) HLD VLD) ((ITA FLT NAP) MTO ION VLD)
((RUS AMY MOS) MTO SEV VLD) ((RUS AMY WAR) MTO UKR VLD) ((RUS FLT SEV) MTO BLA VLD) ((RUS FLT (STP SCS)) MTO BOT VLD)
((TUR AMY CON) MTO BUL VLD) ((TUR AMY SMY) MTO ANK VLD) ((TUR FLT ANK) MTO CON VLD)
EOM" : 
string

Observation Module

We then load the observation module implemented in LCS by Arnaud Moulard and Christophe Moustier.
- needs "load_all";
........
- observer nullMat77 (detail (ref2ord s));
val it = 
([[0.0, ~0.104166666666667, 0.9375, 3.9625, 0.0625, ~6.92083333333333,   ~1.57083333333333],
  [~0.104166666666667, 0.0, ~8.9, ~3.775, 0.345833333333333,   0.0541666666666667, ~0.0458333333333333],
  [0.9375, ~8.9, 0.0, ~5.70416666666667, ~6.82916666666667, ~0.8375,   ~0.879166666666667],
  [3.9625, ~3.775, ~5.70416666666667, 0.0, ~4.95416666666667,   ~1.25833333333333, 5.1875],
  [0.0625, 0.345833333333333, ~6.82916666666667, ~4.95416666666667, 0.0,   ~3.6, ~6.875],
  [~6.92083333333333, 0.0541666666666667, ~0.8375, ~1.25833333333333,   ~3.6, 0.0, ~11.8416666666667],
  [~1.57083333333333, ~0.0458333333333333, ~0.879166666666667, 5.1875,   ~6.875, ~11.8416666666667, 0.0]],
 [["AUS", "ITA"], ["ENG"], ["FRA"], ["GER", "RUS"], ["TUR"]]) : 
real list list * string list list
Or again
        A     E     F     G     I     T     R
    A        -0.1  +0.9  +4.0  +5.1  -5.9  -1.6 
    E  -0.1        -8.9  -3.8  +0.0   0.0  -0.0 
    F  +0.9  -8.9        -5.9  -0.0  +0.0  -1.1
    G  +4.0  -3.8  -5.9        +2.1  -0.4  +5.0
    I  +5.1  +0.0  -0.0  +2.1        -2.1  +0.1 
    T  -5.9   0.0  +0.0  -0.4  -2.1       -12.0 
    R  -1.6  -0.0  -1.1  +5.0  +0.1 -12.0
The results from only one turn of play do not yet show very strong relationships between the players. However, the computer considers England and France, and Russia and Turkey to be at war, and Austria and Italy, and Russia and Germany to be allies.

These results are based on the simple analysis of the results described below. In particular, none of the press or negotiations were taken into account.

How were these numbers generated

Many factors did not come into play... The one important factor which came up in the calculations was the following.

Parameters

The following is a list of parameters used by the observation module and their default values used in this example. Actual optimal values can only be found through extensive testing (self-play).