Formulae
By Cathay Express, Star Alliance and other contributors.
Last major revision: 7 Jul 2021, last updated: 22 Aug 2024
If you have any suggestions or error corrections, open an issue or contact me via our Discord server.
Unless specified or otherwise, all formulae are for easy mode.
Ticket Prices¤
Found: 2019 (AM4 community)
API: utils.ticket
Confidence: 100% (\(R^2 = 1\))
Pax¤
Easy¤
where:
- \(\$_\text{\{Y,J,F\}}\) are the autoprice prices. For optimal prices, multiply \(\$_\text{Y}\) by 1.1, \(\$_\text{J}\) by 1.08, and \(\$_\text{F}\) by 1.06.
- \(d\): total distance1 of the flight.
Realism¤
where:
- \(\$_\text{\{Y,J,F\}}\) are the autoprice prices. For optimal prices, multiply \(\$_\text{Y}\) by 1.1, \(\$_\text{J}\) by 1.08, and \(\$_\text{F}\) by 1.06.
- \(d\): total distance1 of the flight.
VIP¤
Easy¤
Found: 22 Jul 2021 (Cathay Express)
where:
- \(\$_\text{\{Y,J,F\}}\) are the autoprice prices. For optimal prices, multiply \(\$_\text{Y}\) by 1.22, \(\$_\text{J}\) by 1.195, and \(\$_\text{F}\) by 1.175.
- \(d\): total distance1 of the flight.
Realism¤
where:
- \(\$_\text{\{Y,J,F\}}\) are the autoprice prices. For optimal prices, multiply \(\$_\text{Y}\) by 1.22, \(\$_\text{J}\) by 1.195, and \(\$_\text{F}\) by 1.175.
- \(d\): total distance1 of the flight.
Cargo¤
Found: 10 Mar 2020 (Cathay Express)
Easy¤
where:
- \(\$_\text{\{L,H\}}\) are the autoprice prices. For optimal prices, multiply \(\$_\text{L}\) by 1.1 and \(\$_\text{H}\) by 1.08.
- \(d\): total distance1 of the flight.
Realism¤
where:
- \(\$_\text{\{L,H\}}\) are the autoprice prices. For optimal prices, multiply \(\$_\text{L}\) by 1.1 and \(\$_\text{H}\) by 1.08.
- \(d\): total distance1 of the flight.
Alliance¤
Contribution¤
Confidence: 100% (\(R^2 = 1, N = 252\))
Found: 11 Apr 2021 (Cathay Express and Star Alliance contributors)
Updated: 13 Apr 2021
API: utils.route.AircraftRoute.contribution
SPOILERS: Click to reveal
where:
- \(d\) is the direct distance2 of the route
-
\(k_\text{gm}\) is a multiplier based on game mode:
\[ k_\text{gm} = \begin{cases} 1.5 & \text{if realism} \\ 1 & \text{if easy} \end{cases} \] -
\(k\) is a function of \(d\):
\[ k = \begin{cases} 0.0064 & \text{if } d < 6000 \\ 0.0032 & \text{if } 6000 < d < 10000 \\ 0.0048 & \text{if } d > 10000 \\ \end{cases} \] -
\(\text{CI}\): between 0 and 200
Contribution is reduced when the flight distance is less than 1000km. (REDUCED_CONTRIBUTION warning in utils.route.AircraftRoute.warnings)
Note
From 18 May 2021 - 7 Jul 2021, the contribution was momentarily reduced.
Updated: 19 May 2021
Confidence: 80%
Season¤
Found: 22 Jul 2021 (Cathay Express and Star Alliance contributors)
Confidence: 10%
Everything we know about seasons:
- Individual departures on average yields a higher season contribution.
- Recalling aircraft will not remove season contribution.
- Season value = total season contribution / 40,000 (exact: /40031.83152)
- A greater variety of planes/plane types will contribute more.
For individual departures:
- Season contribution do not depend on the ticket price (12 trials), distance (4 trials) or CI (2 trials).
- Only routes of distance >500km contribute (4 trials).
- Flights carrying <=7 pax will not contribute (4 trials).
- Season contribution is not randomised (28 trials)
- Season contribution is randomised by 10-19%. (4 trials, possibly erroneous)
- Season contribution is not affected by the aircraft's acheck hours remaining (A320VIP - 3331h to 1771 hours, 31 trials).
- Season contribution is likely to be proportional to the aircraft's factory acheck hours (needs verification). For multiple departures:
- People with a greater amount of unique planes/plane types will contribute more.
Found: 8 Jul 2021 (Cathay Express)
Confidence: 100% (\(R^2 = 1\))
Applicable for both easy and realism.
Found: 16 Jul 2020 (Cathay Express)
Confidence: 100%
Applicable for both easy and realism.
Season is the change in total alliance contribution from the start of Wednesdays, 10:00UTC.
Stock¤
SV change¤
Confidence: 100% (\(R^2 = 1\))
Found: < 20 Aug 2020
Updated: 7 Jul 2021
Each action in the game is associated with a change in share value. Applicable for both easy and realism.
where:
- \(\Delta\$_{\text{S}}\): Change in share value
- \(\$\): Amount of money involved during an action
- \(k\): some constant based on the action taken:
- \(k = 66666666\) when purchasing an aircraft
- \(k = 40000000\) for positive actions:
- Income earned on departure
- Cost of route creation
- Cost of constructing lounges
- \(k = -40000000\) for negative actions:
- Cost of purchasing fuel and \(\text{CO}_{2}\)
- Cost of route fee on rerouting, including ferry flight
- Cost of maintenance or repair
- Income earned by selling or recalling aircraft
- Cost of marketing, staff salary, purchasing new hubs, transferring money between banks
No change: hangar unlocking or expansion
Not tested: maintaining lounges
Route¤
Distance¤
Confidence: 100%
Found: 2019 (Cathay Express and AM4 community)
API: utils.route.Route.direct_distance and utils.route.Route.calc_distance
Internally, AM4 calculates the distance between two airports with the Haversine formula:
where:
- 12742: Earth's diameter in km
- \(\phi_1, \phi_2\): latitude of airport 1 and 2 in radians
- \(\lambda_1, \lambda_2\): longitude of airport 1 and 2 in radians
Note
Confusingly, the research panel uses the spherical law of cosines instead:
While the difference between these two formulae is negligible, all internal calculations rely on the Haversine formula. Therefore, do not use distances from the research panel for ticket price calculations, as it could lead to empty flights.
Demand¤
Confidence: 90% (\(R^2 = 0.985, 0.999\))
A new effort is launched to find the demand formula.
See guides.
Found: 1 June 2023 (Cathay Express)
API Reference: utils.demand.PaxDemand, utils.demand.CargoDemand
The demand is a uniformly distributed random variable:
where:
- \(\mathbb{E}(D_{i, j})\): expected demand of the route from airport \(i\) to airport \(j\), that is, the mean demand of routes with the same total tier value.
- \(k\): tier value of the airport. See the hub cost section for more details.
Note
The true demand of the route is calculated by adding a random offset to the mean demand. This random offset is uniformly distributed and cannot be meaningfully predicted without knowing the seed of the PRNG.
Psuedocode: offset = PRNG(seed=hash(airport1, airport2)).next()
and hash
is commutative.
See GitHub for attempts to uncover it.
In practice, we store this in a giant hashtable.
Marketing Campaign¤
Applicable for both easy and realism.
where:
- \(C_{k}\): Cost of marketing campaign k
- \(T\): Campaign length, hours
- \(n_p\): Total amount of planes ever owned3
Pax Carried¤
Confidence: 80% (\(N \approx 2000\))
Found: 2021 (Cathay Express)
API: utils.route.AircraftRoute.estimate_load
When there is demand remaining, the load is a random variable with the expected value:
where:
- \(R\): reputation
- \(\alpha\): autoprice ratio: the ratio of the ticket price to the autoprice ticket price (e.g. 1.1):
- \(\alpha > 1\): normally distributed, with standard deviation at 6.8% the mean (heteroscedastic).
- \(\alpha \leq 1\): uniformly distributed, with half-range at 5.2% the mean (heteroscedastic).
- \(s\): boolean variable of whether the route has a stopover
When there is insufficient demand, the load is deterministic:
Confidence: 60% (tested at 39% reputation)
When the demand is less than the intersection between the formula above and y=x, the load is 100% to make sure the demand is depleted:
where:
- \(D\): demand left before departure
- \(C\): capacity of the aircraft
CI¤
Found: 2019 (AM4 Community)
where:
- \(v\): new speed
- \(u\): original speed
- \(\text{CI}\): CI, 0-200.
Alternative Expression (useful for optimisation):
where:
- \(d\): route distance
- \(u\): original speed
- \(T'\): target flight time after applying CI
Fuel Consumption¤
Found: 20 Dec 2020 (Cathay Express)
Confidence: 100% (\(R^2 = 1\))
where:
- \(t_f\): fuel training amount (0-3)
- \(\text{ceil}(d, 2)\): total distance1, rounded up to 2 decimal places
- \(c_f\): fuel consumption of the aircraft. If modified with fuel efficiency, multiply by 0.9.
- \(CI\): cost index (0-200)
CO₂ Consumption¤
Found: 22 Dec 2020 (Cathay Express)
Confidence: 100% (\(R^2 = 1\))
Pax¤
where:
- \(t_c\): CO₂ training amount (0-5)
- \(\text{ceil}(d, 2)\): total distance1, rounded up to 2 decimal places
- \(c_c\): CO₂ consumption of the aircraft. If modified with CO₂ efficiency, multiply by 0.9.
- \(y_l\), \(j_l\), \(f_l\) are the number of economy, business, and first class passenger loaded
- \(y_c\), \(j_c\), \(f_c\) are the number of economy, business, and first class seats
- \(CI\): cost index (0-200)
Cargo¤
where:
- \(t_c\): CO₂ training amount (0-5)
- \(\text{ceil}(d, 2)\): total distance1, rounded up to 2 decimal places
- \(c_c\): CO₂ consumption of the aircraft. If modified with CO₂ efficiency, multiply by 0.9.
- \(l_l\), \(h_l\): actual load of large and heavy cargo (%)
- \(l_c\), \(h_c\): configuration of large and heavy cargo (%)
- \(C\): the total equivalent cargo capacity of the aircraft (lbs)
- \(CI\): cost index (0-200)
Creation cost¤
Found: 2024 (Alliance Ariving Germany)
Confidence: 100%
Pax, Easy¤
where:
- \(d\): total distance1
- \(y_c\), \(j_c\), \(f_c\) are the number of economy, business, and first class seats
Pax, Realism¤
where:
- \(d\): total distance1
- \(n_p\): total amount of planes ever owned3
- \(y_c\), \(j_c\), \(f_c\) are the number of economy, business, and first class seats
Best Configuration¤
Developed: 2019 (AM4 Community, Cathay Express)
Input:
- Seat classes: \(S = \{s_1, s_2, \ldots, s_n\}\)
- Units of capacity: \(c_1, c_2, \ldots, c_n\)
- Demand: \(d_1, d_2, \ldots, d_n\)
- Flights per day: \(f\)
- Capacity: \(C\)
Output:
- Optimal seat configuration: \(\text{seats} = (\text{seats}_1, \text{seats}_2, \ldots, \text{seats}_n)\)
Algorithm:
- \(C_{\text{remaining}} \leftarrow C\).
- for \(i \leftarrow 1\) to \(n\):
- \(\text{seats}_i \leftarrow \left\lfloor\frac{d_i}{f}\right\rfloor\).
- if \(\text{seats}_i \cdot c_i \leq C_{\text{remaining}}\):
- \(C_{\text{remaining}} \leftarrow C_{\text{remaining}} - \text{seats}_i \cdot c_i\).
- else:
- \(\text{seats}_i \leftarrow \left\lfloor\frac{C_{\text{remaining}}}{c_i}\right\rfloor\).
- \(C_{\text{remaining}} \leftarrow 0\).
- return \(\text{seats} = (\text{seats}_1, \text{seats}_2, \ldots, \text{seats}_n)\).
Pax seat ordering¤
Assuming the use of 1.1x, 1.08x, and 1.06x multipliers from the autoprice ticket prices.
Game Mode | Distance Range (km) | Best Seat Class Order |
---|---|---|
Easy | < 14425 | F>J>Y |
14425 - 14812.5 | F>Y>J | |
14812.5 - 15200 | Y>F>J | |
> 15200 | Y>J>F | |
Realism | < 13888.89 | F>J>Y |
13888.89 - 15694.44 | J>F>Y | |
15694.44 - 17500 | J>Y>F | |
> 17500 | Y>J>F |
Cargo seat ordering¤
Assuming the use of 1.1x and 1.08x multipliers from the autoprice ticket prices.
Game Mode | Distance Range (km) | Best Seat Class Order |
---|---|---|
Easy | <23908 | L>H |
>23908 | H>L | |
Realism | all | L>H |
Airport¤
Hub Cost¤
Found: Mar 2020 (Cathay Express)
Confidence: 100% (\(R^2 = 1\))
API: utils.airport.Airport.hub_cost
Applicable for both easy and realism.
where:
- \(C_{k}\): Cost of hub with tier value k (\(k\) is hardcoded)
- \(p\): Total amount of planes ever owned
The maximum tier value is a capital route.
Lounge¤
Construction time¤
Found: 7 Jul 2021 (Cathay Express)
Confidence: 100% (\(R^2 = 1\))
Applicable for both easy and realism.
where:
- \(T\): time needed to construct the lounge
- \(n_l\): number of lounges owned
Construction cost¤
Found: 07 Jul 2021
Confidence: 75% (Lounge fee is lower for airlines with less cash?)
Applicable for both easy and realism.
where:
- \(C\): cost needed to construct the lounge
- \(n_l\): number of lounges owned
Hangar expansion¤
Found*: 21 Jan 2022 (Cathay Express)
Updated: 25 Jan 2022 (Cathay Express, reduced by ~50%)
See GitHub for raw data.
Confidence: 30% (\(R^2 = 0.94\))
where:
- \(C_{10}\): cost needed to add 10 planes
- \(x\): fleet limit
. The cost needed to add 1 plane is:
Aircraft¤
Wear¤
Found: 2021 (Cathay Express)
Confidence: 100% (\(R^2 = 1\)). Applicable for both easy and realism.
where:
- \(t_r\): repair training amount (0-5)
- \(\mathcal{U}\): uniform distribution
Equivalently, the expected wear is 0.75% per departure, which decreases by 2% per training point.
Repair Cost¤
Found: 2020 (Cathay Express)
Confidence: 100% (\(R^2 = 1\)). Untested on realism.
where:
- \(C\): aircraft cost
- \(t_r\): repair training amount (0-5)
- \(\text{wear}\): aircraft wear percentage, 0-1
Repair Time¤
Found: 29 June 2024 (Cathay Express, Point Connect)
Confidence: 99% (\(R^2 = .995\)). Applicable for both easy and realism.
where:
- \(T\): downtime (seconds)
- \(\text{wear}\): aircraft wear percentage, 0-1
Check Time¤
Found: 29 June 2024 (Cathay Express, Point Connect) Updated: 9 July 2024
Confidence: 95%. Note that the check cost for easy players are half of realism.
Easy¤
Realism¤
where:
- \(T\): downtime (seconds)
- \(C\): check cost
Miscellaneous¤
Level Bar¤
Found: Mar 4 2020 (Cathay Express)
Confidence: 100% (\(R^2 = 1\)). Applicable for both easy and realism.
where:
- \(f_{l+1}\): number of flights needed to reach the next level
- \(l\): current level number