DynamisLab/README.md
2026-06-09 18:46:59 +08:00

311 lines
8.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# DynamisLab
**Machine Learning meets Numerical Simulation**
DynamisLab is a research framework for combining machine learning techniques with numerical simulations. Built on top of [CelerisLab](https://github.com/frank14f/CelerisLab), it provides standardized environments and training pipelines for various ML + CFD/Physics projects.
## Current Projects
### 🎯 FlowStealth
Deep Reinforcement Learning for Active Flow Control, focusing on:
- **Flow Stealth**: Drag reduction and flow signature minimization
- **Flow Illusion**: Manipulating flow patterns for deception and control
- **Methods**: DRL (PPO) + CFD (Lattice Boltzmann Method)
- **Location**: `src/flow_stealth/`
## Features
- 🌊 **CFD Environments**: Gymnasium-compatible environments for flow control
- 🤖 **RL Integration**: Ready-to-use with Stable-Baselines3 and other RL libraries
- 🚀 **GPU Acceleration**: Leverages CelerisLab's CUDA-accelerated LBM solver
- 📊 **Experiment Tracking**: Built-in TensorBoard integration
- 🔧 **Modular Design**: Organized by research projects
- 📦 **Standard Structure**: Follows Python packaging best practices
## Project Structure
```
DynamisLab/
├── src/ # Source code (organized by project)
│ └── flow_stealth/ # FlowStealth: DRL + CFD Active Control
│ ├── __init__.py
│ ├── config.py # Configuration management
│ └── environments/ # Gymnasium environments
│ ├── __init__.py
│ └── cfd_env.py # CFD flow control environment
├── scripts/ # Training and evaluation scripts
│ └── train_ppo.py # PPO training script for FlowStealth
├── configs/ # Configuration files
│ ├── config_cuda.json # CUDA settings
│ ├── config_flowfield.json # Flow field parameters
│ └── config_gym.json # Environment settings
├── CelerisLab/ # CelerisLab submodule (GPU-accelerated CFD)
├── models/ # Trained model checkpoints (gitignored)
├── output/ # Training data and results (gitignored)
├── tensorboard/ # TensorBoard logs (gitignored)
├── docs/ # Documentation
├── requirements.txt # Python dependencies
├── pyproject.toml # Package configuration
└── README.md # This file
```
## Installation
### Prerequisites
- Python 3.8+
- NVIDIA GPU with CUDA support
- CUDA Toolkit 11.0+
### Step 1: Clone the repository
```bash
git clone --recurse-submodules <your-repo-url> DynamisLab
cd DynamisLab
```
> **Note**: If CelerisLab is a submodule, use `--recurse-submodules` to clone it automatically.
### Step 2: Install CelerisLab
#### Option A: Install from submodule (recommended for development)
```bash
cd CelerisLab
pip install -e .
cd ..
```
#### Option B: Install from pip (if published)
```bash
pip install CelerisLab
```
### Step 3: Install DynamisLab dependencies
```bash
pip install -r requirements.txt
```
### Step 4: Install DynamisLab in development mode
```bash
pip install -e .
```
## Quick Start
### Training a PPO Agent
Train a Proximal Policy Optimization agent for flow control:
```bash
python scripts/train_ppo.py \
--run-name my_first_run \
--device-id 0 \
--total-timesteps 100 \
--n-steps 3600 \
--activation sin
```
**Arguments:**
- `--run-name`: Name for this training run (used for saving models and logs)
- `--device-id`: CUDA device ID for CFD simulation
- `--cuda-device`: CUDA device ID for PyTorch training (can be different from --device-id)
- `--total-timesteps`: Number of training iterations
- `--n-steps`: Environment steps per training iteration
- `--activation`: Activation function (`sin`, `tanh`, or `relu`)
### Monitoring Training
```bash
tensorboard --logdir tensorboard/
```
Then open http://localhost:6006 in your browser.
### Using the Environment Programmatically
```python
from flow_stealth.environments import CFDFlowControlEnv
from flow_stealth.config import load_celeris_configs
# Load configurations
config_cuda, config_field = load_celeris_configs()
# Create environment
env = CFDFlowControlEnv(
device_id=0,
config_cuda=config_cuda,
config_field=config_field,
)
# Run episode
obs, info = env.reset()
for step in range(500):
action = env.action_space.sample() # Random action
obs, reward, terminated, truncated, info = env.step(action)
if terminated or truncated:
break
env.close()
```
## Configuration
### CFD Configuration
Edit `configs/config_flowfield.json` to change flow parameters:
```json
{
"viscosity": 0.01, # Fluid viscosity
"velocity": 0.1, # Inlet velocity
"field_dim_in_U": [400, 200, 1], # Grid dimensions
...
}
```
### CUDA Configuration
Edit `configs/config_cuda.json` for GPU settings:
```json
{
"threads_per_block": 256,
"unit_dimensions": [16, 16, 1],
...
}
```
## Advanced Usage
### Resume Training
```bash
python scripts/train_ppo.py \
--resume models/my_run_best.zip \
--run-name my_run_continued
```
### Custom Hyperparameters
```bash
python scripts/train_ppo.py \
--learning-rate 0.0003 \
--gamma 0.99 \
--batch-size 512 \
--n-steps 7200
```
### Multi-GPU Setup
```bash
# CFD simulation on GPU 0, PyTorch training on GPU 1
python scripts/train_ppo.py \
--device-id 0 \
--cuda-device 1
```
## Environment Details
### CFDFlowControlEnv
The main environment for active flow control around a cylinder.
**Observation Space:**
- Dimensionality: `n_sensors × 2 × 2` (velocity components, current + derivative)
- Default: 12 dimensions (3 sensors × 2 velocities × 2)
- Normalized to zero mean and unit variance
**Action Space:**
- Dimensionality: `n_control_cylinders`
- Default: 3 (three controllable cylinders)
- Range: [-1, 1] (scaled internally to physical velocities)
**Reward:**
- Drag reduction: `-cd × 0.1`
- Lift minimization: `-|cl| × 0.05`
- Flow similarity: `-similarity_distance × 0.5`
- Total reward is sum of components
**Episode:**
- Max steps: 500 (configurable)
- Simulation runs at 800 LBM steps per environment step
## Development
### Project Guidelines
- Follow PEP 8 style guide
- Use type hints for function signatures
- Document classes and functions with docstrings
- Organize projects under `src/` (e.g., `src/flow_stealth/`)
- Keep training scripts in `scripts/`
- Use `config.py` for all path and configuration management
### Adding a New Project
1. Create new project directory in `src/` (e.g., `src/my_new_project/`)
2. Add `__init__.py`, `config.py`, and project-specific modules
3. Create environments in `src/my_new_project/environments/`
4. Create corresponding training scripts in `scripts/`
### Adding a New Environment to FlowStealth
1. Create new environment class in `src/flow_stealth/environments/`
2. Inherit from `gym.Env`
3. Register in `src/flow_stealth/environments/__init__.py`
4. Create corresponding training script in `scripts/`
### Running Tests
```bash
pytest tests/
```
## Citation
If you use DynamisLab in your research, please cite:
```bibtex
@software{dynamis2026,
author = {Frank14f},
title = {DynamisLab: Machine Learning for Computational Fluid Dynamics},
year = {2026},
url = {https://github.com/frank14f/DynamisLab}
}
```
Also cite CelerisLab:
```bibtex
@software{celerislab2026,
author = {Frank14f},
title = {CelerisLab: GPU-Accelerated Lattice Boltzmann Method Solver},
year = {2026},
url = {https://github.com/frank14f/CelerisLab}
}
```
## License
MIT License - see LICENSE file for details
## Acknowledgments
- Built on [CelerisLab](https://github.com/frank14f/CelerisLab) CFD solver
- Uses [Stable-Baselines3](https://github.com/DLR-RM/stable-baselines3) for RL
- Gymnasium API for standardized environments
## Contributing
Contributions are welcome! Please open an issue or pull request.
## Contact
For questions or issues, please open a GitHub issue or contact Frank14f.