For your dining and dancing pleasure these are Steve's last statements concerning the progress of the AI and its importance.. Keep in mind this is a summary of accomplishments for 2009. I put my comments in green so as not to be confused with the report
Artificial Intelligence (AI)
I decided that one way to reduced my task list for creating the AIO is to limit the number of different scenarios that it can play when the game is first released. I’ll do 4 of the 11 scenarios for first release and then add the other 7 as patches in subsequent months. What this removes from my task list is figuring out alternative setups for thousands of units in the 7 scenarios that start late in the war. Each of those scenarios has hundreds, if not thousands, of units on the map at the start of the game. If the AIO always uses the same setup, it becomes too predictable and easy to defeat. But to do a respectable job of designing alternative setups for thousands of units will take time and effort.
The 4 scenarios that will be ready for first release are the ones that will be played the most: the two introductory scenarios (Barbarossa and Guadalcanal) and the Global War scenario (which is virtually the only scenario ever played in over the board games). The fourth scenario is Fascist Tide, which is the European half of the Global War scenario, so it can use the same setups.
I went back over what I had written on the French strategic plan. In 2008 I split the French strategic plan into its component parts for conversion into LAIO scripts. In so doing, I left the rather monolithic first 3 parts untouched. During 2009 I broke out the first two and I rendered them into data files. As a prerequisite, I created the storage structures for those pieces of the strategic plan: vital hexes and regions of conflicts (land, sea, and air).
Peter Skoglund worked throughout the year on setup scripts, first for the minor countries (e.g., Spain and Turkey) and after those were done, for the major powers (e.g., France). For instance, Peter finished up the convoy setups for all the major powers for the Global War scenario. We’re using a sophisticated system to analyze threats from air, sea, and land and since they are employed in so many of the scripts, Peter has developed a library of common functions - written in LAIO (Language for Artificial Intelligence Opponent).
Peter’s library of LAIO common functions is substantial at this point though I expect it to continue to grow. Most programmers will understand this terminology, and for those of you who don’t, a function is a fragment of code that is used by multiple LAIO scripts. By pulling them out and placing them in a separate file, they only have to be written (and debugged) once. Then they can be used by any script that needs the same logic. A couple of examples are: (1) determining whether there are any seaborne invasion threats when setting up minor country units, and (2) the same for paradrop threats. These functions are used when setting up the units for almost every country - that is, they are used in over 50 places.
Note that the AIO uses an abstract system rather than a hard coded “this unit goes in this hex”. There is a dual purpose behind using the abstract form: (1) it is easier than trying to hard code all the different combinations and permutations of defenses against the myriad of threats minor countries face when they enter the war, and (2) it is the system that the AIO will use for setting up the major powers. My hope is that eventually the design will be robust enough that the AIO will be able to set up the 7 scenarios that start late in the war without me (or anyone else) having to take the time to figure out which units set up in which hexes.
I wrote the code for the first five steps for the parser and added a new form expressly for testing LAIO scripts. These can be called from the within MWIF and used to monitor how a script is parsed and executed. I devoted many days to creating the data structures for the LAIO parser. As Peter and I worked through various setup scripts, we identified new variable types that we hadn’t thought of previously. Each variable type requires it own data structure. This is not surprising to me and I expect the number of data structures to continue to grow as we write more scripts. I thought about trying to create an exhaustive list, but if I did, more than half of them would never be needed. Therefore, I just add data structures as I come across new variable types.
I created a full directory structure within MWIF just for the AIO files/scripts.
Ian Wilson (PhD in AI) strongly recommended creating an abstract layer to the MWIF geography, so planning and decision making do not have to be done at the hex level. I had expected to do something along those lines but after Ian’s suggestion, and having worked with Peter on setting up units in Spain and France, my ideas kind of jelled. The result is a 4 level breakdown of the world map: (1) global, (2) theater of operations, (3) area of operations, and (4) sea area groups/land regions. These are hierarchical (1 down to 4), mutually exclusive, and exhaustive for all 70,200 hexes.
Patrice started work on the first cut at this and I spent a day or so digging down into the details too. Each geographical component has one or more decision makers assigned by the AI Opponent. Now many of these ‘areas’ will be irrelevant to most, if not all, of the major powers. For example, which major power in MWIF cares about the Southern Ocean or Hudson Bay? And Italy’s interest in the Pacific is comparable to China’s interest in the Atlantic - none whatsoever.
The benefit for the AIO design is that when a decision needs to be made, (e.g., which naval units to include in a moving stack), the AIO has a well defined frame of reference for making that decision. On land, this enables the creation of fall-back positions in Russia and China that include a group of hexes. Another gain is that sea area pipelines will be composed of a series SAGs (Sea Area Groups). Towards this goal, Patrice and I defined a geographical breakdown of Europe, including the adjacent sea areas. This is now ready for use in the AIO scripts.
I realigned the decision making assignments for each decision maker. Mostly this involved splitting a list of tasks into subsets for a hierarchy of decision makers. For example, instead of there being just one naval decision maker (i.e., the Admiralty), there are now 4: Admiralty - global responsibility, Rear Admiral - theater of operations, Fleet Admiral - area of operations, and Naval Group Commander - sea area group.
Continuing the example, the Admiralty decides on convoy pipeline entry and exit points for each theater of operations (TO) and allocates new/unused units to each TO. The Rear Admiral decides on the use of convoys and naval transports within his TO as well as the positioning of naval units to establish a naval presence in individual sea areas. The Fleet Admiral moves convoys with accompanying escorts within his area of operations. He is also responsible for committing units to attack enemy naval assets and deciding to which port(s) naval units return. And at the lowest level, the Naval Group Commander decides all the tactical naval decisions, ranging from shore bombardment through choice of naval combat table.
The key benefit of these changes is that each decision maker has a geographical area of responsibility that aligns perfectly with the geographical breakdown that Patrice, Peter, and I have defined (still incomplete at this point). When making decisions, each decision maker has a smaller search space for choosing the best move.
This is my favorite part.....
Tasks for 2010
Finish MWIF product 1 so I can buy a large screen, flat panel, HD TV.
Since January there has been no mention of any progress with the AI and its development. Unless i missed something in a later report. which is why I assumed that most of the work was done. My bad. I'm still hoping Steve gets his flat panel HD TV soon!!
"Time is the greatest teacher... Unfortunately she kills all her students."