Specialty Systems
PassengerSim includes several specialty revenue management systems that implement specific algorithms or approaches. In contrast to the standard systems that are reflective of common RM systems deployed in "real world" applications, the specialty systems are often more academic in nature, and represent naive, historical, or otherwise non-optimal approaches to revenue management. Just because these systems are not optimal does not mean they are not useful; they can be very helpful for software testing, benchmarking and comparison purposes.
Unlike the standard RM systems, users must explicitly import specialty systems if they wish to use them. This helps reduce the chance of accidental usage.
First Come, First Served (FCFS)
Bases: RmSys
A first come, first served RM system.
First come first served (FCFS) is a simple method for allocating capacity to customers, and it operates pretty much as you would expect: customers whom arrive first are offered products, no attempt is made to optimize for anything.
This process of capacity allocation will also occur if no RM optimization algorithm is applied, but the explicit system allow the user to be intentional about selecting this algorithm. This intentionality is enforced by PassengerSim, as actually having no RM system is an error. This RM system allows the user to explicitly select a no-optimization RM system.
This RM system does implement leg-level untruncation and forecasting, but does not do any with the resulting forecasts.
actions
class-attribute
instance-attribute
actions = [
LegUntruncation,
configure(fixed=dict(algorithm="additive_pickup")),
]
No Detruncation
Bases: RmSys
A modified RM system of type "E" without detruncation.
This RM system uses leg-level seat allocation controls with EMSR-B optimization, along with standard leg forecasting.
Parameters:
-
emsr_variant((b, a), default:'b') –Specifies which variant of the EMSR algorithm to use, either 'b' for EMSR-B, or 'a' for EMSR-A. At this time only 'b' is supported.
-
forecast_algorithm((additive_pickup, exp_smoothing, multiplicative_pickup), default:'additive_pickup') –Specifies which leg-level forecasting algorithm to use for generating leg demand forecasts. Options are 'additive_pickup', 'exp_smoothing', or 'multiplicative_pickup'. The default is 'additive_pickup'.
-
exp_smoothing_alpha(float, default:0.15) –Specifies the alpha parameter to use for exponential smoothing. This parameter is only used if the
forecast_algorithmis set to 'exp_smoothing'. The default value is 0.15.
Notes
This RM system consists of the following actions executed in order:
-
EM Untruncation of Leg Demands This step applies the EM algorithm to untruncate observed leg sales into inferred true demand levels. It runs only once at the beginning of each sample day, and detruncates demand for all timeframes.
-
Standard Leg Forecasting This step generates leg-level demand forecasts using a standard class-based forecasting algorithm (additive pickup by default). It runs full computations to produce leg forecasts for the entire booking horizon in one pass at the beginning of each sample day, and on later DCPs it simply moves a pointer forward through that array of forecasts to provide the correct forecast values at that time.
-
EMSR-B Optimization Optimizes leg-level seat availability using the Expected Marginal Seat Revenue Version B (EMSR-B) algorithm. This step runs on each DCP to update the seat availability controls based on the current leg forecasts, current sales, and the EMSR optimization logic.
actions
class-attribute
instance-attribute
actions = [
configure(
algorithm=RmSysOption(
"forecast_algorithm", default="additive_pickup"
),
alpha=RmSysOption(
"exp_smoothing_alpha",
expected_type=float,
default=0.15,
),
),
configure(
variant=RmSysOption("emsr_variant", default="b")
),
]