On tafl: OpenTafl Notation

I mentioned in a previous post that one of the practical difficulties involved in computer implementations of tafl is the lack of a support infrastructure: anyone desiring to write a tafl AI must also write a tafl engine. Admittedly, this probably isn’t a significant obstacle to anyone with a real desire to write a tafl AI, but it does yield a great deal of duplication of effort. This is why my next step with OpenTafl is to build it into an engine into which other AIs can be plugged, and my eventual aim, hopefully at the end of this year, is to host the world’s first computer tafl tournament, where all the AIs so far written can compete against one another for bragging rights1. The timing depends mainly on how quickly I can write the features I need, but I hope to run the 1st Many Words Computer Tafl Open in late December2.

To do this, though, three sorts of notation are required. First, a method for communicating positions; second, a method for communicating rules; and third, a method for communicating moves. (A method for communicating moves already exists, thanks to tafl historian Damian Walker, but I propose some enhancements to it later.) The full version of my proposal is included at the end of this post.

First off, a method for positions: I propose something akin to chess’s Forsythe-Edwards notation, which is easily machine-readable, but also human-readable, and easy to compose by hand. Here’s an example, representing the brandub starting position:

/3t3/3t3/3T3/ttTKTtt/3T3/3t3/3t3/

Enclosed by slashes are rows. Lowercase letters represent pieces from the attacking side. Uppercase letters represent pieces from the defending side. (Besides t: taflman and k: king, my proposal also includes n: knight and c: commander, for Berserk-variant tafl.) Numbers represent that many empty spaces.

To communicate rules, there’s very little choice but to do so exhaustively. Clever use of defaults can somewhat alleviate the issue. Here is a proposed OTN rules string for Fetlar tafl:

dim:11 atkf:n start:/3ttttt3/5t5/11/t4T4t/t3TTT3t/tt1TTKTT1tt/t3TTT3t/t4T4t/11/5t5/3ttttt3/

It uses the dimension element (dim:11) and the start element (using an OTN position string) to mark the start and end of the rules; other elements come in between. The defaults suggested in the proposal, with the exception of atkf (attackers move first), are the rules of Fetlar, and other tafl games may be constructed as transformations from Fetlar. For instance, here’s brandub again:

dim:7 ks:n cenhe:n cenh: cenp:tcnkTCNK start:/3t3/3t3/3T3/ttTKTtt/3T3/3t3/3t3/

Brandub is Fetlar, except it’s played on a 7×7 board (dim:7), the king is not strong (ks:n), the center does not become hostile to the defenders when empty (cenhe:n), the center is not hostile to anybody (cenh:), and pieces of all types may pass over the center space (cenp:tcnkTCNK). Here’s Sea Battle 9×9:

dim:9 esc:e ka:n cenh: cenhe:n corh: cenp:tcnkTCNK corp:tcnkTCNK cens:tcnkTCNK cors:tcnkTCNK start:/3ttt3/4t4/4T4/t3T3t/ttTTKTTtt/t3T3t/4T4/4t4/3ttt3/

Sea Battle is Fetlar, except it’s played on a 9×9 board, escape is to the edge (esc:e), the king is not armed (ka:n), the center and corners are hostile to nobody, all pieces may move through the center and the corners, and all pieces may stop on the center and the corners.

Of tafl variants of which I am aware, the options in the rules string are sufficient to support all of them but one very esoteric alea evangelii variant3, and OpenTafl can theoretically support any variant constructed using OTN rules strings4. Other notable capabilities include the ability to define certain spaces as attacker fortresses, to support hostile attacker camps.

Finally, we move on to move notation. Building on Damian Walker’s aforementioned, excellent adaptation of algebraic chess notation to tafl rules (which, I should stress, is more than sufficient), I wanted to create a notation which requires a minimum of inference, and therefore slightly better suited to inter-computer communication. In effect, I wanted a notation sufficiently detailed such that a computer, operating with only a starting position and a list of moves, could accurately replay the game without having to know any of the rules. Since it is a notation with a lot of options, I provide a deeply contrived sample move record here, which uses almost every option:

Ne4-e6xf6 Ne6^=e8xe7/e9/cf8/d8-

The defending knight (uppercase N) on space e4 moves to e6, capturing the piece on f6 (having no special letter, it’s just an ordinary taflman). This is berserk tafl, so the move is not yet over. The knight on e6 jumps to e8 as its berserk move (^: jump, =: berserk), capturing the taflmen on e7, e9, and d8, and the enemy commander on f8 (as a special piece, it gets a prefix; as an attacking piece, it’s lowercase). This opens up a path for the king to reach the edge (-: king has a way to the edge).

You can read more, and peruse more examples, in the full proposal here: OpenTafl Notation. Feel free to leave a comment with your, well, comments.

1. And maybe a $20 Amazon gift card or something.
2. I hope to finalize the protocol in the next few months, and finish implementing it by the end of summer.
3. The one with mercenaries, pieces which start on the defending side but change sides when captured.
4. I haven’t yet written the code to parse them and generate new games, so I can’t say for sure. Thinking through some oddball variations, though, none strike me as OpenTafl-breaking.

Happy Birthday, John Moses Browning!

Happy Birthday, John Moses Browning!

He’d be 161 years old if he were alive today. You might know him as the designer of the M1911 handgun, which is dear to my heart. You might also know him as the designer of the Browning Hi-Power, the first double-stack mag 9mm pistol. It’s the first Wondernine, about fifty years before anyone started using the term. I’m not super fond of the Hi-Power, but that’s ok. The double stack handgun magazine idea has persisted into guns that I’m more fond of. Like my Glocks.

But John Moses Browning had many more ideas that you may or may not realize belong to him. He first came up with the tilting barrel lockup system, which is now used on just about every handgun1 in production. It beat out all other designs for the first choice because it works well and it’s cheap and easy to machine. It also doesn’t need a ton of lubrication, unlike most alternatives.

John Moses Browning also patented the notion of a slide on a self-loading pistol, and all of them have that these days. It’s just so darn useful. You can look at a lot of goofy pistol designs of the early twentieth century and see designers trying to work around this patent, and the ideas went nowhere once that patent expired.

But wait, there’s more! John Moses Browning’s first commercially-successful handgun design, the FN Model 1899, was striker fired. Yes, just like the Glock 17 currently sitting on my hip. Good old Browning. Getting ahead of the game there. Even though people of the time thought it was exceedingly odd for a pistol to not have a hammer.

John Moses Browning also designed a rather solid machine gun. The rifle caliber incarnation was lighter than the maxim and plenty reliable, and was quite popular as an aircraft weapon. The .50 BMG version, the venerable Ma Deuce, is still in service today. Introduced in the ’30s, it’s been used on just about every vehicle you can think of, from World War 2 fighters to tanks, to helicopters, to ships, to jeeps. If it’s a vehicle, it’s probably had a Ma Deuce on it. It’s even been used as a sniper rifle. Carlos Hathcock got a kill at 2,250 yards with one. Which is pretty impressive for a crew-served, tripod-mounted weapon.

John Moses Browning developed a ton of other stuff too. I could go on, but the above are the biggest things that are still taken advantage of today. Happy Birthday, John, and many happy returns. We certainly have gotten many such returns from you.

1.) Or at least all the popular, cool ones.

Milspec Challenge

Here’s one that came from Fishbreath. I’m a big AR-15 guy, and he suggested I spec one out as if I was going to issue it. So here goes. An issue AR-151, Parvusimperator-style.

We’ll start with the receivers. Both upper and lower receivers should be forged from 7075-T6 aluminum. Forged to keep it simple. The forging process is cheaper than the billet manufacturing process, and marginally stronger. Win-win. We’ll focus on the lower receiver and its components first.

The trigger group is a safe/semiautomatic/fully-automatic one. The AR-15 trigger group allows for a three-position selector without some serious modifications. The reader might wonder, ‘why not three round burst?’ My response is ‘why bother?’ The three round burst is the latest in a long line of devices designed at the urging of girly-man bean counters to force soldiers to not “waste ammo”. In the 1870s, the US Army didn’t issue the Winchester repeating rifles to the cavalry because the soldiers might waste ammo. Bolt action rifles around the turn of the 20th century had a magazine cut off, because soldiers might waste magazine after magazine of bullets. Both decisions were proven wrong. Discipline must be taught; it cannot be enforced by weapons. You might not always need ammunition, or fully automatic fire, but when you do, you really need it. So safe/semi/auto is the trigger group we’ll use. We’ll also specify an ambidextrous selector switch.

The receiver extension should be 1.14 inches in diameter, and should have six position detents on the underside. This part may also be called the “buffer tube” but it’s better to think of it as an extension to the receiver that gives more room for the bolt carrier to decelerate. It should be held in place by properly-staked castle nut. This will ensure that the castle nut will not back out on it’s own, but can be removed by an armorer if necessary. In terms of buffer internals, we’ll use chrome silicon wire springs (something like the Springco Blue model extra power spring) and an H32 weight buffer.

As for the stock, we’re going for the Crane3 SOCOM-pattern stock. This is heavier and sturdier than the standard collapsible stock, and comes with two waterproof storage compartments. These are perfect for storing batteries for the various issue electrics that will get attached to the carbine, as well as small bottles of lubricant to keep the gun running. It’s a convenient place to store some lubricant to make sure it’s available when needed.

There are a few other gubbins we need to specify. We’ll specify an ambi bolt catch and an ambi mag catch. Installing these in a convenient manner will take some reworking of the lower, but it can be done. Knight’s Armament and several of the fancy billet receiver companies have already done this. I’m not overly particular about most other small parts. Appropriate aluminum pins, etc. are fine. The one other thing to call out is the pistol grip. I hate the A2-type grip, so that’s right out. It’s too small and it has a pointless nubbin in a stupid place. Fortunately, there are lots of alternatives out there, and almost all of them are better. I’m a fan of the TangoDown BG-16 grip, as it fits the hand better and doesn’t have a stupid nubbin on the front in the wrong place, so let’s go with that.

That takes care of the lower. Onto the upper. We’re going to call for a 14.5″ barrel. Why 14.5″? Because it’s a military standard with lots of available data, and it’s shorter and handier than a 20″. This is a general issue carbine, so barrel length is going to be a compromise. Plus, that hot deathray M855A1 ammunition is designed around a 14.5″ barrel. It will have a 1:7 twist rate4 and a lightweight profile. Why a lightweight profile? Because I don’t see a point to anything heavier. A lightweight barrel was perfect for full-auto ambush drills in Vietnam. A lightweight barrel will take something like 900 rounds before it fails, and that’s if you reload as fast as you can and never stop firing. That’s about three times a basic ammo load for the average soldier. This is more than adequate for a select fire carbine. It’s not a support weapon built for sustained automatic fire. The barrel should be made of 4150 chrome molybdenum steel. And yes, Virginia, it will have a chrome lining.

The gas system should be a carbine-length one, or about seven inches from the receiver to the gas block. Again, this is the standard on a 14.5″ barreled gun. The gas block should be a low-profile unit held onto the barrel with a pair of taper pins. This is the most secure method of securing a gas block to a barrel. It should also have a bayonet lug at the front, since the length is right for a bayonet. And bayonet fighting teaches a lot of good things to troops, plus it’s occasionally very useful on the battlefield. Just ask the British. For they bayonet lug to work, the gas block has to be as long as a front sight block, but this isn’t hard to do.

For handguard, we actually want a 9″ long unit, even though our specified gas system is only 7″ long. This will cover most of our low profile gas block, giving us more room for a grip and accessories, but still let us access the bayonet lug. We want a quadrail handguard, because picatinny rails are the standard accessory mount. There are some alternatives out there, namely keymod and mlok, but they don’t totally replace the picatinny rail. We see no reason to adopt two mounting systems, so we’ll stick with the picatinny. I went back and forth quite a bit on which handguard design to call out here. I’m rather fond of the notion of a monolithic design, where the rail and upper are one continuous piece. However, this is generally heavy, and doesn’t let us change the handguard out at all. One of the joys of the AR design is just how modular it is. We’re using a very different handguard design than my father would have found on an AR-15, and we’d like our sons to be able to apply their own wisdom. So let’s skip the monolith, cool though it might be. We want a durable design though, and since we’re covering our gas block, we’ll need something tube-style, i.e. free float. No mall ninjas, we’re not getting a free floated barrel for accuracy benefits. It’s a service carbine. Don’t kid yourself–no one cares about tiny group improvements. We just need it to work with our gas block system. We’ll take the Daniel Defense DDM4 rail, in the 9″ length. This is an off the shelf product, just like everything else on our list. It’s lightweight, sturdy, and easy to install. It will still let us access the bayonet lug, but give us plenty of room for lights and lasers as needed. It also has quick detach sling swivel sockets built in, which is convenient. Saves us a part.

So far, so good. There are a few more notes that we’ll make for the upper. The muzzle device should be a three-pronged-style flash hider, since these seem to work the best. It should also be a suppressor adapter. Since we haven’t specified a suppressor, we won’t specify a muzzle device. But a good example would be the Surefire SF3P, which would work with Surefire’s excellent line of suppressors.

You may have guessed we’ll be using a “flat-top” or “A3-style” upper receiver, and you’d be right. That’s prime optic mounting real estate. And we’ll have the standard folding dust cover on there too. Yawn. Tell me something interesting, you say? Fine. We’re specifying our uppers to not have a forward assist. Why? Because it’s a stupid, useless, protruding, weight-adding piece of junk. Get rid of it. It makes the design simpler. It makes the design lighter. It’s how Stoner originally intended it to be. And stupid Army was wrong to insist on such a device. If you’re in a situation where you need to force the bolt closed, then your gun is FUBAR, and unsafe to use. Any case so screwy that you have to force it into the chamber because the buffer spring won’t do the job has no business in your gun. Yes, you can force a fucked-up, bulged case into an M1903, M1 Garand, or M14, but that doesn’t make it a good idea. Or even a military requirement. The M1918 BAR has no such capability, but troops loved the BAR all the same. Look, when both John Moses Browning and Gene M. Stoner don’t think it’s needed, it’s not needed.

Didn’t see that coming, did you?

Now for the guts of the rifle. But first, the charging handle. Surprise, the stock one is fine. It doesn’t need ambi anything. It’s already ambi. It’s on top of the freaking gun, for crying out loud. Fine as is.

Anyway, the guts. Or, more specifically, the bolt carrier group. We’re going to call out somewhat nonstandard parts here. No, we’re not going to retrofit a piston. There’s already one there. It’s inside the carrier, you dumb idiot. We’re going to use a specialty bolt carrier and bolt, specifically the Lewis Machine and Tool Enhanced Bolt Carrier and Enhanced Bolt. Why? Well, let’s take a look at our system, here. We have a shorter gas system length than Stoner originally specified, so we’re getting more gas pressure than Stoner originally designed around. The M193 ammunition that was originally used had an average chamber pressure of 52,000 psi. But we’re calling for something like M855A1, which takes advantage of more consistent modern powders to increase the average chamber pressure to 63,000 psi, which of course means more gas pressure for the system. Plus, we like suppressors, which means yet more gas pressure. What does all this gas pressure mean? Well, it means we’ve got more velocity on the bolt, which increases the likelihood that the bolt will try to unlock to early, which puts a shear and bending load on the bolt lugs. Surprise, this is bad for bolt life. The Enhanced Bolt Carrier has more vents and a revised cam path to reduce pressure and slow unlocking of the bolt. The revised bolt has a different extractor, using two springs instead of one, which is designed to give longer spring life. The lugs are redesigned for added strength as well. The end result is a longer-lasting system. Plus it’s a slightly not-stock part, so I’m not just picking a rifle off the rack here and calling it good.

So how is the rifle issued? Well, it comes with an issued optic, which we haven’t chosen yet. But there will be an optic. There will be a two-point, quick-adjust sling. More convenient than a standard carry strap type sling that your grandfather had on his M1 Garand. There are three rail panels issued. I prefer the Tango Down units, but the exact model isn’t very important. Just something so that the picatinny rail doesn’t cut your hands up after lots of campaigning. The rifle is also issued with a set of folding back up iron sights. Specifically the Troy industries M4-style front and their standard (non-dioptic) rear sight. The rear sight is “A1 style”, i.e. it’s has two apertures, but is not adjustable for elevation. Nor should it be. It should be durable and simple. It should be zeroed and kept safely in reserve. It should not be complicated. It is a backup sight on a carbine, not iron sights on a National Match rifle. Keep it simple.

The carbine is issued with iron sights and optic fitted and properly zeroed. Since we’re not dumb, our weapons racks are designed to hold the carbines with optics mounted, so soldiers can trust that the carbine they draw from storage has a good zero.

Some of you may be wondering what I would do if you made me get an AR-15 that I couldn’t piece together as above. What if you had to buy something off a shelf, all-up, Parvusimperator? Simple. I’d call Knight’s Armament Corporation, and ask if they give a bulk discount on large carbine orders. So there. Smartass.

1.) I’ll be using AR-15 as the generic term here, so as not to sound like I’m specifying brand or model details. Also, the AR-15 designation came first.
2.) 5.6 oz weight.
3.) NSWC Crane designed, produced by LMT and B5 Systems.
4.) I.e. one complete rotation in seven inches of travel

The Crossbox Podcast: Episode 3

This time on the Crossbox Podcast, we discuss Wargame: AirLand Battle, some indefensible positions, and our arms choices for a sadly underrepresented type of competitive shooting challenge.


(Download)

Recommended reading:

Fishbreath Plays: SimplePlanes

I’m a fan of sandboxes.

Many of my favorite games are sandboxes, or have a sandbox element: StarMade is altogether a sandbox, Rule the Waves gives you plenty of latitude to build your own navy and your own history, Falcon 4 lets you play with someone else’s castle or kick it down as you please, and Command Ops, though less open than the rest of this list, still gives you the chance to do largely as you please inside whatever scenarios you can find or make.

So, when I saw that SimplePlanes, an aeronautics sandbox by Jundroo, who made one of my favorite physics puzzle games on Android, was now on Steam, I had to give it a whirl. We’ll get the bad out of the way first: it’s a port of a mobile game, and so the interface is not as powerful as, say, Kerbal Space Program’s (which is the natural comparison), and the parts list isn’t quite as lengthy as I’d like. That said, the flight modeling is excellent for a wee building game like this, and as with any building game, there are some superb examples out there. For another downside, there isn’t a lot to do; as far as I can tell, there isn’t a way to add new maps or new challenges, which is a shame. Either one would add a ton of longevity to the game. Finally, the combat bits could be expanded upon a little—damage is very binary right now, and hitting a plane with anything will usually pop it.

With that out of the way, let’s talk about the good. I’m going to do this by discussing some of the things I have built; namely, the aircraft carried by the zeppelin Inconstant, from Skypirates: the Kestrel, Falcon, Vulture, Albatross, and Gorcrow. All are based off of real-world designs. The Kestrel is a riff on the XP-55 Ascender, the Falcon is based on any number of (generally French) twin-boom pusher designs of the immediate prewar and postwar periods, the Vulture is a recreation of the Sh-Tandem, a Russian ground-attack design, the Albatross is a Blohm & Voss-inspired asymmetric design, and the Gorcrow is more or less every medium bomber between 1930 and 1945. (Note that I made a few modifications to fit my zeppelin-borne aircraft requirements and restrictions, which you’ll find at the end of this post.)

The Kestrel is one of my favorites, owing to its handling characteristics. The twin coaxial engines, with a total of 1,500 horsepower for only 6,000 pounds full load, push it to speeds in excess of 400 miles per hour. It fields an excellent anti-aircraft punch, and has superb maneuverability at high speeds. Its weakness comes mainly in its low-speed handling: its vertical stabilizers are small, to limit the drag they add, but this creates a prominent tendency to yaw instability at landing speed. As such, it’s a design that’s likely very prone to landing mishaps, and requires a steady hand on the stick and active feet on the pedals to put onto the skyhook. Though the design is unusual, it flies very well, responding smoothly with little adverse yaw or other undesirable handling characteristics. At the edges of its envelope, it can sometimes get the pilot into trouble; unrecoverable flat spins are a possibility.

In design, the Falcon is much more conservative: it treads on no unusual aeronautical ground. The twin-boom design provides some added damage resistance; losing the back of one boom isn’t immediately fatal. It’s powered by a 1,250-horsepower engine, about the largest single engine we can expect to find in the world of Skypirates, and has a maximum takeoff weight of about 9,000 pounds. (The version posted is overweight, and needs to be slimmed down.) With rather a lower power-to-weight ratio, it only reaches about 320 miles per hour, significantly slower than the Kestrel. Although its gun armament is less heavy than the Kestrel’s, it makes up for that loss in firepower by mounting several racks for air-to-air and air-to-ground rockets. Its flight characteristics befits its character: rugged and dependable, with very few surprises, although it does have a tendency to stall the lower wing in tight, low-speed turns.

The Vulture is probably the one whose looks most closely match its intended purpose. A light bomber and ground-attack plane, the Vulture is the usual aircraft of choice when Inconstant needs to make a show of force. Its unusual design gives it a great deal of lift for its footprint, and permit all of its hardpoints to be placed along the same axis as its center of mass: dropping weapons doesn’t change its balance at all, making it a forgiving platform when carrying large weapons. The centerline mount supports an aerial torpedo, but only when the plane is air-launched—aerial torpedoes are too long otherwise. (Note that Inconstant doesn’t carry Vultures equipped with landing gear.) To my surprise, the Vulture’s handling is docile in the extreme, even when fully loaded, and turns downright peppy when empty, even though it only sports a 1,000-horsepower engine. I ran into no surprises anywhere in the envelope.

The Gorcrow, powered by a pair of 700-horsepower engines, is a conventional medium bomber, with all that implies. Its handling is ponderous, but it can sling a heavy load of bombs or rockets, or three aerial torpedoes, making it Inconstant‘s heaviest hitter by far. Three gun positions, one at the back of each engine nacelle, and one atop the fuselage, round out its weapon fit. Again, an unsurprising performer—not spritely, and predictable in its handling. Unlike the other aircraft on the list so far, its bringback weight is somewhat less than its full fuel empty weight. Inconstant being fairly light on avgas stores, her Gorcrows are generally only launched when absolutely necessary, to avoid having to dump fuel overboard before landing. The in-universe version has a glazed nose, but I haven’t figured that out yet.

The Albatross, powered by two 800-horsepower engines, is a long-range transport aircraft, and also one of my favorites for its sheer unlikeliness. Although Herrs Blohm und Voss built similar aircraft for the Luftwaffe during the Second World War, I was a little concerned that the flight engine wouldn’t handle it well, given the presumably-complicated aerodynamics at play. To my surprise, it worked fine, and isn’t even particularly touchy. Anyway, the 1,600 combined horsepower pushes her to a good turn of speed when empty, nearly as fast as the Falcon, and pegs her total cargo capacity at just over four tons. The asymmetry does mean she has some slight balance concerns, but in-universe, it’s easily trimmable. Low-speed handling is good, thanks to the fat wings. Even with the asymmetric nature of the pitching and yawing forces, owing to the offset position of the empennage, it has surprising maneuverability when empty. Same remark about the glazed nose.

Now, I didn’t even get into the built-in challenges, or into serious modding. I was just messing around, and in the course of learning how to build airplanes, building these, and coming up with my flight reports, I got more than my $10 of fun. I also got at least $10 of storytelling value out of it: I now have quirks and flight characteristics in mind better for each of these planes than I did before, and I can work that into stories.

If you’re looking for a plane construction sandbox, look no further.

Fishbreath’s Zeppelin-Borne Aircraft Construction Rules for SimplePlanes

  1. Airframes should range between about 3 tons and 12.5 tons full load.
  2. Aircraft must be shorter than 70 feet and have a wingspan less than 110 feet.
  3. No single engine may develop more than 1250 horsepower.
  4. Aircraft must have a bringback-weight stall speed of 110mph or less. (The other 20-30mph to get down to zeppelin speed is assumed to come from flaps.)

Squad Support Weapons

Ack, the board has become overrun with Taflmen. Thanks a lot, Fishbreath. Fortunately for you, dear reader, I have just the solution:

Underneath our starry flag, Civilize ’em with a Krag!
And return us to our own beloved home.

Wait, no, wrong century. Krags are rather old fashioned. What about more modern weapons? Well, we’ve already opted for the kickass HK 416 for general issue carbine. Let’s look at what our soldiers have in terms of lightish support weapons.

We’ve established an eight man dismount squad, nominally comprised of two fireteams of four. Let’s talk basis of issue of some support weapons. We’ll also flesh out a few more choices.

We’ve established our choices of rocket launchers and anti-tank missiles in the Panzerfaust 3 and the FGM-148 Javelin, and will not repeat the reasoning here. In any case, we’ll call for one Javelin CLU and one PzF 3 computerized Dynarange sighting unit per squad. In general, we’d expect two Javelin missiles and two Panzerfaust 3 rockets, some combination of the PzF 3T anti-tank rocket and the PzF 3B demolition rocket. This is some of the joy of a mechanized force: the IFV can carry the weapons when you don’t need them.

We’ll also allocate each fireteam one underbarrel grenade launcher. This needn’t be carried all the time, but it’s a quick way to give the squad some indirect firepower. For underbarrel grenade launcher, we want something that needs nothing beyond a picatinny rail for a mounting solution. Our choice is the HK AG36. It’s a 40mm grenade launcher that is as modular as we need, plus it has a sideways-opening break action that lets it accomodate longer specialty 40mm rounds. And yes, it attaches to picatinny rails.

You’re probably waiting for the machine gun choice though. Every squad needs a machine gun. Or two. Or three, even. We’re going with two, one per fireteam. Again, nothing surprising here. Now we ought to choose a machine gun. There are many to choose from, but first we ought to determine the caliber. Nato-wise, we’ve got 7.62x51mm and 5.56x45mm. All of the advantages of the smaller, lighter round are apparent. Troops carry more, full stop. But this is a mechanized army, and this brings a wrinkle. The CV90, like nearly all other self-respecting IFVs, has a 7.62mm coaxial machine gun, and provision for several hundred rounds of 7.62mm ammunition in belts. The infantry, of course, have 5.56mm carbines, but those operate with “loose”1 5.56mm ammunition in magazines. So, with a 5.56mm squad automatic weapon, we have three kinds of small arms cartridges to ship, according to the logistics tables: 5.56mm magazines, 5.56mm link, and 7.62mm link. If we go with 7.62mm, we drop this down to two kinds, plus the infantry can share ammo with the coax. One big pool of reserve ammo. So we’ll go with this.

Now, the question becomes, which 7.62mm NATO machine gun to choose? Here, weight becomes an important factor. There are lots of excellent, big, heavy machine guns out there, built for lots of abuse and sustained fire. Chief among them is the excellent FN MAG 58.2 This is our coaxial- and pintle-mounted gun of choice, but it weighs 11.79 kg (about 26 lbs). Nicely accessorized with modern rails and a heat shield in the M240B variant brings us up to 12.5 kg (27.6 lbs). Both weights are unloaded and without optics, and we can see how it’s hard for a MAG gunner to move with his squadmates. He can’t assault positions very well. There is a lightened version available, the M240L, which uses expensive titanium parts to cut weight, and manages to get under 10 kg (21.8 lb) if you reduce the barrel length to about 20″ and use a collapsible stock.

Can we do better? Sure, provided we give up some durability for lots of sustained fire. And this is ok for our needs. Remember, this is for the squad automatic weapon. It’s not for sustained fire from a vehicle or a weighted tripod. It’s for support of the close attack. Fire and movement. Plus, the IFV is going to be a better base of fire anyway. The Russians have a superlight machine gun in the PKM, which comes in at a svelte 7.5 kg (16.5 lbs). But it’s in 7.62x54mm R. The R is for Rimmed, and while archaic, the brilliant Mikhail Kalashnikov used it to his advantage in the feeding mechanism. One might think to convert it to 7.62x51mm Nato, but then we gain wait. The Poles have done this in the UKM-2000, and that weighs almost a full kilo more, coming in at 8.4 kg (18.5 lbs). Oof. That’s still lighter than the M240L though.

We might think to try the M60, but that comes in around 10.5 kg as well. No better. But SOCOM has some ideas. They had FN scale up the Minimi/M249 light machine gun to take the 7.62mm Nato round. This is the FN Mk. 483, and it fits the bill for a reliable modern 7.62mm machine gun that’s lightweight. SOCOM approved! And it comes in at 8.2 kg (18.3 lbs). Not bad. Beats out the German HK121 as well.

So is that it? Have the Belgians taken the gold? Not quite. There’s still the Israelis to think about. And their Negev NG7 is another scaled-up 5.56mm machine gun. But it’s phenomenally light. Comes in at 7.6 kg. That’s almost PKM weight, and with rails and an adjustable stock to boot. We have our winner. Mazel tov, IWI.

Oh, and if you do have a song celebrating more modern weapons and using those to civilize terrorist scum, drop us an email. Or, write to us at:

c/o This song should have been at Fishbreath’s Wedding
1 Parvusimperator Way
Imalwaysright PA, 16046

1.) I.e. unbelted
2.) You may be more familiar with the American version, the M240.
3.) Not to be confused with the Mk 48 torpedo.

On tafl: what next?

In my last tafl post, I remarked that I’m nearing the end of my current OpenTafl sprint. Now, it’s wrapped up. Here’s what I finished:

  1. Write about 70% of a new evaluation function. It’s designed to easily accommodate tweaks and modifications, which will undoubtedly be required as I learn more about the game and uncover positions that the current function evaluates incorrectly.
  2. Move OpenTafl into its own repository, so I can publish the source.
  3. Package and test OpenTafl for binary distribution.
  4. Rewrite exploration to generate and sort moves prior to generating states.

All three of these are done, and OpenTafl downloads and source releases can be found at the Many Words Softworks site for OpenTafl. Play and enjoy. For questions, comments, or bug reports, please leave a comment, or drop me an email. (My contact information is in the About section at the main page.)

Here’s what’s on the list for the next sprint:

  1. Support for easy position entry. This will require creating some sort of short-form positional notation, akin to FEN from the chess world.
  2. External AI support, a la several chess engines. This will require defining a protocol by which OpenTafl can communicate with an external AI, including communicating things like the rules of the variant in question.
  3. Partial time control, so that OpenTafl can be limited to a certain number of seconds per turn.
  4. Some search improvements and tweaks. The prior three features are important stepping stones to this one; they’ll let me test OpenTafl against itself by quick-play tournaments, and therefore verify what sort of impact my changes are having.

As you can see, the next sprint is less about the nitty-gritty AI research and more about foundational work in developing OpenTafl as an engine for future AI research—my own and others. Ultimately, that’s a more important task.

On tafl: more optimizations

Having spent quite a lot of time on another code project, it’s high time I got back to a little tafl.

Remember where we left off: board states represented as arrays of small integers, and taflman objects inflated as needed during game tree search. It turns out that inflating and deflating taflmen is also a potential source of slowness, so I went ahead and removed that code from the game. (It also greatly simplifies the process of moving from turn to turn.) Wherever I would pass around the old taflman object, I now pass around a character data type, the sixteen bits I described in the previous tafl post.

This revealed two further slowdowns I had to tackle. The first, and most obvious, was the algorithm for detecting encirclements. For some time, I’ve known I would need to fix it, but I didn’t have any ideas until a few weeks ago. Let’s start with the old way:


for each potentially-surrounded taflman:
  get all possible destinations for taflman
    for each destination:
    if destination is edge, return true
return false

Simple, but slow. In the worst-case scenario, each taflman has to consider every other space on the board, and look briefly at every other space from each rank and file (where n is the number of taflmen and b is the board dimension):

O(n \times b^2 \times 2b) = O(nb^3)

I was able to cut this down some by running an imperfect fast check: if, on any rank or file, the allegedly-surrounded side has the taflman nearest either edge, that side is not surrounded. That had implications for a better algorithm, and sure enough, I hit on one.


list spaces-to-explore := get-all-edge-spaces
list spaces-considered := []
for space in spaces-to-explore:
  add space to spaces-considered
  get neighbors for space not in spaces-to-explore and not in spaces-considered
  for each neighbor:
    if neighbor is occupied:
      if occupier belongs to surrounded-side:
        return false
      else continue
    else:
      add neighbor to spaces-to-explore
return true

More complicated to express in its entirety, but no more difficult to explain conceptually: flow in from the outside of the board. Taflmen belonging to the surrounding side stop the flow. If the flow reaches any taflman belonging to the allegedly surrounded side, then the allegedly surrounded side is, indeed, not surrounded. This evaluation runs in a much better amount of time:

O(b^2)

Astute readers might note that, since the board dimension is never any larger than 19 at the worst, the difference between a square and a cube in the worst-case runtime isn’t all that vast. Remember, though, that we need to check to see whether every generated node is an encirclement victory, since an encirclement victory is ephemeral—the next move might change it. Running a slightly less efficient search several hundred thousand to several million times is not good for performance.

I found another pain point in the new taflman representation. The new, array-based board representation is the canonical representation of a state, so to find a taflman in that state, the most obvious move is to look through the whole board for a taflman matching the right description. Same deal as with encirclement detection—a small difference in absolute speed makes for a huge difference in overall time over (in this case) a few tens of millions of invocations. I fixed this with a hash table, which maps the 16-bit representation of a taflman to its location on the board. The position table is updated as taflmen move, or are captured, and copied from state to state so that it need be created only once. Hashing unique numbers (as taflmen representations are) is altogether trivial, and Java’s standard HashMap type provides a method for accessing not only the value for a given key, but also a set of keys and a set of values. The set of keys is particularly useful. Since it’s a canonical list of the taflmen present in the game, it saves a good bit of time against looping over the whole of the board when I need to filter the list of taflmen in some way.

Those are all small potatoes, though, next to some major algorithmic improvements. When we last left OpenTafl, the search algorithm was straight minimax: that is, the attacking player is the ‘max’ player, looking for board states with positive evaluations, and the defending player is the ‘min’ player, looking for the opposite. Minimax searches the entire game tree.

Let’s look at an example, a tree of depth 3 with max to play and a branching factor of 3, for 9 leaf nodes. The leaf nodes have values of 7, 8, and 9; 4, 5, and 6; and 12, 2, and 3. We can express the minimax perspective on this tree mathematically:

max(min(7,8,9), min(4, 5, 6), min(12, 2, 3))

That is to say, max makes the move which gives min the least good best response. Remember, though, that we search the tree depth-first, which means that in the formula above, we move from left to right. This leaves us with some room for cleverness.

Consider this:

max(min(7,8,9), min(4, x, y), min(12, 2, z))

Does it matter what the numbers at x, y, and z are? No: by that time, we’ve already established that the subtrees in which they appear (with best possible values 4 and 2) are worse than the first subtree (with known value 7). Therefore, we can stop exploring those subtrees. This is known as ‘pruning’.

Pruning is good, because, when done correctly, it saves us work without dropping good moves. Alpha-beta pruning, the kind described above, is known to produce identical results to minimax, and, in the ideal case, can search twice as deep. (So far, it’s only given me one extra ply, though; the case isn’t quite ideal enough for more.) Other kinds of pruning may find their way in later, and will take some more careful thinking to avoid pruning away potentially good branches.

What is the ideal case, then? We want to explore the best moves first. A cursory examination of the example case above provides the reasoning. If we explore the subtrees in opposite order, we can do no pruning, and we get no speedup. This presents us with a chicken-and-egg problem: if we could easily and programmatically determine which moves are good, we wouldn’t need to bother with variants on full-tree search at all.

Fortunately, the structure of a tree gives us an easy out. Most of the nodes in any given tree are at the bottom. Consider a simple example, with a branching factor of two. At the first level, there’s one node; at the next, two nodes; at the third, four nodes; and at the fourth, eight nodes. In every case, there are more nodes at the deepest level than at all the levels above combined. The difference becomes more pronounced with greater branching factors: a tree with a branching factor of 30 (which approximates brandub) has a distribution of 1/30/900/27,000. So, it follows that the large majority of the work in a game tree is expanding the game states at the target search depth, and evaluating those states; the work higher up the tree is almost trivial.

Take that and add it to this claim: the best move at any given depth is likely to have been one of the best moves at the immediately prior depth, too. We can use those facts together to figure out the best ordering for our moves at our target depth: search to the depth prior, keep track of the best moves at that depth, and search them first. This approach is called ‘iterative deepening’: generally, you start at depth 1, and use results from previous levels to order each node’s children. OpenTafl accomplishes this with a structure I’m calling a deepening table, which is generated for each . The deepening table is a list of maps, one per depth. The maps relate a position hash to an evaluation done at its depth. On each deepening iteration, the exploration function generates successor states, then sorts them according to the data stored in the deepening table before exploring further. (There’s some easy performance on the table here—since creating a full-on successor state is a non-trivial operation, I can probably buy myself some easy speedup by generating moves alone, sorting those based on the positional hashes which would result from making those moves, and only generating states immediately before exploring them. This would probably save a good bit of time by never generating states which would have otherwise been cut off by alpha-beta pruning.)

Implementing the deepening tables put me on the scent of another major optimization, the transposition table. A transposition table stores values for previously-visited states, along with the depth each state was previously searched to. (If we’re searching six plies deep and previously encountered a state at depth four, that state was only searched to a depth of two. If we encounter the same state at depth two, then if we use the cached value, we’ve left two plies of depth on the table.) Hits in the transposition table early on in the search save us expanding whole subtrees, which yields many fewer node expansions required per search, and lets us reach deeper more easily.

The transposition table, since it persists through the entire game, must be limited in size by some mechanism. OpenTafl’s transposition table is an array of Entry objects, with a fixed size in megabytes. The array is indexed by positional hashes, modulo the size of the table. When indices collide, OpenTafl decides whether to replace the old value based on its age (older values are more readily discarded) and the depth to which it is searched (deeper searches are kept, if both are equally as fresh).

That brings me to the end of another marathon tafl post. Stay tuned for another one—probably a much shorter one—in the not-too-distant future, as I wrap up work on this sprint of OpenTafl, with an eye toward the first public code and source release.

Mechanized Infantry Squads and Platoons

Let’s have a little fun with some military theory. How do we define a squad?

A squad can be thought of in a few ways. We tend to think of a squad as a basic combat unit, commanded by a single man. Working out span of command issues is a royal pain. Since we’re trying to keep this firmly academic, and since we don’t have a handy lab to test things, we’ll use a simple litmus test: the sports field. For example, American football tends to put eleven men on the field at a time per side. We’ll neatly sidestep any attempt to be dragged into discussions of a heap problem here, and simply check for a sport example as we work on numbers.

Our sports litmus test provides some nice options for us. Since this a mechanized squad, it’s important to think about the parent vehicle as well. Most IFVs hold six or seven men. We’ll take the lower figure, being cynical sorts. It’s also not especially clear what the CV9035’s capacity is; this tends to vary from six to eight based on configuration. Regardless, our first thought might be to take the squad as the sum of the dismounts of the vehicle and the crew needed by the vehicle, which gives us a size of nine or ten. This passes our sports litmus test. However, it’s been tried and rejected by several real-world armies. The issue seems to be that the dismount element is too small. We cannot guarantee that we’ll always have the vehicle to work with the dismount team, and given the realities of the battlefield (casualties, people on leave, casualties, people off on training assignments, casualties), the dismount team is likely to be quite a bit smaller in practice. We’d have to combine dismount teams across vehicles anyway, so we may as well formalize the organization and give the men practice at working together and rapidly forming up from the dismount.

With that settled, we come back to the question of how big the squad should be. Let’s look at some historical examples, bearing in mind we’ll have to fit them into to vehicles. The United States Marine Corps squad is probably the most successful, remaining a standard 13 men for over 70 years. This squad is comprised of three fireteams of four men plus one squad leader. This is also the largest squad that I’ve found good historical record of, so we’ll take it as a rough maximum. Give or take one or two is probably ok, since we’re trying to avoid stupid pedantry about heaps, but much bigger is probably a bad idea if we’re still going with the squad paradigm of a single commander. The US Army has had a couple squads since the Second World War. Until the late seventies, the US Army squad was eleven men: one squad leader plus two fireteams of five men each. Afterwards, the squad was revised downward to nine; the fireteams now consisted of four men. This reduction in size may have been to deal with reduced manpower in the wake of the end of conscription, or to better fight in vehicles.

Both the US Army and the USMC favored keeping the squad leader separate from the fireteams he commands, but not all armies saw it that way. Both the British and the Germans favored keeping the squad leader as an organic component of one of the fireteams. He functions as both squad leader and fireteam leader. The British Army of World War II featured a ten-man squad, though this was before they hammered out the four man fireteam concept. It has since been reduced to eight, again featuring two fireteams of four. During World War II, the Wehrmacht moved from a twelve man squad to a ten and eventually a nine man squad for reasons of dwindling manpower. They tended to feature an asymmetric, ad hoc grouping of machine gun(s) and assistant gunner(s) in one team and the riflemen in another. But we can note that most nations by now have moved to the four man fireteam, and then the squad is some multiple thereof. The Germans also use eight man squads now, usually.

Why the four man fireteam? Well, we might think about how small a team we can get in combat and be useful. One man is entirely too vulnerable. We can start with two, but we can quickly see that three men is a much more useful standard. More support, ability to work with the vast majority of crew served weapons, plus the ability to take a casualty and still be at least semi functional. Several forces have used the three man ‘cell’ as the basis of squad organization. The problem is that it doesn’t take casualties well, and will force frequent reorganization. Four men teams work better in terms of absorbing inevitable casualties, and this is borne out by the historical record. The Marine squad was originally a copy of the circa 1938 Chinese organization of a leader and three cells of three, but inevitable combat casualties forced them to add a fourth man to each team. More than four likely causes more difficulties for low-level, often improvised span-of-command, and doesn’t quite add enough to justify the trouble and logistical expense. The Rhodesian Light Infantry usually used four man squads, since this was all they could fit on their Alouette helicopters. They found this adequate for single taskings and tended not to remain in the field after multiple contacts, so the lack of casualty resistance wasn’t an issue. Fine for COIN, perhaps, but less than ideal for, say, Guadalcanal.

The question now becomes two or three fireteams, and whether we want the squad leader to be a part of a fireteam. We can see a generally downward trend in squad size, with the exception of the USMC squad. The USMC is still a light infantry force, which is to say they march to combat. Most other armies have to deal with some proportion of troops that have to fit in APCs or IFVs for their transport , and armored vehicle capacity isn’t very good, especially once you factor in all the equipment modern have and the body armor that they wear. So let’s return vehicle capacity.

We’ve opted for the CV9035. The CV90 family is highly configurable as we’ve seen. One of the choices is how you configure the interior. Depending on choices for internal layouts, seating arrangements of six, seven, or eight are available. We’ll make whatever internal stowage or secondary systems sacrifices are needed to have eight dismounts, which neatly dovetails with a pair of standard, four-man fireteams. Given that the CV90 is about as big as a PzKpfw VI Tiger I, I don’t see that too much would need to go to accommodate the seats. As we’ll soon see, this means we can have fewer vehicles per platoon, which is a nice win for cost and maintenance. We’ll settle for strapping things to the outside if we must.

Eight man squads also clearly pass our sports rule of thumb check. One fewer than the baseball grouping of nine is very good. From a bureaucratic/cohesion standpoint, we might want to count the IFV and vehicle crew as part of the squad, and expect the dismounts to help with maintenance. In this case, we have eleven men in the squad, which is the requisite men on the field for American football. We’re good regardless of how we break this down.

Accepting an eight-man (dismount) squad, with integrated squad leader, would let us have three squads in a platoon with only three vehicles, rather than the four that the US Army mechanized platoon has for its nine-man squads. We could conceivably go up to four squads, but that’s a more unwieldy platoon for the young lieutenant. As it is, he can opt to give each squad an IFV, or group the IFVs together in a sort of light tank platoon. Here, he has four elements to command, though he might also opt to reorganize the nominally eight man squads, perhaps into two twelve-man units. Squad organization is mostly bureaucratic anyway. Lieutenants are expected to be flexible and aggressive if nothing else.

Later we’ll get to platoon and squad level equipment tables.

On tafl: practical difficulties

In the past, I’ve written about the problem of tafl AI mainly in terms of its theoretical challenges. Those challenges remain, but can be mitigated with clever algorithms. (That work is in progress.) The theoretical challenges, however, are only half of the issue—and, I’ve been thinking, they may not even be the big half.

Consider go AI. Go is widely regarded as computationally intractable for traditional AI techniques. As such, go AI fits one of two patterns: probabilistic and machine-learning approaches, and knowledge-based approaches. The former is interesting in its own right, but doesn’t bear on our problem. OpenTafl is not currently built with an eye toward probabilistic or machine-learning techniques1. Rather, we’ll look at the more traditional school of go AI. The knowledge-based approach takes expert knowledge about go and applies it to traditional AI techniques. Rather than exhaustively searching the game tree—something which becomes intractable very quickly, given the branching factor in go—a knowledge-based AI applies heuristics and rules of thumb at each board state to prune uninteresting branches, and reduce the branching factor sufficiently so that the pruned tree can be explored to a useful depth.

How does one get this knowledge? One plays go. Knowledge-based AIs are generally written by good go players who are also programmers. The player/programmers use their domain knowledge to design sets of guidelines for deep exploration which work well, and to decide which sorts of starting states each guideline can be applied to. Though chess AIs deal with a much more tractable tree-search problem, they also use some knowledge-based augmentations to increase depth around interesting series of moves. Chess knowledge is a little different than go knowledge, however; there are formal answers to a large number of chess questions. Piece values are well-known, as are the pawn-equivalent values of certain important board control measures like pawn structure and rooks on open ranks.

Both of the best-studied games in AI, then, use some domain knowledge to push the search horizon deeper, whether by encoding the sorts of heuristics a certain player uses, or by encoding formal knowledge about the game itself. Chess goes further by packing in databases of solved endgames and good openings, which increases the effective search depth at interesting parts of the game2. Let’s think about applying these tactics to tafl.

Can we work like we might in go, using expert player knowledge to inform an AI? Yes, technically, but there’s a huge obstacle: tafl games are a tiny niche in the global board game market. My rough estimate is that there are perhaps a few thousand serious players. I wouldn’t be very surprised if fewer than ten thousand people have ever played a full tafl game, whereas I’d be highly surprised if more than a hundred thousand have. Writing about tafl tactics is therefore in its infancy5. There’s very little in the way of reading material that an average player like me could use to develop more in-depth knowledge, and, as far as I know, there are no other tafl players with a computer science background who are working on the problem of tafl AI.

Can we work like we might in chess, then? The answer here is simple: a categorical no. The amount of formal knowledge about tafl games is even smaller than the amount of non-formal knowledge about them6. Endgame databases infeasible7>, and nobody has carried out study of good openings for various taflman arrangements on boards of various sizes. Beyond that, we can’t formally answer questions about even the most elementary pieces of tafl strategy. In chess, I can say with some certainty that a rook is worth about five pawns. Given that favorable board position and pawn structure are only worth about a pawn or a pawn and a half, if I’m going to trade my rook for good board position, I should try to get at least a minor piece (a knight or bishop) and a pawn out of the bargain, too. Tafl is a much more positional game, which makes questions like this harder to pose, but an analogue might be, “Is it worth it to move my king from c3 to make a capture and set up another, or should I hold the good position?”

Here’s another question we don’t have a good answer to: what is the value, in terms of win percentage, of an armed king captured on four sides (a strong king) against an armed king captured on two (a weak king)? Certainly, we know that an armed king is an extremely powerful piece in material terms. The king’s side has a nearly 2-1 disadvantage in material, but in many common 11×11 variants with a strong armed king, he wins at about a 2-1 rate in games between expert players8. On the other hand, 9×9 Sea Battle, a variant with an unarmed strong king escaping to the edge and no hostile central square, is still biased about 2-1 in wins toward the king’s side. On the other other hand, 9×9 Tablut, the variant on which all other variants are based9, features an armed strong king with a corner escape and a hostile central square, and is approximately as evenly balanced as chess. We can’t even answer questions about a king’s worth, or about the shift in balance provided by various rules tweaks.

So, the formal approach, for now, is out, and we’re left with knowledge-based approaches. This presents me with a variant of the chicken-and-egg problem. I have one chicken (a tafl engine), but I lack a rooster (a strong AI) with which to produce a viable egg (answers to interesting questions). The task before me is this: use my mad scientist’s toolkit (my brain, my passing familiarity with tafl games) to cobble together some sort of Franken-rooster that get my chicken to lay eggs, which will in turn produce less monstrous roosters.

Leaving aside tortured metaphors, it’s relatively easy to get an AI to a moderate level of play. All you have to do is apply some well-known algorithms. On the other hand, getting it past that moderate level of play does require knowledge, and the knowledge we have is not yet sufficient to do that. Hopefully my work on this topic will push us further down that road.

1. I’ve been writing OpenTafl with the intention that it be relatively easy to swap in different kinds of AI, both so that I can continue my research into tafl AI, and so that others can contribute. I suppose it may also find a place as a teaching tool, but that seems more unlikely.
2. Consider: at the start of the game, you can pick a common opening line, assume the other player will follow it to the end, and search from there, until the other player goes off-book. At the end of the game, you can search down to positions with a number of pieces—chess programs usually store a database of all endgames with five pieces, these days3—from which point you’re assured of perfect play. In either case, your effective search depth is your actual search depth plus the amount of information in the database.
3. Storage is the limiting factor. A five-move endgame database in the widely-accepted, heavily-compressed standard format is about 7 gb. There’s a chess program out there called Shredder which manages to pack it into 150 mb, two percent of the standard format, by removing any information besides whether the position is eventually won or eventually lost, and playing along those lines4. A six-piece database takes 1.2 tb in the standard form, which would be 24 gb in the Shredder format. The seven-piece tables come to between 100 tb to 150 tb, the range I’ve seen across a few sources, which would be take between two and three terabytes. Not really the sort of thing you’ll find in Chessmaster 2016.
4. It seems to me that without a native ordering, this method may take more moves to come to a winning position, but I suppose you can impose some order on them by adding ‘how long’ to the won or lost evaluation function, without taking up much more space.
5. I’m aware of only one place with any real detail, Tim Millar’s site.
6. Which isn’t a value judgement, mind. Go knowledge is nonformal, and in many ways seems largely aesthetic, but does eventually lead to wins, which makes it valuable, if hard to use from a game theory perspective.
7. Calculating the chess endgames with 7 pieces on an 8×8 board took a significant amount of time on a supercomputer in Moscow in 2012. On a 9×9 or 11×11 board, a tafl endgame with 7 taflmen is trivial—games usually end well before the amount of material on the board gets down to the amounts where enumeration of endgames is possible.
8. I’m reminded of my introduction of tafl to my residence hall my senior year of college. The initial feeling was that the besieging side had a massive advantage, but as we developed as players, we realized the advantage was much more on the king’s side.
9. Linnaeus, on his expedition to Lapland, observed the game being played and recorded the rules, thus saving tafl games for the ages.