Skip to content

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

  1. 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.
  2. 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.
  3. 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.
  4. 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).