Executive Summary & System Overview
The Jeppesen Rave Programming Language (Rule And Value Evaluator) is a highly specialized, declarative Domain-Specific Language (DSL) engineered specifically to model domain-specific rules, legality constraints, and cost functions for large-scale combinatorial optimization problems—most prominently Airline Crew Pairing and Crew Rostering.
In modern commercial aviation, crew costs represent the second highest variable operational expense after fuel. Optimizing crew schedules—constructing minimal-cost sequences of flight legs (pairings or trips) and assigning named crew members (rosters)—is an NP-hard combinatorial optimization challenge governed by thousands of multi-layered regulatory, union, contractual, and operational constraints.
Rather than hard-coding these complex, fast-changing business rules into core optimization engines (such as column-generation pairing optimizers or integer programming solvers), Jeppesen decouples rule evaluation from the mathematical optimization solver via Rave.
flowchart TD
A[RAVE DSL CODE<br>Declarative Rules, Hierarchy Levels, Variable & Cost Definitions] --> B[RAVE COMPILER<br>Lexical & Syntactic Analysis, Type Checking, Semantic Analysis]
B --> C[COMPILED RULESET DLL<br>C/C++ Dynamically Linked Library / Evaluation Engine]
C --> D[JEPPESEN OPTIMIZATION ENGINE<br>Pairing Generator, Column Generation, Rostering Solver]
Core Architecture & Key Concepts
- Decoupled Architecture: The Rave compiler translates declarative rule definitions into compiled shared libraries or evaluation engines. The optimization solver queries these libraries dynamically during search tree expansion.
- Hierarchical Data Abstraction: Data is organized in a rigid domain hierarchy:
Leg(individual flight) $ ightarrow$Duty(working day sequence of legs) $ ightarrow$Trip/Pairing(multi-duty sequence starting/ending at base) $ ightarrow$Roster/Plan. - Declarative Computation: Rave replaces imperative loops and stateful iteration with declarative traversers (
sum,count,any,all,first,last,prev,next) that operate implicitly across hierarchical context levels. - Legality vs. Search Guidance: Rave distinguishes between Final Rules (which prune the generation search space statically) and Illegal Subchain Rules (which allow incomplete candidate sub-trips to grow even if temporarily illegal).