--- title: ShockMarket OpenEnv emoji: 🔋 colorFrom: green colorTo: blue sdk: docker app_port: 8000 tags: - openenv base_path: /web --- # ShockMarket: Agglomeration 2.0 (AG56) ### *Where Deep Reinforcement Learning Meets Deterministic Optimization* --- ## OpenEnv Specification Compliant This repository implements the full **OpenEnv** interface for a real-world industrial task: Battery Energy Arbitrage. ### Environment Description The agent manages a 20 MWh battery to maximize profit across two simultaneous markets: Energy Arbitrage (buying low, selling high) and Ancillary Services (FCR). ### Action Space (Pydantic Model) - `market_choice` (float [0.0, 1.0]): Probability/Decision threshold. `>=0.6` selects Ancillary, `<0.6` selects Arbitrage. - `p_fraction` (float [-1.0, 1.0]): Power fraction. Positive means discharge (sell), negative means charge (buy). ### Observation Space (Pydantic Model) - `energy_price` (float): Current energy market price in /MWh. - `fcr_price` (float): Current Frequency Containment Reserve price in /MW. - `soc` (float): Current State of Charge (MWh). ### Tasks and Graders The environment provides 3 programmatic tasks with deterministic graders (0.0-1.0 score): 1. **Easy**: Maximize profit on a stable day with artificially high ancillary service prices. 2. **Medium**: Arbitrage during high volatility with grid stress. 3. **Hard**: Maximize revenue under strict terminal SoC constraints and degraded battery efficiency. ### Baseline Scores Running the baseline OpenAI API inference script (`backend/baseline.py`) with `gpt-4o-mini` yields the following reproducible scores: - **Easy**: 0.85 / 1.00 - **Medium**: 0.45 / 1.00 - **Hard**: 0.12 / 1.00 --- ## The Vision **ShockMarket** is a high-performance framework designed to solve the ultimate puzzle in modern energy grids: **How do we maximize the value of a Battery Energy Storage System (BESS) across competing markets?** We don't just solve a math problem; we build an intelligent agent that navigates the volatile dance between **Energy Arbitrage** and **Frequency Reserve Markets (FCR & aFRR)**. --- ## System Architecture The project is structured as a multi-service application to provide a full-stack experience for energy traders and data scientists: | Service | Port | Description | | :--- | :--- | :--- | | **Frontend** | `3000` | React (Vite) interface for strategy visualization. | | **Backend API** | `8080` | FastAPI server managing RL inference and data orchestration. | | **Dashboard** | `8501` | Live Streamlit interface for deep-dive technical analytics. | --- ## Key Features * **Deterministic Co-Optimization:** Perfect-foresight day-ahead scheduling using Convex Optimization (CVXPY). * **Multi-Market Synergy:** Simultaneous bidding in French Day-Ahead (DA), FCR (Symmetric), and aFRR (UP/DOWN) products. * **Industrial Battery Modeling:** Realistic SoC dynamics including efficiency losses (90%) and linear throughput degradation penalties (~15 /MWh). * **Hybrid Intelligence:** An advanced **Reinforcement Learning (RL)** layer (TD3/DDPG) sitting atop the MILP formulation to refine decision-making under uncertainty. --- ## The Hybrid Architecture: RL + MILP While the core of the repository uses **Linear Programming (MILP via CVXPY)** to find the mathematical optimum for a given set of prices, the **Agglomeration 2.0** update introduces a **Reinforcement Learning (RL)** layer to transform this from a static solver into a dynamic strategy agent. ### How RL Enhances the Optimization The RL agent (implemented via `Stable-Baselines3`) acts as the "Grand Strategist" atop the "Tactical Solver" (MILP). #### 1. Adaptive Market Switching The RL agent learns the **probability of market profitability**. It makes the high-level decision: * *Should we commit to the Ancillary market (FCR/aFRR) for the capacity payment?* * *Or should we keep the battery empty to catch a predicted price spike in the Arbitrage market?* #### 2. Feature-Rich Observation Space The agent observes Market Signals (DA, FCR, aFRR), Physical State (SoC), and Temporal Context (15-min intervals). #### 3. The Reward Function: PnL + Sustainability The agent is trained to maximize PnL while being "nudged" by a **Terminal SoC Penalty** to return the battery to a target level by midnight. --- ## Technical Specifications | Parameter | Specification | | --- | --- | | **Time Grid** | 15-minute intervals (96 steps/day) | | **Battery Power** | 10 MW | | **Battery Energy** | 20 MWh | | **SoC Limits** | 10% - 90% (Safety Buffer) | | **Optimization Solver** | ECOS (Embedded Conic Solver) | | **RL Algorithm** | TD3 / DDPG (Actor-Critic) | --- ## Setup & Installation ### Option 1: Docker (Recommended for Full Stack) The easiest way to run the entire project (Frontend, Backend, and Dashboard) in sync. ```bash # 1) Build and start all services docker-compose up --build # 2) Access the services: # - Frontend: http://localhost:3000 # - Backend API: http://localhost:8080 # - Dashboard: http://localhost:8501 ``` ### Option 2: Local Python Setup (`uv` optimized) Best for core RL model development and training. ```bash cd backend # 1) Create and activate environment uv venv .venv source .venv/bin/activate # Or .venv\Scripts\activate on Windows # 2) Synchronize dependencies uv sync # 3) Run the main training & simulation pipeline uv run main.py ``` ### Option 3: Local Frontend Development ```bash cd frontend npm install npm run dev ``` --- ## Project Structure The project follows a clean service-oriented architecture: ### [Backend](file:///backend) The powerhouse of RL training, data orchestration, and API services. - `src/`, `rl/`, `sim/`, `twin/`: Domain logic and optimization modules. - `dashboards/`: Technical Streamlit dashboards for live data monitoring. - `data/`: Market price data repository. - `models/`: Persistent storage for trained RL model weights. - `app.py`: FastAPI backend entry point. - `main.py`: Entry point for training and simulation. - `Dockerfile`: Container configuration for the backend. ### [Frontend](file:///frontend) React-based visualization UI for intuitive strategy monitoring. - `src/`: React components and UI logic. - `Dockerfile`: Multi-stage build for production-ready nginx serving. - `nginx.conf`: Custom routing configuration. --- ## Project Context & Credits This framework is based on industrial-standard battery models and the reference thesis: > *"Optimizing Residential Battery Energy Storage Systems Across Frequency Regulation Markets and Energy Arbitrage"* **Elias Schuhmacher & Eric Rosen (2025)**. Developed under the **Agglomeration 2.0 - AG56** initiative.