Demand in AirlineSim

Written by martin published on September 21, 2019 in Dev-Log

In AirlineSim, slots might be rare and there's the occasional competition over a few used aircraft, but at the end of the day, the primary objective of the game is to win a share of global passenger and cargo demand. Consequently, modeling the demand that players compete over is a key factor to a fun, engaging and realistic gaming experience.

Improving this model is one of our oldest but also hardest development goals. In an on-going effort we are trying to tackle this issue piece by piece and in this article I want to highlight the most important of these pieces and their inherent challenges.

Absolute Demand

This is the basis for everything described below: There has to be an absolute demand of passengers or freight. In AirlineSim, this absolute demand is defined per airport and we try to research the actual traffic numbers from the real world. So we look up how many passengers used an airport in a given period of time, based on data released by the authorities or the operators running the airports.

This comes with two big problems: Firstly, each airport releases slightly different statistics, so some include transfer passengers, some don't. Some release actual traffic numbers, some just capacities offered. And likely, some airports just make stuff up. Secondly, researching this data for 4000+ airports is a lot of work, especially because the numbers constantly shift. So once you've looked into all airports, you can start over again.

Ideally, absolute demand should be a function of broader properties like population density, economic indicators etc. The goal not being to reproduce real-world traffic numbers 1:1 but to arrive at plausible demand values for the simulation. Example: On average, demand for air traffic will be higher in a highly developed country like Germany than it would be in a country like, say, Somalia.

Relative Demand

As the name suggests, relative demand expresses which percentage of passengers and freight wants to travel where. In the past, we based this solely on real world schedule data: Just add up the capacities offered by airlines on all scheduled routes in the world and you end up with a basis for relative demand, right? Not quite. There are several issues with this approach:

  1. Schedule data is capacity data. It doesn't say how many people actually booked those flights and getting actual traffic statistics is impossible.
  2. Schedule data is point-to-point. Large hubs appear as huge destinations in the data while long-distance demand like Europe to Australia doesn't show up at all (because there are no direct connections).
  3. Schedule data is expensive to acquire, so very frequent updates are out of the question.

Just recently we launched an experiment on Quimby in which we try to address some of those issues. For lack of current alternatives we are still using expensive schedule data, but we are preprocessing it to "guesstimate" the amount of passengers that continue on to airports in an airline's network via its hubs. The primary goal is to reduce the issue of hubs showing up as large destinations (prime example: hubs in the Middle East, like Dubai) even though actual local traffic is relatively low. Obviously, we can't perform miracles, so we can't extract information from the schedule data that isn't there. Hence, we are still seeing quite a few issues with our generated data and several additional iterations will be required before they are ready for a release to all game worlds.

Dynamic Demand

On Idlewild, one passenger wants to travel from Stuttgart in southern Germany to Amarillo in Texas. Every day. While not completely unlikely, it's definitely neither realistic nor plausible. But demand in AirlineSim is completely static at the moment. Unless we tweak absolute or relative demand figures, nothing but the AGEX ever changes it. And the AGEX just influences a global demand factor. Relatively speaking, both absolute and relative demand stay the same.

In the real world there are loads of factors that cause a change in demand over time. On a high level, there are travel seasons (winter vs. summer vacation destinations, for example) and economic changes. On a lower level, there are large events and the general day-to-day fluctuation of travel desires.

Both travel seasons and events don't work well in AS: We can hardly require our players to completely reschedule their whole fleets twice a year and the effects of events are too short-lived to allow players to actually react to them.

That said, some fluctuation following statistic probabilities is something we would like to add in the future to resolve issues like that one STR-AMA pax mentioned above. And especially in combination with spatial and qualitative demand (see below), interesting things would be possible here to achieve a bit more variation.

Qualitative Demand

The fancy term "qualitative demand" simply describes our three passengers classes (plus cargo): Economy, business and first class passengers require different qualities of service. In its current form, qualitative demand is one of the biggest pain points of AirlineSim's demand model. Firstly, the three passenger types are statically distributed. Each one is expressed as a fixed percentage of absolute demand. Secondly, the three types are the broadest possible categories and there exists no variation within them. Simply put, all Economy passengers in the world of AirlineSim apply the exact same criteria to rate a flight, meaning that each airline offering Economy class competes for exactly the same passengers without any means to differentiate.

We have tried to address this issue in the past and fixing it in the future still occupies a high position on our priority list. The challenge is that any solution to this problem exists on a scale ranging from "gross over-simplification" (like our current model) to "technologically difficult" (like actually simulation individual passengers with individual needs). Our previous attempts (that so far haven't seen the light of the day) would have introduced around a dozen (instead of three) passenger types, which would have alleviated the problem to some extend, but not resolved it. We also made the mistake of combining the change with the planned Booking Classes feature, which blew up complexity and made a release to existing game worlds difficult.

We'll revisit this topic eventually and you'll read about it here once we do!

Spatial Demand

Last but not least, there is something I'd call "spatial demand". As mentioned above, absolute demand is currently tied to airports. This, as many other things around AirlineSim, is for historic reasons, mostly because it makes researching the demand data relatively straight-forward. But obviously, this is not how it works in reality: Depending on how you count, London has 5 to 7 airports. These airports all serve and compete over the same market - the city and periphery of London - but don't really have an intrinsic, local demand.

So a far better model would be to have a destination called London in the game where traffic originates, with the airports in the vicinity merely serving as gateways. Similar to qualitative demand, the challenge lies in how to build the model. One could imagine to model every city on the planet, or every village, or abstract density fields that essentially boil down to generating individual passengers again. The coarser the model, the more noticeable the artifacts caused by imprecise data will be. The finer the model, the harder it gets to find data for it and the larger the problem becomes mathematically, leading to almost unavoidable performance issues.

There's an overlap between spatial and qualitative demand, too, that would be interesting to look into: Some regions are primarily leisure destinations while others attract mostly business or ethnic traffic. Having this information in the spatial demand model would be great, but once again challenging from a data research perspective.

Demand Distribution

While not strictly part of the demand model, I feel like I need to mention demand distribution here as well: If we had a demand model that actually generated individual passengers, the matter of demand distribution would be of no concern. A simulated passenger would look for connections the same way someone would in the real world, and then book the best connection according to their personal preferences. But because we distribute demand in "batches" (all demand in a particular class between airport and airport), the algorithm that distributes the passengers in such a batch among connections is crucial. The two extremes here are to either "fill up" from best to worst connection until no passengers are left in the "batch" or to distribute the whole batch among all eligible connections according to their weighted ratings. The former causes extreme fluctuations in booking behavior due to tiny rating changes, the latter favors high frequencies with lots of small aircraft. Any anything in between requires complicated rulesets based on arbitrary criteria. My hope is that this issue will vanish to some extend once we have more different passenger types. If not, this will keep our heads spinning for a long time to come.

Final Words

I hope this overview of the complex topic that is demand in AirlineSim provided you with some insight in what we are dealing with. We plan to continuously improve our demand model in the mid- and long-term, eventually addressing as many of the different aspects mentioned above.