Configuration System
Configuration management with YAML support.
- src.common.config.get_config(key: str, default: Any = None) Any[source]
Get a configuration value by dot-notation key.
- Parameters:
key – Dot-notation key (e.g., “planning.gamma”).
default – Default value if key not found.
- Returns:
Configuration value or default.
Examples
>>> get_config("planning.gamma") 0.5 >>> get_config("data.zone_count", 263) 263
- src.common.config.load_config(config_path: str | Path | None = None) dict[str, Any][source]
Load configuration from YAML file.
- Parameters:
config_path – Path to config file. If None, uses default configs/config.yaml.
- Returns:
Configuration dictionary.
- Raises:
FileNotFoundError – If config file doesn’t exist.
yaml.YAMLError – If config file is invalid YAML.
- src.common.config.reload_config(config_path: str | Path | None = None) dict[str, Any][source]
Force reload configuration from file.
- Parameters:
config_path – Path to config file. If None, uses current path.
- Returns:
Fresh configuration dictionary.
Default Configuration
# =============================================================================
# NYC Taxi Zone Recommendation - Unified Configuration
# =============================================================================
# All hyperparameters, paths, and constants in one place.
# Load with: from src.common.config import Config
# =============================================================================
# --- Project Structure ---
project:
name: "NYC Taxi Zone Recommendation"
version: "1.0.0"
root: "." # Resolved at runtime
# --- Data Paths ---
paths:
raw_data: "data/raw/yellow_tripdata_2023-01.parquet"
train_uncleaned: "data/raw/yellow_tripdata_2023-01.parquet"
train_cleaned: "data/processed/train_cleaned.parquet"
validation_cleaned: "data/processed/validation_cleaned.parquet"
validation_input: "data/processed/validation_input.parquet"
validation_answers: "data/processed/validation_answers.parquet"
zone_statistics: "data/processed/zone_time_statistics.parquet"
travel_time_matrix: "data/processed/travel_time_matrix_dijkstra.csv"
taxi_zone_lookup: "data/meta/taxi_zone_lookup.csv"
output_dir: "outputs"
# --- Domain Constants ---
domain:
zone_count: 263 # NYC taxi zones (TLC definition)
slot_count: 48 # Half-hour slots per day
week_slot_count: 336 # 7 * 48
# --- Data Cleaning ---
cleaning:
train_boundary: ["2023-01-01", "2023-01-25"]
validation_boundary: ["2023-01-25", "2023-02-01"]
max_trip_duration_minutes: 240.0
min_trip_duration_minutes: 1.0
max_fare: 200.0
min_fare: 0.0
max_trip_distance: 100.0
min_trip_distance: 0.1
max_speed_mph: 80.0
# --- Recommendation Algorithm ---
algorithm:
# Two-step planning hyperparameters
gamma: 0.5 # Discount factor for future utility
lambda_param: 1.0 # Relocation cost normalization
pickup_half_saturation: 240.0 # Half-saturation for pickup probability
candidate_pool_size: 100 # Number of candidates for two-step computation
top_k: 3 # Number of zones to recommend
default_same_zone_time: 10.0 # Default travel time for same-zone (minutes)
# --- Q-Learning ---
qlearning:
gamma: 0.9 # Discount factor
alpha: 0.1 # Learning rate
epsilon: 0.3 # Initial exploration rate
epsilon_decay: 0.995 # Exploration decay per episode
epsilon_min: 0.01 # Minimum exploration rate
num_episodes: 5000 # Training episodes
max_steps: 50 # Max steps per episode
candidate_k: 50 # Top K candidate actions
seed: 20230722 # Random seed for reproducibility
# --- Parameter Selection Grid ---
parameter_grid:
pickup_half_saturation_values: [120.0, 240.0, 360.0]
gamma_values: [0.25, 0.5, 0.75]
candidate_pool_sizes: [50, 100]
# --- Logging ---
logging:
level: "INFO"
format: "%(asctime)s %(levelname)s %(name)s: %(message)s"
date_format: "%Y-%m-%d %H:%M:%S"
# --- Multi-Year Data Paths (Phase 1 upgrade) ---
multi_year:
config: "data/config.yaml"
raw_root: "data/raw"
processed_root: "data/processed/multi_year"
years: [2022, 2023, 2024, 2025]
splits:
train: "data/processed/multi_year/train/data.parquet"
validation: "data/processed/multi_year/validation/data.parquet"
test: "data/processed/multi_year/test/data.parquet"