# liuxiwei0521/redoxbid architecture

> Architecture diagram of the GitHub repository liuxiwei0521/redoxbid, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/liuxiwei0521/redoxbid
- Repository: https://github.com/liuxiwei0521/redoxbid

## Overview

RedoxBid is a Streamlit decision-support prototype for planning vanadium-flow-battery participation in day-ahead energy and regulation markets; it does not submit bids or control a station. Users provide price and optional regulation data, configure a station and battery, then run a baseline schedule, RARR mode assessment, and—when selected—sequential-versus-joint market comparison. Results include schedules, bid recommendations, KPIs, visualizations, and locally archived decisions. The README documents capabilities beyond the sampled excerpts; those are represented at their supported module paths, while uncertain internal call wiring is omitted.

Main entry points: [`app/决策主页面.py`](https://github.com/liuxiwei0521/redoxbid/blob/main/app/%E5%86%B3%E7%AD%96%E4%B8%BB%E9%A1%B5%E9%9D%A2.py) (Decision workspace), [`app/pages/1_🗄️_电站档案.py`](https://github.com/liuxiwei0521/redoxbid/blob/main/app/pages/1_%F0%9F%97%84%EF%B8%8F_%E7%94%B5%E7%AB%99%E6%A1%A3%E6%A1%88.py) (Station archive page), [`utils/market_comparison.py`](https://github.com/liuxiwei0521/redoxbid/blob/main/utils/market_comparison.py) (Strategy comparison), [`ui/components.py`](https://github.com/liuxiwei0521/redoxbid/blob/main/ui/components.py) (Shared UI components)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Decision workflow"]
  node_decision_app["Decision workspace<br/>[决策主页面.py]"]
  node_station_page["Station archive page<br/>[1_🗄️_电站档案.py]"]
end

subgraph group_markets["Market models"]
  node_day_ahead["Day-ahead schedule"]
  node_rarr["RARR mode assessment"]
  node_reg_forecast["Regulation forecast"]
  node_sequential["Sequential optimization"]
  node_joint["Joint optimization"]
  node_comparison["Strategy comparison"]
  node_market_types["Market result types<br/>[market_types.py]"]
end

subgraph group_data["Inputs and archive"]
  node_price_input["Price forecast input<br/>[input_sources.py]"]
  node_regulation_input["Regulation history input<br/>[regulation_data.py]"]
  node_price_sample["Synthetic price sample"]
  node_regulation_sample["Synthetic regulation sample"]
  node_station_store[("Station and decision archive<br/>[database.py]")]
end

subgraph group_presentation["Results and interface"]
  node_visualization["Schedule visualizations<br/>[visualization.py]"]
  node_ui_components["Shared UI components<br/>[components.py]"]
  node_translations["Bilingual presentation<br/>[i18n.py]"]
end

node_user(("Decision user"))
node_solver{{"CBC solver"}}

node_user -->|"provides inputs"| node_decision_app
node_user -->|"edits profile"| node_station_page
node_decision_app -->|"loads prices"| node_price_input
node_price_sample -->|"example data"| node_price_input
node_decision_app -->|"loads history"| node_regulation_input
node_regulation_sample -->|"fallback data"| node_regulation_input
node_decision_app -->|"loads profile"| node_station_store
node_station_page -->|"reads and saves"| node_station_store
node_decision_app -->|"solves baseline"| node_day_ahead
node_day_ahead -->|"solves model"| node_solver
node_decision_app -->|"assesses mode"| node_rarr
node_decision_app -->|"estimates regulation"| node_reg_forecast
node_decision_app -->|"runs comparison"| node_comparison
node_comparison -->|"solves fixed schedule"| node_sequential
node_comparison -->|"solves co-optimization"| node_joint
node_sequential -->|"solves model"| node_solver
node_joint -->|"solves model"| node_solver
node_comparison -->|"uses result types"| node_market_types
node_decision_app -->|"builds charts"| node_visualization
node_decision_app -->|"saves decision"| node_station_store
node_station_page -->|"plots history"| node_visualization
node_decision_app -->|"renders workspace"| node_ui_components
node_station_page -->|"renders archive"| node_ui_components
node_ui_components -->|"localizes interface"| node_translations

click node_decision_app "https://github.com/liuxiwei0521/redoxbid/blob/main/app/%E5%86%B3%E7%AD%96%E4%B8%BB%E9%A1%B5%E9%9D%A2.py"
click node_station_page "https://github.com/liuxiwei0521/redoxbid/blob/main/app/pages/1_%F0%9F%97%84%EF%B8%8F_%E7%94%B5%E7%AB%99%E6%A1%A3%E6%A1%88.py"
click node_price_input "https://github.com/liuxiwei0521/redoxbid/blob/main/utils/input_sources.py"
click node_regulation_input "https://github.com/liuxiwei0521/redoxbid/blob/main/utils/regulation_data.py"
click node_price_sample "https://github.com/liuxiwei0521/redoxbid/blob/main/data/synthetic_day_ahead_price_forecast.csv"
click node_regulation_sample "https://github.com/liuxiwei0521/redoxbid/blob/main/data/synthetic_regulation_history.csv"
click node_station_store "https://github.com/liuxiwei0521/redoxbid/blob/main/utils/database.py"
click node_day_ahead "https://github.com/liuxiwei0521/redoxbid/blob/main/models/optimization_model.py"
click node_rarr "https://github.com/liuxiwei0521/redoxbid/blob/main/models/optimization_model.py"
click node_reg_forecast "https://github.com/liuxiwei0521/redoxbid/blob/main/models/regulation_forecast.py"
click node_sequential "https://github.com/liuxiwei0521/redoxbid/blob/main/models/sequential_market_model.py"
click node_joint "https://github.com/liuxiwei0521/redoxbid/blob/main/models/joint_market_model.py"
click node_comparison "https://github.com/liuxiwei0521/redoxbid/blob/main/utils/market_comparison.py"
click node_market_types "https://github.com/liuxiwei0521/redoxbid/blob/main/models/market_types.py"
click node_visualization "https://github.com/liuxiwei0521/redoxbid/blob/main/utils/visualization.py"
click node_ui_components "https://github.com/liuxiwei0521/redoxbid/blob/main/ui/components.py"
click node_translations "https://github.com/liuxiwei0521/redoxbid/blob/main/ui/i18n.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_decision_app,node_station_page,node_user toneBlue
class node_day_ahead,node_rarr,node_reg_forecast,node_sequential,node_joint,node_comparison,node_market_types toneAmber
class node_price_input,node_regulation_input,node_price_sample,node_regulation_sample,node_station_store toneMint
class node_visualization,node_ui_components,node_translations toneRose
class node_solver toneIndigo
```

## Components

### Decision workflow

- [Decision workspace](https://github.com/liuxiwei0521/redoxbid/blob/main/app/%E5%86%B3%E7%AD%96%E4%B8%BB%E9%A1%B5%E9%9D%A2.py): `app/决策主页面.py`
- [Station archive page](https://github.com/liuxiwei0521/redoxbid/blob/main/app/pages/1_%F0%9F%97%84%EF%B8%8F_%E7%94%B5%E7%AB%99%E6%A1%A3%E6%A1%88.py): `app/pages/1_🗄️_电站档案.py`

### Market models

- [Day-ahead schedule](https://github.com/liuxiwei0521/redoxbid/blob/main/models/optimization_model.py): `models/optimization_model.py`
- [RARR mode assessment](https://github.com/liuxiwei0521/redoxbid/blob/main/models/optimization_model.py): `models/optimization_model.py`
- [Regulation forecast](https://github.com/liuxiwei0521/redoxbid/blob/main/models/regulation_forecast.py): `models/regulation_forecast.py`
- [Sequential optimization](https://github.com/liuxiwei0521/redoxbid/blob/main/models/sequential_market_model.py): `models/sequential_market_model.py`
- [Joint optimization](https://github.com/liuxiwei0521/redoxbid/blob/main/models/joint_market_model.py): `models/joint_market_model.py`
- [Strategy comparison](https://github.com/liuxiwei0521/redoxbid/blob/main/utils/market_comparison.py): `utils/market_comparison.py`
- [Market result types](https://github.com/liuxiwei0521/redoxbid/blob/main/models/market_types.py): `models/market_types.py`

### Inputs and archive

- [Price forecast input](https://github.com/liuxiwei0521/redoxbid/blob/main/utils/input_sources.py): `utils/input_sources.py`
- [Regulation history input](https://github.com/liuxiwei0521/redoxbid/blob/main/utils/regulation_data.py): `utils/regulation_data.py`
- [Synthetic price sample](https://github.com/liuxiwei0521/redoxbid/blob/main/data/synthetic_day_ahead_price_forecast.csv): `data/synthetic_day_ahead_price_forecast.csv`
- [Synthetic regulation sample](https://github.com/liuxiwei0521/redoxbid/blob/main/data/synthetic_regulation_history.csv): `data/synthetic_regulation_history.csv`
- [Station and decision archive](https://github.com/liuxiwei0521/redoxbid/blob/main/utils/database.py): `utils/database.py`

### Results and interface

- [Schedule visualizations](https://github.com/liuxiwei0521/redoxbid/blob/main/utils/visualization.py): `utils/visualization.py`
- [Shared UI components](https://github.com/liuxiwei0521/redoxbid/blob/main/ui/components.py): `ui/components.py`
- [Bilingual presentation](https://github.com/liuxiwei0521/redoxbid/blob/main/ui/i18n.py): `ui/i18n.py`

### Other components

- **Decision user**
- **CBC solver**

## Connections

- Decision user → Decision workspace: provides inputs
- Decision user → Station archive page: edits profile
- Decision workspace → Price forecast input: loads prices
- Synthetic price sample → Price forecast input: example data
- Decision workspace → Regulation history input: loads history
- Synthetic regulation sample → Regulation history input: fallback data
- Decision workspace → Station and decision archive: loads profile
- Station archive page → Station and decision archive: reads and saves
- Decision workspace → Day-ahead schedule: solves baseline
- Day-ahead schedule → CBC solver: solves model
- Decision workspace → RARR mode assessment: assesses mode
- Decision workspace → Regulation forecast: estimates regulation
- Decision workspace → Strategy comparison: runs comparison
- Strategy comparison → Sequential optimization: solves fixed schedule
- Strategy comparison → Joint optimization: solves co-optimization
- Sequential optimization → CBC solver: solves model
- Joint optimization → CBC solver: solves model
- Strategy comparison → Market result types: uses result types
- Decision workspace → Schedule visualizations: builds charts
- Decision workspace → Station and decision archive: saves decision
- Station archive page → Schedule visualizations: plots history
- Decision workspace → Shared UI components: renders workspace
- Station archive page → Shared UI components: renders archive
- Shared UI components → Bilingual presentation: localizes interface
