Κρατάτε γερά !


Σε όσους απέμειναν όρθιοι: Καρτερία και Ευψυχία !

Τετάρτη 22 Σεπτεμβρίου 2021

Rommel's recursive algorithm

Recursion* and the Afrika Corps


In the early years of World War II, the German army dominated the British and French forces. Yet the most famous German General, one who was most respected by his Allied opponents, is the one who suffered the first German defeat. It was against him that the tide turned in favour of the Allies, yet he is regarded highly in military lore. He was Field Marshal Erwin Rommel, known to his British enemies as the Desert Fox.

By 1940, the Germans had been victorious throughout Europe and had established continental Europe as a fortress. The British elected to attempt their resurgence at a point where the Germans were furthest from their supply sources and weakest in numbers. The site was North Africa.

Rommel was the commander of the German Afrika Corps and was thus responsible for holding off the first British offensive of the war. The German army occupied virtually all of Europe, and Adolf Hitler was considering plans for invading both England and Russia. With troops committed elsewhere and ambitious plans afoot, Hitler left Rommel to "make do" with inadequate support in terms of both men and material. Rommel rose to the occasion by deploying innovative tactics by which he held off superior numbers of British (and later, American) forces for an extended period.

He accomplished this in large part by deploying a recursive algorithm to organize and coordinate his troops in battle. Ordinarily, any commander would keep a healthy segment of his forces in reserve. This was deemed necessary because an enemy attack would threaten some portion of his line, and he needed to have reserve troops available to move up from the rear to support his front line troops at the point where they were attacked. Because his forces were so outnumbered, Rommel did not have enough troops to do this. He required that all his forces be committed to battle to have any hope of taking the day. This, of course, left him with the serious problem of: how to respond to points of threat when he had no extra troops to deploy?

Rommel's recursive solution was to decentralize control of his forces, giving each local commander the authority to deploy without approval from above, and to specify for those local commanders the recursive algorithm they were to execute. (Because battle is ongoing, there is no terminating condition in it. Rommel wanted infinite repetition). Here's the logic of that algorithm:

      procedure Rules_of_Engagement

            look (to your left and to your right)
            if (you see your comrade in trouble) then
                  go help him
            endif
            RulesOfEngagement

       end //procedure Rules_Of_Engagement

In battle, this algorithm was deployed throughout Rommel's army. Commanders of small units in a skirmish would use it to manage their local troop deployment in that skirmish, just as commanders of large battalions would use it to manage the fighting in large battles. Regardless of the scale of fighting, the effect was the same: Rommel's troops would converge automatically on the point of attack.

This convergence of troops to the point where they were most needed did not occur because of a series of orders from the top command down to soldiers in the field. Instead, it happened as a result of a distributed, organic, recursive process: If a given unit was in trouble, its neighbour units would come to its aid. And, in turn, their neighbour units would see their movement and slide over to help them, and so on. In short, it was a self-managed, chain reaction with a powerful result: Wherever the Allies attacked, they whould soon be facing the brunt of the German forces in the area.

Rommel eventually lost but not because he was "out-generaled". He lost because he was finally overwhelmed by superior forces and a lack of reinforcements and supplies. Despite his eventual defeat, he went home a hero.


* Recursion is one of two means of achieving repetition.
The other means is iteration.