diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index c104d12..dda3f21 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,4 +1,4 @@ -# Contributing to AMBD-MC +# Contributing to TestRepo Thank you for your interest and contributions! To ensure high-quality collaboration, please follow the process below. diff --git a/.github/workflows/github_workflows_ci.yml b/.github/workflows/github_workflows_ci.yml index a919df7..97272ad 100644 --- a/.github/workflows/github_workflows_ci.yml +++ b/.github/workflows/github_workflows_ci.yml @@ -45,13 +45,4 @@ jobs: pytest -q || { echo "pytest failed"; exit 1; } else echo "No tests/ directory found, skipping pytest." - fi - - - name: Build docs if mkdocs.yml exists - run: | - if [ -f "mkdocs.yml" ]; then - python -m pip install mkdocs - mkdocs build - else - echo "No mkdocs.yml, skipping docs build." fi \ No newline at end of file diff --git a/.github/workflows/github_workflows_deploy-docs.yml b/.github/workflows/github_workflows_deploy-docs.yml new file mode 100644 index 0000000..7fa4cd8 --- /dev/null +++ b/.github/workflows/github_workflows_deploy-docs.yml @@ -0,0 +1,75 @@ +name: Build and deploy docs + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +permissions: + contents: read + pages: write + id-token: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.11' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install mkdocs-material + + - name: Build docs + run: | + mkdocs build --verbose + + - name: Check site directory + run: | + ls -la + test -d site || (echo "site directory not found" && exit 1) + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '18' + + - name: Check links (optional) + run: | + npm install -g markdown-link-check + # 检查docs目录下的所有markdown文件,忽略错误 + find ./docs -name "*.md" -exec markdown-link-check {} \; || true + + - name: Upload site artifact + uses: actions/upload-artifact@v4 + with: + name: site + path: site + retention-days: 1 + + deploy: + needs: build + if: (github.event_name == 'push' && github.ref == 'refs/heads/main') || (github.event_name == 'pull_request' && github.base_ref == 'main') + runs-on: ubuntu-latest + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: site + path: site + - name: Setup Pages + uses: actions/configure-pages@v4 + - name: Upload artifact + uses: actions/upload-pages-artifact@v4 + with: + path: site + - name: Deploy to GitHub Pages + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6e8fdb2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +# Ignore Visual Studio Code settings folder +.vscode + +# Ignore test build directory +_test_build/ diff --git a/README.md b/README.md index 98bc16b..6a116e7 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@ -# AMBD-MC +# TestRepo [](#license) [](https://github.com/autoMBD/TestRepo/actions/workflows/github_workflows_ci.yml) -[](#contributors) +[](https://github.com/autoMBD/TestRepo/releases) +[](#contributors) [](#docs) 简短一句话描述项目核心价值与场景。 @@ -15,8 +16,8 @@ ## 快速开始(3 步) 1. 克隆仓库 ```bash - git clone https://github.com/autoMBD/AMBD-MC.git - cd AMBD-MC + git clone https://github.com/autoMBD/TestRepo.git + cd TestRepo ``` 2. 安装依赖(举例) ```bash @@ -49,4 +50,4 @@ (可补充联系方式) ## License -本项目采用 MIT 许可证,详见 LICENSE 文件。 \ No newline at end of file +本项目采用 MIT 许可证,详见 LICENSE 文件。 diff --git a/docs/api/index.md b/docs/api/index.md new file mode 100644 index 0000000..3f0055b --- /dev/null +++ b/docs/api/index.md @@ -0,0 +1,498 @@ +# API 文档 + +本文档提供项目的完整 API 参考。如果可能,本 API 文档会自动从代码注释生成。 + +## 概述 + +项目提供以下主要模块的 API: + +1. **核心模块** - 基础功能和工具 +2. **数据处理模块** - 数据加载、转换和清洗 +3. **分析模块** - 数据分析和模型训练 +4. **工具模块** - 辅助工具和实用函数 + +## 自动生成说明 + +如果项目使用自动文档生成工具(如 Sphinx、pydoc、Doxygen),则此部分内容应由工具自动生成。 + +### 设置自动文档生成 + +#### 使用 Sphinx (Python) + +1. 安装 Sphinx: + +```bash +pip install sphinx sphinx-rtd-theme +``` + +2. 初始化文档: + +```bash +sphinx-quickstart docs/api/source +``` + +3. 配置 `conf.py`: + +```python +import os +import sys +sys.path.insert(0, os.path.abspath('../../..')) + +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.napoleon', + 'sphinx.ext.viewcode', + 'sphinx.ext.githubpages' +] + +html_theme = 'sphinx_rtd_theme' +``` + +4. 生成文档: + +```bash +cd docs/api +sphinx-apidoc -o source/ ../../your_project +make html +``` + +#### 使用 TypeDoc (TypeScript/JavaScript) + +```bash +npm install typedoc --save-dev +npx typedoc --out docs/api --entryPoints src/index.ts +``` + +## 核心 API 参考 + +### 项目类 (Project) + +**类定义**: + +```python +class Project: + """项目主类,提供核心功能""" + + def __init__(self, config_path: str = None, log_level: str = "INFO"): + """ + 初始化项目 + + 参数: + config_path: 配置文件路径 + log_level: 日志级别 (DEBUG, INFO, WARNING, ERROR) + """ + pass + + def load_config(self, config_path: str = None) -> dict: + """ + 加载配置文件 + + 参数: + config_path: 配置文件路径,如果为None则使用初始化时的路径 + + 返回: + 配置字典 + """ + pass + + def run(self, input_data: Any = None) -> dict: + """ + 运行项目 + + 参数: + input_data: 输入数据 + + 返回: + 运行结果 + """ + pass +``` + +### 数据处理模块 + +#### DataLoader 类 + +```python +class DataLoader: + """数据加载器,支持多种格式""" + + def load_csv(self, filepath: str, **kwargs) -> pd.DataFrame: + """ + 加载CSV文件 + + 参数: + filepath: CSV文件路径 + **kwargs: 传递给pandas.read_csv的额外参数 + + 返回: + pandas DataFrame + """ + pass + + def load_json(self, filepath: str, **kwargs) -> dict: + """ + 加载JSON文件 + + 参数: + filepath: JSON文件路径 + **kwargs: 传递给json.load的额外参数 + + 返回: + JSON数据字典 + """ + pass + + def load_from_database(self, query: str, connection: Any = None) -> pd.DataFrame: + """ + 从数据库加载数据 + + 参数: + query: SQL查询语句 + connection: 数据库连接对象 + + 返回: + pandas DataFrame + """ + pass +``` + +#### DataTransformer 类 + +```python +class DataTransformer: + """数据转换器,提供数据清洗和转换功能""" + + def clean_data(self, df: pd.DataFrame, options: dict = None) -> pd.DataFrame: + """ + 清洗数据 + + 参数: + df: 输入DataFrame + options: 清洗选项 + + 返回: + 清洗后的DataFrame + """ + pass + + def normalize(self, df: pd.DataFrame, columns: List[str] = None) -> pd.DataFrame: + """ + 数据标准化 + + 参数: + df: 输入DataFrame + columns: 要标准化的列名列表,如果为None则标准化所有数值列 + + 返回: + 标准化后的DataFrame + """ + pass + + def encode_categorical(self, df: pd.DataFrame, columns: List[str] = None) -> pd.DataFrame: + """ + 分类变量编码 + + 参数: + df: 输入DataFrame + columns: 要编码的列名列表,如果为None则编码所有分类列 + + 返回: + 编码后的DataFrame + """ + pass +``` + +### 分析模块 + +#### Analyzer 类 + +```python +class Analyzer: + """数据分析器,提供统计分析功能""" + + def describe(self, df: pd.DataFrame) -> dict: + """ + 数据描述统计 + + 参数: + df: 输入DataFrame + + 返回: + 描述统计字典 + """ + pass + + def correlation_analysis(self, df: pd.DataFrame, method: str = "pearson") -> pd.DataFrame: + """ + 相关性分析 + + 参数: + df: 输入DataFrame + method: 相关性计算方法 ("pearson", "spearman", "kendall") + + 返回: + 相关性矩阵DataFrame + """ + pass + + def hypothesis_test(self, df: pd.DataFrame, test_type: str, **kwargs) -> dict: + """ + 假设检验 + + 参数: + df: 输入DataFrame + test_type: 检验类型 ("t-test", "chi-square", "anova") + **kwargs: 检验特定参数 + + 返回: + 检验结果字典 + """ + pass +``` + +#### ModelTrainer 类 + +```python +class ModelTrainer: + """模型训练器,提供机器学习模型训练功能""" + + def train(self, X, y, model_type: str = "random_forest", **kwargs) -> Any: + """ + 训练模型 + + 参数: + X: 特征数据 + y: 目标数据 + model_type: 模型类型 + **kwargs: 模型特定参数 + + 返回: + 训练好的模型 + """ + pass + + def evaluate(self, model, X_test, y_test, metrics: List[str] = None) -> dict: + """ + 评估模型 + + 参数: + model: 训练好的模型 + X_test: 测试特征数据 + y_test: 测试目标数据 + metrics: 评估指标列表 + + 返回: + 评估结果字典 + """ + pass + + def cross_validate(self, X, y, model_type: str = "random_forest", cv: int = 5, **kwargs) -> dict: + """ + 交叉验证 + + 参数: + X: 特征数据 + y: 目标数据 + model_type: 模型类型 + cv: 交叉验证折数 + **kwargs: 模型特定参数 + + 返回: + 交叉验证结果字典 + """ + pass +``` + +### 工具模块 + +#### Logger 类 + +```python +class Logger: + """日志记录器,提供灵活的日志功能""" + + def __init__(self, name: str = None, level: str = "INFO"): + """ + 初始化日志记录器 + + 参数: + name: 日志记录器名称 + level: 日志级别 + """ + pass + + def debug(self, message: str, **kwargs): + """ + 记录调试信息 + + 参数: + message: 日志消息 + **kwargs: 额外参数 + """ + pass + + def info(self, message: str, **kwargs): + """ + 记录一般信息 + + 参数: + message: 日志消息 + **kwargs: 额外参数 + """ + pass + + def warning(self, message: str, **kwargs): + """ + 记录警告信息 + + 参数: + message: 日志消息 + **kwargs: 额外参数 + """ + pass + + def error(self, message: str, **kwargs): + """ + 记录错误信息 + + 参数: + message: 日志消息 + **kwargs: 额外参数 + """ + pass +``` + +#### ConfigManager 类 + +```python +class ConfigManager: + """配置管理器,提供配置加载和管理功能""" + + def __init__(self, config_path: str = None): + """ + 初始化配置管理器 + + 参数: + config_path: 配置文件路径 + """ + pass + + def load(self, config_path: str = None) -> dict: + """ + 加载配置 + + 参数: + config_path: 配置文件路径 + + 返回: + 配置字典 + """ + pass + + def save(self, config: dict, config_path: str = None): + """ + 保存配置 + + 参数: + config: 配置字典 + config_path: 配置文件路径 + """ + pass + + def get(self, key: str, default: Any = None) -> Any: + """ + 获取配置值 + + 参数: + key: 配置键 + default: 默认值 + + 返回: + 配置值 + """ + pass + + def set(self, key: str, value: Any): + """ + 设置配置值 + + 参数: + key: 配置键 + value: 配置值 + """ + pass +``` + +## 使用示例 + +### 基本使用 + +```python +from your_project import Project +from your_project.data_loader import DataLoader +from your_project.analyzer import Analyzer + +# 初始化项目 +project = Project(config_path="config.yaml") + +# 加载配置 +config = project.load_config() + +# 加载数据 +data_loader = DataLoader() +df = data_loader.load_csv("data.csv") + +# 分析数据 +analyzer = Analyzer() +stats = analyzer.describe(df) +print(stats) +``` + +### 高级使用 + +```python +from your_project.model_trainer import ModelTrainer +from your_project.data_transformer import DataTransformer +from sklearn.model_selection import train_test_split + +# 准备数据 +transformer = DataTransformer() +df_clean = transformer.clean_data(df) +X = df_clean.drop("target", axis=1) +y = df_clean["target"] + +# 分割数据 +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) + +# 训练模型 +trainer = ModelTrainer() +model = trainer.train(X_train, y_train, model_type="random_forest") + +# 评估模型 +metrics = trainer.evaluate(model, X_test, y_test) +print(f"模型性能: {metrics}") +``` + +## API 版本 + +当前 API 版本:**v1.0.0** + +### 版本历史 + +- **v1.0.0** (当前): 初始版本,包含核心功能 +- **v0.9.0**: 预览版,包含基本数据加载和分析功能 + +## 贡献指南 + +如果您想为 API 文档做出贡献: + +1. 确保代码有完整的文档字符串 +2. 遵循项目的代码风格指南 +3. 使用类型注解提高文档可读性 +4. 为公共 API 添加使用示例 + +## 更多资源 + +- [快速开始](../getting-started.md) - 安装和基本使用 +- [教程](../tutorials/tutorial-quick.md) - 详细使用指南 +- [示例](../examples/example1.md) - 实际应用示例 diff --git a/docs/architecture.md b/docs/architecture.md new file mode 100644 index 0000000..027738b --- /dev/null +++ b/docs/architecture.md @@ -0,0 +1,433 @@ +# 系统架构与数据流图 + +本文档描述项目的整体架构设计、组件交互和数据流。 + +## 系统概述 + +本项目采用模块化设计,遵循分层架构原则,确保系统的高可维护性、可扩展性和可靠性。 + +### 设计原则 + +1. **模块化**:每个功能模块独立,职责单一 +2. **松耦合**:模块间通过定义良好的接口通信 +3. **高内聚**:相关功能集中在一个模块内 +4. **可配置**:系统行为可通过配置文件调整 +5. **可观测性**:内置监控、日志和指标收集 + +## 架构图 + +``` +┌─────────────────────────────────────────────────────────────┐ +│ 用户界面层 (UI Layer) │ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ Web界面 │ │ CLI工具 │ │ API接口 │ │ +│ └─────────────┘ └─────────────┘ └─────────────┘ │ +└───────────────────────┬─────────────────────────────────────┘ + │ HTTP/REST/CLI +┌─────────────────────────────────────────────────────────────┐ +│ 应用服务层 (Application Layer) │ +│ ┌─────────────────────────────────────────────────────┐ │ +│ │ 业务逻辑控制器 (Controllers) │ │ +│ │ • 请求路由与验证 │ │ +│ │ • 业务流程协调 │ │ +│ │ • 事务管理 │ │ +│ └─────────────────────────────────────────────────────┘ │ +└───────────────────────┬─────────────────────────────────────┘ + │ 服务调用 +┌─────────────────────────────────────────────────────────────┐ +│ 业务逻辑层 (Business Layer) │ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ 服务模块A │ │ 服务模块B │ │ 服务模块C │ │ +│ │ • 核心算法 │ │ • 数据分析 │ │ • 模型训练 │ │ +│ │ • 业务规则 │ │ • 统计计算 │ │ • 预测推理 │ │ +│ └─────────────┘ └─────────────┘ └─────────────┘ │ +└───────────────────────┬─────────────────────────────────────┘ + │ 数据访问 +┌─────────────────────────────────────────────────────────────┐ +│ 数据访问层 (Data Access Layer) │ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ 数据仓库 │ │ 缓存层 │ │ 文件系统 │ │ +│ │ • 关系数据库│ │ • Redis │ │ • 本地文件 │ │ +│ │ • NoSQL │ │ • Memcached │ │ • 云存储 │ │ +│ └─────────────┘ └─────────────┘ └─────────────┘ │ +└─────────────────────────────────────────────────────────────┘ +``` + +## 核心组件 + +### 1. 用户界面层 (Presentation Layer) + +**功能**: +- 提供多种用户交互方式 +- 输入验证和格式化 +- 响应渲染 + +**包含组件**: +- **Web界面**:基于React/Vue的现代Web应用 +- **CLI工具**:命令行接口,用于脚本化和自动化 +- **API接口**:RESTful API,供第三方系统集成 + +### 2. 应用服务层 (Application Layer) + +**功能**: +- 请求处理和路由 +- 身份认证和授权 +- 会话管理 +- 输入数据验证 + +**关键类**: +- `RequestHandler`:处理HTTP请求 +- `AuthMiddleware`:认证中间件 +- `RateLimiter`:限流控制 +- `ValidationService`:数据验证服务 + +### 3. 业务逻辑层 (Business Layer) + +**功能**: +- 实现核心业务规则 +- 数据处理和转换 +- 算法执行 +- 模型管理和训练 + +**核心模块**: + +#### 3.1 数据处理模块 +```python +class DataProcessor: + """数据处理引擎""" + + def extract(self, source): + """数据提取""" + pass + + def transform(self, data, rules): + """数据转换""" + pass + + def load(self, data, destination): + """数据加载""" + pass +``` + +#### 3.2 分析引擎模块 +```python +class AnalyticsEngine: + """分析引擎""" + + def statistical_analysis(self, dataset): + """统计分析""" + pass + + def predictive_modeling(self, features, target): + """预测建模""" + pass + + def optimization(self, objective, constraints): + """优化计算""" + pass +``` + +#### 3.3 模型管理模块 +```python +class ModelManager: + """模型管理器""" + + def train(self, config): + """训练模型""" + pass + + def evaluate(self, model, test_data): + """评估模型""" + pass + + def deploy(self, model, environment): + """部署模型""" + pass + + def monitor(self, model, metrics): + """监控模型""" + pass +``` + +### 4. 数据访问层 (Data Access Layer) + +**功能**: +- 数据持久化 +- 缓存管理 +- 数据检索优化 + +**组件**: + +#### 4.1 数据仓库 +```python +class DataRepository: + """数据仓库抽象""" + + def __init__(self, connection): + self.connection = connection + + def save(self, entity): + """保存实体""" + pass + + def find(self, query): + """查找实体""" + pass + + def delete(self, entity_id): + """删除实体""" + pass +``` + +#### 4.2 缓存服务 +```python +class CacheService: + """缓存服务""" + + def __init__(self, backend="redis"): + self.backend = backend + + def get(self, key): + """获取缓存""" + pass + + def set(self, key, value, ttl=None): + """设置缓存""" + pass + + def invalidate(self, key): + """失效缓存""" + pass +``` + +## 数据流图 + +### 典型数据处理流程 + +``` +1. 数据输入 + ↓ +2. 数据验证和清洗 + ↓ +3. 特征工程和转换 + ↓ +4. 模型训练/推理 + ↓ +5. 结果后处理 + ↓ +6. 输出和持久化 +``` + +### 详细数据流 + +``` +┌─────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────┐ +│ 数据源 │───▶│ 数据摄取器 │───▶│ 数据清洗器 │───▶│ 特征工程 │ +│(CSV/DB/ │ │ (Ingestor) │ │ (Cleaner) │ │(Feature │ +│ API等) │ └──────────────┘ └──────────────┘ │ Engineer)│ +└─────────┘ │ │ └──────────┘ + │ │ │ + ┌────▼────┐ ┌─────▼────┐ │ + │ 缓存层 │ │ 数据质量 │ │ + │ (Cache) │ │ 监控器 │ │ + └─────────┘ │(Quality │ │ + │ Monitor) │ │ + └──────────┘ │ + ▼ +┌──────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────┐ +│ 结果存储 │◀───│ 结果处理器 │◀───│ 模型引擎 │◀───│ 模型训练/ │ +│(Result │ │ (Processor) │ │ (Engine) │ │ 推理器 │ +│ Storage) │ └──────────────┘ └──────────────┘ │(Trainer/ │ +└──────────┘ │ │ │ Inferencer) + │ │ └──────────┘ + ┌────▼────┐ ┌─────▼────┐ │ + │ 可视化 │ │ 模型评估 │ │ + │(Viz) │ │(Evaluator)│ │ + └─────────┘ └──────────┘ │ + │ + ┌──────▼──────┐ + │ 模型仓库 │ + │ (Model Repo)│ + └─────────────┘ +``` + +## 技术栈 + +### 后端技术 +- **编程语言**: Python 3.8+ +- **Web框架**: FastAPI/Flask (根据项目选择) +- **任务队列**: Celery + Redis/RabbitMQ +- **数据库**: PostgreSQL/MySQL (关系型), Redis (缓存) +- **ORM**: SQLAlchemy, Django ORM +- **消息队列**: Kafka/RabbitMQ (事件驱动) + +### 前端技术 +- **框架**: React/Vue.js (根据项目选择) +- **构建工具**: Webpack/Vite +- **样式**: CSS3/Sass/Tailwind CSS +- **状态管理**: Redux/Vuex + +### 基础设施 +- **容器化**: Docker +- **编排**: Kubernetes/Docker Compose +- **CI/CD**: GitHub Actions/Jenkins +- **监控**: Prometheus + Grafana +- **日志**: ELK Stack (Elasticsearch, Logstash, Kibana) + +## 部署架构 + +### 开发环境 +``` +┌─────────────────┐ +│ 开发机器 │ +│ • 本地数据库 │ +│ • 开发服务器 │ +│ • 调试工具 │ +└─────────────────┘ +``` + +### 测试环境 +``` +┌─────────────────┐ ┌─────────────────┐ +│ 持续集成 │───▶│ 测试服务器 │ +│ • 自动构建 │ │ • 集成测试 │ +│ • 单元测试 │ │ • 系统测试 │ +└─────────────────┘ └─────────────────┘ +``` + +### 生产环境 +``` +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ 负载均衡器 │───▶│ 应用服务器集群 │───▶│ 数据库集群 │ +│ • Nginx │ │ • 多实例部署 │ │ • 主从复制 │ +│ • HAProxy │ │ • 自动扩展 │ │ • 读写分离 │ +└─────────────────┘ └─────────────────┘ └─────────────────┘ + │ │ │ + ▼ ▼ ▼ +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ CDN和缓存 │ │ 消息队列集群 │ │ 对象存储 │ +│ • CloudFront │ │ • Kafka集群 │ │ • S3兼容存储 │ +│ • Redis缓存 │ │ • RabbitMQ │ │ • 备份系统 │ +└─────────────────┘ └─────────────────┘ └─────────────────┘ +``` + +## 安全架构 + +### 安全层级 + +1. **网络层安全** + - 防火墙配置 + - DDoS防护 + - VPN访问控制 + +2. **应用层安全** + - 输入验证和消毒 + - SQL注入防护 + - XSS/CSRF防护 + - 身份认证和授权 + +3. **数据层安全** + - 数据加密(传输中/静态) + - 访问控制列表 + - 数据脱敏 + +4. **运维安全** + - 密钥管理 + - 审计日志 + - 漏洞扫描 + +### 身份认证流程 +``` +用户请求 + ↓ +身份验证 (JWT/OAuth2) + ↓ +令牌验证和解析 + ↓ +权限检查 (RBAC/ABAC) + ↓ +资源访问 +``` + +## 性能考虑 + +### 性能优化策略 + +1. **缓存策略** + - 多级缓存(内存 → Redis → 数据库) + - 缓存失效策略 + - 缓存预热 + +2. **数据库优化** + - 索引优化 + - 查询优化 + - 读写分离 + - 分库分表 + +3. **异步处理** + - 非阻塞I/O + - 事件驱动架构 + - 批处理 + +4. **水平扩展** + - 无状态设计 + - 服务发现 + - 负载均衡 + +### 性能指标 +- **响应时间**: P95 < 200ms +- **吞吐量**: 支持1000+ QPS +- **可用性**: 99.9% SLA +- **数据一致性**: 最终一致性 + +## 扩展性设计 + +### 水平扩展 +- 无状态服务设计 +- 数据分片策略 +- 服务发现机制 + +### 垂直扩展 +- 模块化设计 +- 插件系统 +- 微服务架构准备 + +### 扩展点 +1. **数据源扩展**: 支持新的数据格式和协议 +2. **算法扩展**: 插件式算法集成 +3. **输出扩展**: 多种结果导出格式 +4. **集成扩展**: 第三方系统对接 + +## 监控与运维 + +### 监控指标 +- **应用指标**: 请求数、错误率、响应时间 +- **系统指标**: CPU、内存、磁盘、网络 +- **业务指标**: 用户数、交易量、转化率 + +### 告警策略 +- **严重级别**: P0(立即处理)、P1(1小时内)、P2(24小时内) +- **告警渠道**: 邮件、短信、Slack、电话 +- **告警规则**: 基于阈值、基于异常检测 + +## 未来演进 + +### 短期计划(3-6个月) +1. 性能优化和瓶颈消除 +2. 监控系统完善 +3. 文档和测试覆盖提升 + +### 中期计划(6-12个月) +1. 微服务架构迁移 +2. 机器学习流水线优化 +3. 多云部署支持 + +### 长期愿景(1-2年) +1. 全自动化运维 +2. AI驱动的优化 +3. 生态系统建设 + +## 相关文档 +- [快速开始](./getting-started.md) - 环境设置和安装 +- [API文档](./api/index.md) - 接口详细说明 +- [部署指南](./deployment.md) - 部署和运维说明 diff --git a/docs/changelog.md b/docs/changelog.md new file mode 100644 index 0000000..ea73ad5 --- /dev/null +++ b/docs/changelog.md @@ -0,0 +1,417 @@ +# 更新日志 + +本文件记录项目的所有重要变更。 + +## 版本说明 + +项目遵循 [语义化版本](https://semver.org/lang/zh-CN/): +- **主版本号 (MAJOR)**: 不兼容的 API 修改 +- **次版本号 (MINOR)**: 向下兼容的功能性新增 +- **修订号 (PATCH)**: 向下兼容的问题修正 + +## [未发布] + +### 新增 +- 初始文档结构 +- 基础文档框架 +- 示例文档内容 + +### 变更 +- 无 + +### 修复 +- 无 + +## [1.0.0] - 2024-06-01 + +### 新增 +- **项目初始化**: 创建项目基础结构和文档 +- **核心功能**: 实现基础控制系统仿真能力 +- **模型支持**: 添加 MODEL_A 和 MODEL_B Simulink 模型 +- **文档体系**: 建立完整的文档结构 + +### 特性详情 +1. **基础框架** + - 项目脚手架和目录结构 + - 基础配置管理系统 + - 日志和错误处理框架 + +2. **仿真引擎** + - Simulink 模型加载和解析 + - 基础数值求解器 + - 数据记录和可视化 + +3. **代码生成** + - Simulink C 代码生成支持 + - 目标平台适配接口 + - 代码验证工具 + +4. **文档系统** + - 用户指南和教程 + - API 参考文档 + - 示例和最佳实践 + +### 技术栈 +- **编程语言**: Python 3.8+ +- **仿真环境**: MATLAB/Simulink R2020a+ +- **构建工具**: setuptools, pip +- **文档工具**: Sphinx, Markdown + +## [0.9.0] - 2024-05-15 + +### 新增 +- **高级控制算法**: 添加自适应控制和模型预测控制 +- **性能优化**: 改进仿真速度和内存使用 +- **扩展接口**: 提供插件系统 API +- **测试框架**: 建立完整的测试套件 + +### 改进 +- 仿真性能提升 40% +- 内存使用减少 30% +- 错误处理更加健壮 +- 用户界面更加友好 + +### 修复 +- 修复仿真发散问题 (#42) +- 修复代码生成中的内存泄漏 (#57) +- 修复多线程环境下的竞争条件 (#63) + +## [0.8.0] - 2024-04-30 + +### 新增 +- **模型导入导出**: 支持多种模型格式 +- **批量处理**: 添加参数扫描和蒙特卡洛仿真 +- **实时监控**: 添加运行时性能监控 +- **远程执行**: 支持分布式计算 + +### 改进 +- 优化模型加载时间 +- 改进数值稳定性 +- 增强错误报告 +- 简化配置流程 + +### 修复 +- 修复文件路径处理问题 (#28) +- 修复许可证验证逻辑 (#35) +- 修复数据序列化错误 (#41) + +## [0.7.0] - 2024-03-31 + +### 新增 +- **Web 界面**: 基于 Web 的用户界面 +- **REST API**: 提供 HTTP API 接口 +- **数据库支持**: 添加结果存储和查询 +- **报告生成**: 自动生成仿真报告 + +### 改进 +- 用户界面响应速度提升 +- API 接口更加一致 +- 文档更加完善 +- 安装过程更加简单 + +### 修复 +- 修复 Web 界面中的内存泄漏 (#22) +- 修复 API 认证问题 (#25) +- 修复数据库连接池问题 (#29) + +## [0.6.0] - 2024-02-28 + +### 新增 +- **插件系统**: 支持第三方插件扩展 +- **自定义模块**: 允许用户添加自定义算法 +- **模板系统**: 提供项目模板和示例 +- **云部署**: 支持云端部署和运行 + +### 改进 +- 插件加载机制更加灵活 +- 模板系统更加易用 +- 部署过程更加自动化 +- 错误信息更加详细 + +### 修复 +- 修复插件依赖管理 (#18) +- 修复云部署配置问题 (#21) +- 修复模板变量替换 (#24) + +## [0.5.0] - 2024-01-31 + +### 新增 +- **并行计算**: 支持多核和分布式计算 +- **GPU 加速**: 添加 GPU 计算支持 +- **优化算法**: 集成多种优化算法 +- **机器学习**: 添加基础机器学习功能 + +### 改进 +- 计算性能显著提升 +- 算法选择更加丰富 +- 资源管理更加高效 +- 用户界面更加直观 + +### 修复 +- 修复并行计算死锁问题 (#15) +- 修复 GPU 内存管理 (#17) +- 修复优化算法收敛问题 (#19) + +## [0.4.0] - 2023-12-31 + +### 新增 +- **硬件在环**: 支持硬件在环测试 +- **实时仿真**: 添加实时仿真能力 +- **代码验证**: 提供生成代码验证工具 +- **安全分析**: 添加系统安全分析功能 + +### 改进 +- 实时性能达到工业标准 +- 验证工具更加完善 +- 安全分析更加全面 +- 用户反馈更加及时 + +### 修复 +- 修复实时时钟同步 (#12) +- 修复硬件接口兼容性 (#14) +- 修复安全分析误报 (#16) + +## [0.3.0] - 2023-11-30 + +### 新增 +- **模型验证**: 添加模型验证工具 +- **测试自动化**: 提供自动化测试框架 +- **持续集成**: 支持 CI/CD 流水线 +- **质量保证**: 添加代码质量检查 + +### 改进 +- 验证覆盖率大幅提升 +- 测试执行更加高效 +- 集成流程更加流畅 +- 代码质量显著提高 + +### 修复 +- 修复模型验证逻辑 (#9) +- 修复测试环境配置 (#10) +- 修复 CI 脚本错误 (#11) + +## [0.2.0] - 2023-10-31 + +### 新增 +- **图形界面**: 添加桌面图形用户界面 +- **交互式工具**: 提供交互式开发环境 +- **数据可视化**: 增强数据可视化能力 +- **用户管理**: 添加多用户支持 + +### 改进 +- 用户界面更加友好 +- 交互体验更加流畅 +- 可视化效果更加出色 +- 系统管理更加方便 + +### 修复 +- 修复界面响应问题 (#6) +- 修复数据导出格式 (#7) +- 修复用户权限管理 (#8) + +## [0.1.0] - 2023-09-30 + +### 新增 +- **项目启动**: 初始版本发布 +- **基础功能**: 实现核心仿真功能 +- **简单界面**: 提供命令行界面 +- **基础文档**: 创建用户手册 + +### 特性 +1. **核心仿真** + - Simulink 模型加载 + - 基础求解器 + - 结果输出 + +2. **用户界面** + - 命令行交互 + - 简单配置 + - 基础帮助 + +3. **文档** + - 安装指南 + - 快速开始 + - API 参考 + +### 已知问题 +- 性能有待优化 +- 功能相对基础 +- 用户界面简单 + +## 版本历史摘要 + +| 版本 | 发布日期 | 主要特性 | 状态 | +|------|----------|----------|------| +| 1.0.0 | 2024-06-01 | 正式发布,完整功能 | 稳定 | +| 0.9.0 | 2024-05-15 | 高级控制算法,性能优化 | Beta | +| 0.8.0 | 2024-04-30 | 批量处理,远程执行 | Beta | +| 0.7.0 | 2024-03-31 | Web 界面,REST API | Beta | +| 0.6.0 | 2024-02-28 | 插件系统,云部署 | Alpha | +| 0.5.0 | 2024-01-31 | 并行计算,GPU 加速 | Alpha | +| 0.4.0 | 2023-12-31 | 硬件在环,实时仿真 | Alpha | +| 0.3.0 | 2023-11-30 | 模型验证,测试自动化 | Alpha | +| 0.2.0 | 2023-10-31 | 图形界面,交互式工具 | Alpha | +| 0.1.0 | 2023-09-30 | 初始版本,基础功能 | Alpha | + +## 升级指南 + +### 从 0.9.x 升级到 1.0.0 +1. **备份配置**: 备份现有配置文件 +2. **更新依赖**: 安装新版本的依赖包 +3. **迁移配置**: 根据迁移指南更新配置 +4. **测试功能**: 运行测试确保功能正常 +5. **更新代码**: 如有需要,更新自定义代码 + +### 重大变更说明 +#### 配置格式变更 +- 配置文件从 JSON 改为 YAML 格式 +- 部分配置项名称已更改 +- 新增配置验证机制 + +#### API 变更 +- 部分 API 接口已重命名 +- 返回值格式更加规范 +- 错误处理更加一致 + +#### 依赖更新 +- 最低 Python 版本要求提升到 3.8 +- 部分第三方库版本要求变更 +- 新增可选依赖项 + +### 迁移工具 +项目提供迁移脚本帮助升级: +```bash +python scripts/migrate_config.py old_config.json new_config.yaml +``` + +## 已知问题 + +### 当前版本 (1.0.0) + +#### 性能问题 +- **P1**: 大型模型仿真内存使用较高 (#101) +- **P2**: 多参数扫描时性能下降 (#102) +- **P3**: 实时仿真偶发性延迟 (#103) + +#### 功能限制 +- **L1**: 不支持 Simscape 物理建模 (#201) +- **L2**: SimEvents 支持有限 (#202) +- **L3**: 某些 MATLAB 版本兼容性问题 (#203) + +#### 用户体验 +- **U1**: 错误信息有时不够明确 (#301) +- **U2**: 文档搜索功能待改进 (#302) +- **U3**: 安装过程在某些系统上较复杂 (#303) + +### 已解决的问题 +查看 [GitHub Issues](https://github.com/your-username/your-project/issues) 获取完整列表。 + +## 未来计划 + +### 短期计划 (未来 3 个月) +1. **性能优化** + - 内存使用优化 + - 并行计算改进 + - 启动时间缩短 + +2. **功能增强** + - 新增模型类型支持 + - 改进用户界面 + - 增强数据分析工具 + +3. **用户体验** + - 改进错误提示 + - 优化安装流程 + - 增加更多示例 + +### 中期计划 (3-6 个月) +1. **新特性** + - 云端协同仿真 + - AI 辅助建模 + - 自动化测试生成 + +2. **集成扩展** + - 更多第三方工具集成 + - 工业标准协议支持 + - 跨平台兼容性提升 + +3. **社区建设** + - 用户社区平台 + - 贡献者计划 + - 培训和教育资源 + +### 长期愿景 (6-12 个月) +1. **技术创新** + - 下一代仿真引擎 + - 智能化建模工具 + - 自主优化系统 + +2. **生态系统** + - 插件市场 + - 云服务平台 + - 企业级解决方案 + +3. **行业应用** + - 特定行业解决方案 + - 认证和合规支持 + - 全球合作伙伴网络 + +## 支持政策 + +### 支持版本 +| 版本 | 发布日期 | 支持结束 | 支持级别 | +|------|----------|----------|----------| +| 1.0.x | 2024-06-01 | 2025-06-01 | 完全支持 | +| 0.9.x | 2024-05-15 | 2024-11-15 | 有限支持 | +| 0.8.x | 2024-04-30 | 2024-10-30 | 有限支持 | +| 更早版本 | - | - | 不支持 | + +### 支持类型 +1. **完全支持** + - 安全更新和错误修复 + - 功能改进和优化 + - 文档更新和维护 + - 官方技术支持 + +2. **有限支持** + - 严重安全漏洞修复 + - 关键错误修复 + - 文档修正 + - 社区支持 + +3. **不支持** + - 不提供官方支持 + - 不保证兼容性 + - 建议升级到支持版本 + +### 获取支持 +- **社区支持**: GitHub Discussions, Stack Overflow +- **官方支持**: 支持合同客户(如有) +- **紧急问题**: 安全漏洞报告通道 + +## 贡献者致谢 + +感谢所有为项目做出贡献的人员: + +### 核心维护者 +- [姓名 1] - 项目负责人 +- [姓名 2] - 技术架构师 +- [姓名 3] - 文档维护者 + +### 主要贡献者 +- [贡献者 1] - 仿真引擎开发 +- [贡献者 2] - 用户界面设计 +- [贡献者 3] - 测试框架实现 +- [贡献者 4] - 文档编写 + +### 社区贡献者 +感谢所有提交 Issue、Pull Request 和参与讨论的社区成员! + +### 特别感谢 +- 感谢 [机构/组织] 提供的支持和资源 +- 感谢用户社区的反馈和建议 +- 感谢开源社区提供的工具和库 + +--- + +*本更新日志遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/) 规范* diff --git a/docs/contributing.md b/docs/contributing.md new file mode 100644 index 0000000..eb3b1e2 --- /dev/null +++ b/docs/contributing.md @@ -0,0 +1,343 @@ +# 贡献指南 + +欢迎您为项目做出贡献!本文档将指导您如何参与项目开发。 + +## 行为准则 + +参与本项目,您需要遵守我们的行为准则: +- 尊重所有贡献者,无论其经验水平、性别、性取向、残疾、种族、宗教等 +- 使用友好和包容的语言 +- 尊重不同的观点和经验 +- 建设性地接受批评 +- 关注对社区最有利的事情 +- 对其他社区成员表现出同理心 + +## 如何开始贡献 + +### 第一步:了解项目 +1. 阅读项目文档,特别是 [README](../README.md) 和 [架构文档](./architecture.md) +2. 查看现有的 [Issues](https://github.com/your-username/your-project/issues) 和 [Pull Requests](https://github.com/your-username/your-project/pulls) +3. 加入我们的 [讨论区](https://github.com/your-username/your-project/discussions) 了解项目动态 + +### 第二步:设置开发环境 +1. Fork 项目仓库 +2. 克隆您的 fork: + ```bash + git clone https://github.com/your-username/your-project.git + cd your-project + ``` +3. 设置上游远程: + ```bash + git remote add upstream https://github.com/original-owner/your-project.git + ``` +4. 安装开发依赖: + ```bash + pip install -e ".[dev]" + ``` +5. 运行测试确保一切正常: + ```bash + pytest tests/ + ``` + +### 第三步:选择任务 +- **初学者友好**: 查看标签为 `good-first-issue` 的 Issues +- **文档改进**: 标签为 `documentation` 的 Issues +- **错误修复**: 标签为 `bug` 的 Issues +- **功能开发**: 标签为 `enhancement` 的 Issues + +如果您有新的想法,请先在 Issues 中讨论,获得认可后再开始实现。 + +## 开发流程 + +### 1. 创建分支 +```bash +# 同步主分支 +git fetch upstream +git checkout main +git merge upstream/main + +# 创建功能分支 +git checkout -b feature/your-feature-name +# 或修复分支 +git checkout -b fix/issue-number-description +``` + +**分支命名规范**: +- `feature/` - 新功能 +- `fix/` - 错误修复 +- `docs/` - 文档更新 +- `test/` - 测试相关 +- `refactor/` - 代码重构 +- `style/` - 代码格式调整(不影响功能) + +### 2. 进行更改 +- 遵循项目的代码风格 +- 为新增功能编写测试 +- 更新相关文档 +- 确保所有测试通过 + +### 3. 提交更改 +```bash +# 添加更改的文件 +git add . + +# 提交更改 +git commit -m "类型(范围): 描述性信息 + +详细说明(可选) + +解决: #issue-number" +``` + +**提交信息规范**: +- **类型**: feat, fix, docs, style, refactor, test, chore +- **范围**: 影响的模块或文件 +- **描述**: 简明扼要的说明 +- **正文**: 详细说明(可选) +- **页脚**: 关联的 Issue + +**示例**: +``` +feat(api): 添加用户认证端点 + +- 添加 POST /auth/login 端点 +- 实现 JWT 令牌生成 +- 添加相关测试用例 + +解决: #42 +``` + +### 4. 保持分支更新 +```bash +# 获取上游更新 +git fetch upstream + +# 合并到当前分支 +git merge upstream/main +# 或使用变基 +git rebase upstream/main +``` + +### 5. 运行测试 +```bash +# 运行所有测试 +pytest + +# 运行特定测试 +pytest tests/test_module.py + +# 运行带覆盖率的测试 +pytest --cov=your_project tests/ + +# 代码质量检查 +flake8 your_project/ +black --check your_project/ +mypy your_project/ +``` + +### 6. 推送更改 +```bash +git push origin feature/your-feature-name +``` + +### 7. 创建 Pull Request +1. 访问您的仓库页面 +2. 点击 "Compare & pull request" +3. 填写 PR 模板 +4. 确保 CI 通过 +5. 请求代码审查 + +## 代码规范 + +### 代码风格 +- 遵循 [PEP 8](https://peps.python.org/pep-0008/) (Python) +- 使用 4 空格缩进 +- 行长度限制在 88 个字符(使用 Black 格式化) +- 导入排序:标准库 → 第三方库 → 本地模块 + +### 文档要求 +- 所有公共 API 必须有文档字符串 +- 使用 Google 风格文档字符串: + ```python + def function_name(param1: str, param2: int) -> bool: + """函数简要描述。 + + 详细描述(可选)。 + + Args: + param1: 参数1的描述 + param2: 参数2的描述 + + Returns: + 返回值的描述 + + Raises: + ValueError: 当参数无效时 + """ + ``` + +### 测试要求 +- 测试覆盖率不低于 80% +- 每个功能必须有对应的测试 +- 测试应该独立,不依赖外部状态 +- 使用有意义的测试名称 + +## 测试指南 + +### 单元测试 +```python +import pytest +from your_project.module import your_function + +def test_your_function_normal_case(): + """测试正常情况""" + result = your_function(1, 2) + assert result == 3 + +def test_your_function_edge_case(): + """测试边界情况""" + with pytest.raises(ValueError): + your_function(-1, 2) + +def test_your_function_with_fixture(sample_fixture): + """使用 fixture 的测试""" + result = your_function(sample_fixture, 2) + assert result == expected_value +``` + +### 集成测试 +```python +def test_integration_with_database(db_connection): + """数据库集成测试""" + # 设置测试数据 + setup_test_data(db_connection) + + # 执行测试 + result = query_database(db_connection) + + # 验证结果 + assert result == expected_data + + # 清理 + cleanup_test_data(db_connection) +``` + +### 性能测试 +```python +import timeit + +def test_performance(): + """性能测试""" + execution_time = timeit.timeit( + 'your_function(1000)', + setup='from your_project.module import your_function', + number=1000 + ) + assert execution_time < 1.0 # 1秒内完成1000次执行 +``` + +## 文档贡献 + +### 文档结构 +``` +docs/ +├── index.md # 首页 +├── getting-started.md # 快速开始 +├── tutorials/ # 教程 +├── api/ # API 文档 +├── examples/ # 示例 +├── architecture.md # 架构文档 +└── contributing.md # 本文档 +``` + +### 文档标准 +- 使用清晰的 Markdown 语法 +- 包含代码示例 +- 提供相关链接 +- 保持文档更新与代码同步 +- 对于复杂概念,提供图表说明 + +### 添加新文档 +1. 在合适的位置创建新文件 +2. 遵循现有的文档结构 +3. 更新相关索引文件 +4. 确保链接正确 + +## 审查流程 + +### 作为贡献者 +1. 确保 PR 描述清晰 +2. 解决所有 CI 检查失败 +3. 回应审查意见 +4. 保持对话礼貌和专业 + +### 作为审查者 +1. 及时响应 PR +2. 提供建设性反馈 +3. 检查代码质量和测试覆盖 +4. 确保符合项目标准 + +### PR 合并条件 +- [ ] 所有 CI 检查通过 +- [ ] 代码审查通过 +- [ ] 测试覆盖率不降低 +- [ ] 文档已更新 +- [ ] 符合代码规范 + +## 发布流程 + +### 版本号 +遵循 [语义化版本](https://semver.org/lang/zh-CN/): +- **主版本号**:不兼容的 API 修改 +- **次版本号**:向下兼容的功能性新增 +- **修订号**:向下兼容的问题修正 + +### 发布步骤 +1. 更新 `CHANGELOG.md` +2. 更新版本号(在 `pyproject.toml` 或 `setup.py` 中) +3. 创建发布分支 +4. 运行完整测试套件 +5. 构建发布包 +6. 创建 GitHub Release +7. 发布到 PyPI(如果适用) + +## 社区角色 + +### 贡献者级别 +- **新手**: 完成第一个 PR +- **活跃贡献者**: 多个有意义的贡献 +- **核心贡献者**: 对项目有深入了解,有合并权限 +- **维护者**: 负责项目方向和发布 + +### 如何成为核心贡献者 +1. 持续贡献高质量代码 +2. 积极参与社区讨论 +3. 帮助审查其他人的 PR +4. 在 Issues 中帮助其他用户 +5. 维护部分模块或文档 + +## 获取帮助 + +### 资源 +- 📖 [项目文档](./index.md) +- 💬 [讨论区](https://github.com/your-username/your-project/discussions) +- 🐛 [Issue 跟踪](https://github.com/your-username/your-project/issues) +- 📧 邮件列表: project@example.com + +### 沟通渠道 +- **一般问题**: GitHub Discussions +- **错误报告**: GitHub Issues +- **安全漏洞**: security@example.com(非公开) +- **实时讨论**: Discord/Slack(如果设置) + +## 许可证 + +贡献者同意其贡献将在项目的许可证下发布。当前项目使用 [MIT 许可证](../LICENSE)。 + +## 致谢 + +感谢所有为项目做出贡献的人!您的每一点贡献都让项目变得更好。 + +--- + +*本文档受 [开源贡献指南模板](https://github.com/opencollective/opensource-template) 启发* diff --git a/docs/examples/example1.md b/docs/examples/example1.md new file mode 100644 index 0000000..f2c6262 --- /dev/null +++ b/docs/examples/example1.md @@ -0,0 +1,339 @@ +# 示例 1: 基础使用 + +本示例演示如何基础使用本项目完成一个简单的任务。 + +## 概述 + +本示例将展示: +1. 如何加载和配置项目 +2. 如何执行基本操作 +3. 如何查看和验证结果 + +## 前提条件 + +确保您已经: +- 完成 [环境安装](../getting-started.md) +- 安装所有依赖 +- 克隆项目代码 + +## 示例代码 + +### 完整示例脚本 + +创建文件 `run_example1.py`: + +```python +#!/usr/bin/env python3 +""" +示例 1: 基础使用 +""" + +import os +import sys +import logging +from pathlib import Path + +# 添加项目根目录到路径 +project_root = Path(__file__).parent.parent.parent +sys.path.insert(0, str(project_root)) + +from your_project import Project +from your_project.utils import setup_logging + +def setup_environment(): + """设置环境""" + # 配置日志 + setup_logging(level=logging.INFO) + + # 创建必要目录 + directories = ["data/input", "data/output", "logs"] + for directory in directories: + Path(directory).mkdir(parents=True, exist_ok=True) + + print("环境设置完成") + +def create_sample_data(): + """创建示例数据""" + import json + import csv + + # 创建 JSON 数据 + json_data = { + "name": "示例项目", + "version": "1.0.0", + "parameters": { + "batch_size": 32, + "learning_rate": 0.001, + "epochs": 10 + }, + "features": ["feature1", "feature2", "feature3"] + } + + with open("data/input/sample.json", "w", encoding="utf-8") as f: + json.dump(json_data, f, indent=2, ensure_ascii=False) + + # 创建 CSV 数据 + csv_data = [ + ["id", "name", "value", "category"], + [1, "item1", 10.5, "A"], + [2, "item2", 20.3, "B"], + [3, "item3", 15.7, "A"], + [4, "item4", 25.1, "C"], + [5, "item5", 18.9, "B"] + ] + + with open("data/input/sample.csv", "w", encoding="utf-8", newline="") as f: + writer = csv.writer(f) + writer.writerows(csv_data) + + print("示例数据创建完成") + +def run_project_operations(): + """运行项目操作""" + # 初始化项目 + project = Project( + config_path="config.yaml", + log_level="INFO" + ) + + # 加载配置 + project.load_config() + + # 处理数据 + print("开始处理数据...") + + # 示例操作 1: 加载数据 + data = project.load_data("data/input/sample.csv") + print(f"加载数据: {len(data)} 条记录") + + # 示例操作 2: 数据转换 + transformed_data = project.transform_data(data) + print(f"数据转换完成") + + # 示例操作 3: 执行分析 + analysis_result = project.analyze(transformed_data) + print(f"分析完成: {analysis_result['summary']}") + + # 示例操作 4: 保存结果 + project.save_results( + analysis_result, + output_path="data/output/results.json" + ) + + return analysis_result + +def visualize_results(result): + """可视化结果""" + try: + import matplotlib.pyplot as plt + import pandas as pd + + # 创建可视化 + fig, axes = plt.subplots(2, 2, figsize=(12, 10)) + + # 图表 1: 条形图 + if 'metrics' in result: + metrics = result['metrics'] + axes[0, 0].bar(range(len(metrics)), list(metrics.values())) + axes[0, 0].set_title("性能指标") + axes[0, 0].set_xticks(range(len(metrics))) + axes[0, 0].set_xticklabels(list(metrics.keys()), rotation=45) + + # 图表 2: 饼图 + if 'distribution' in result: + distribution = result['distribution'] + axes[0, 1].pie( + list(distribution.values()), + labels=list(distribution.keys()), + autopct='%1.1f%%' + ) + axes[0, 1].set_title("数据分布") + + # 图表 3: 折线图 + if 'history' in result: + history = result['history'] + axes[1, 0].plot(history) + axes[1, 0].set_title("训练历史") + axes[1, 0].set_xlabel("迭代") + axes[1, 0].set_ylabel("损失") + + # 图表 4: 散点图 + if 'predictions' in result: + predictions = result['predictions'] + if len(predictions) > 0 and isinstance(predictions[0], dict): + x = [p.get('x', i) for i, p in enumerate(predictions)] + y = [p.get('y', 0) for p in predictions] + axes[1, 1].scatter(x, y) + axes[1, 1].set_title("预测结果") + axes[1, 1].set_xlabel("特征") + axes[1, 1].set_ylabel("预测值") + + plt.tight_layout() + plt.savefig("data/output/visualization.png", dpi=150) + plt.close() + + print("可视化结果已保存: data/output/visualization.png") + + except ImportError: + print("Matplotlib 未安装,跳过可视化") + print("安装命令: pip install matplotlib") + +def generate_report(result): + """生成报告""" + report = f""" +# 示例运行报告 + +## 执行摘要 +- 执行时间: {result.get('timestamp', '未知')} +- 状态: {result.get('status', '未知')} +- 处理记录数: {result.get('processed_count', 0)} + +## 性能指标 +""" + + if 'metrics' in result: + for key, value in result['metrics'].items(): + report += f"- {key}: {value:.4f}\n" + + report += f""" +## 详细结果 +{result.get('details', '无')} + +## 下一步建议 +1. 查看输出文件: data/output/results.json +2. 查看可视化: data/output/visualization.png +3. 尝试修改参数重新运行 +""" + + with open("data/output/report.md", "w", encoding="utf-8") as f: + f.write(report) + + print("报告已生成: data/output/report.md") + +def main(): + """主函数""" + print("=" * 60) + print("示例 1: 基础使用") + print("=" * 60) + + try: + # 步骤 1: 环境设置 + setup_environment() + + # 步骤 2: 创建示例数据 + create_sample_data() + + # 步骤 3: 运行项目操作 + result = run_project_operations() + + # 步骤 4: 可视化结果 + visualize_results(result) + + # 步骤 5: 生成报告 + generate_report(result) + + print("=" * 60) + print("示例运行完成!") + print("输出文件:") + print(" - data/output/results.json") + print(" - data/output/visualization.png") + print(" - data/output/report.md") + print("=" * 60) + + except Exception as e: + print(f"运行示例时出错: {e}") + import traceback + traceback.print_exc() + sys.exit(1) + +if __name__ == "__main__": + main() +``` + +## 运行示例 + +### 方法一: 直接运行 + +```bash +python run_example1.py +``` + +### 方法二: 使用提供的脚本 + +如果项目包含示例脚本: + +```bash +python examples/example1.py +``` + +## 预期输出 + +运行成功后,您应该看到: + +``` +============================================================ +示例 1: 基础使用 +============================================================ +环境设置完成 +示例数据创建完成 +开始处理数据... +加载数据: 5 条记录 +数据转换完成 +分析完成: 分析成功,包含5个指标 +可视化结果已保存: data/output/visualization.png +报告已生成: data/output/report.md +============================================================ +示例运行完成! +输出文件: + - data/output/results.json + - data/output/visualization.png + - data/output/report.md +============================================================ +``` + +## 文件结构 + +运行示例后,目录结构如下: + +``` +data/ +├── input/ +│ ├── sample.json +│ └── sample.csv +└── output/ + ├── results.json + ├── visualization.png + └── report.md +logs/ +└── app.log +``` + +## 自定义示例 + +您可以修改以下部分来自定义示例: + +1. **修改数据**: 编辑 `data/input/sample.csv` 或 `sample.json` +2. **调整参数**: 修改 `config.yaml` 中的配置 +3. **扩展功能**: 在 `run_project_operations()` 函数中添加更多操作 + +## 故障排除 + +### 常见问题 + +1. **导入错误**: 确保项目根目录在 Python 路径中 +2. **文件不存在**: 检查 `data/input/` 目录是否存在 +3. **权限问题**: 确保对输出目录有写入权限 + +### 调试模式 + +要获取更详细的输出,启用调试日志: + +```bash +python run_example1.py --log-level DEBUG +``` + +## 下一步 + +- 查看 [示例数据目录](../examples/example-data/) 获取更多示例模型和脚本 +- 探索 [高级教程](../tutorials/tutorial-advanced.md) 学习更复杂的功能 +- 参考 [API 文档](../api/index.md) 了解可用接口 diff --git a/docs/faq.md b/docs/faq.md new file mode 100644 index 0000000..93baa64 --- /dev/null +++ b/docs/faq.md @@ -0,0 +1,431 @@ +# 常见问题解答 (FAQ) + +本文档解答关于项目的常见问题。 + +## 一般问题 + +### 这个项目是什么? +这是一个 [项目简要描述,例如:用于控制系统仿真和代码生成的工具链],旨在帮助工程师和研究人员 [项目的主要目标]。 + +### 项目的主要特性有哪些? +- **特性 1**: [描述特性 1] +- **特性 2**: [描述特性 2] +- **特性 3**: [描述特性 3] +- **特性 4**: [描述特性 4] + +### 项目支持哪些平台? +- **操作系统**: Windows 10/11, macOS 10.14+, Linux (Ubuntu 18.04+, CentOS 7+) +- **Python**: 3.8 及以上版本 +- **MATLAB/Simulink**: R2020a 及以上版本(可选,部分功能需要) +- **硬件**: x86-64 架构,ARM 架构支持正在开发中 + +### 如何获取项目的最新信息? +- 访问项目 [GitHub 仓库](https://github.com/your-username/your-project) +- 查看 [更新日志](./changelog.md) +- 订阅项目邮件列表(如果提供) + +## 安装问题 + +### 安装失败,提示依赖冲突怎么办? +```bash +# 尝试使用虚拟环境 +python -m venv venv +source venv/bin/activate # Linux/macOS +venv\Scripts\activate # Windows +pip install -r requirements.txt +``` + +如果问题仍然存在,请: +1. 更新 pip: `pip install --upgrade pip` +2. 尝试安装特定版本: `pip install your-package==x.y.z` +3. 在 [Issues](https://github.com/your-username/your-project/issues) 中报告问题 + +### 需要安装 MATLAB/Simulink 吗? +- **基础功能**: 不需要,Python 部分可以独立运行 +- **高级功能**: 部分高级控制和仿真功能需要 MATLAB/Simulink +- **代码生成**: 从 Simulink 模型生成代码需要 Simulink Coder + +### 安装后如何验证是否成功? +```bash +# 运行验证脚本 +python -c "import your_project; print('安装成功!')" + +# 运行示例 +python examples/example1.py + +# 运行测试 +pytest tests/test_basic.py -v +``` + +### 如何从源代码安装开发版本? +```bash +git clone https://github.com/your-username/your-project.git +cd your-project +pip install -e ".[dev]" +``` + +## 使用问题 + +### 如何开始使用项目? +1. 阅读 [快速开始指南](./getting-started.md) +2. 运行基础示例: `python examples/example1.py` +3. 查看 [基础教程](./tutorials/tutorial-quick.md) +4. 根据需要参考 [API 文档](./api/index.md) + +### 运行时出现 "ModuleNotFoundError" 错误怎么办? +这通常是因为缺少依赖或 Python 路径问题: + +1. **检查依赖是否安装**: + ```bash + pip list | grep your-project + ``` + +2. **添加项目根目录到 Python 路径**: + ```python + import sys + import os + sys.path.insert(0, os.path.abspath('.')) + ``` + +3. **重新安装包**: + ```bash + pip install -e . + ``` + +### 如何配置项目参数? +项目支持多种配置方式: + +1. **配置文件** (推荐): + ```yaml + # config.yaml + project: + name: "我的项目" + version: "1.0.0" + logging: + level: "INFO" + ``` + +2. **环境变量**: + ```bash + export PROJECT_LOG_LEVEL=DEBUG + export PROJECT_CONFIG_PATH=/path/to/config.yaml + ``` + +3. **代码中配置**: + ```python + from your_project import configure + configure(log_level="INFO", config_path="config.yaml") + ``` + +### 如何调试运行时问题? +1. **启用调试日志**: + ```bash + export PROJECT_LOG_LEVEL=DEBUG + ``` + +2. **使用 Python 调试器**: + ```python + import pdb + pdb.set_trace() # 在代码中插入断点 + ``` + +3. **检查日志文件**: + ```bash + tail -f logs/app.log + ``` + +4. **启用详细输出**: + ```python + import logging + logging.basicConfig(level=logging.DEBUG) + ``` + +## 模型相关 + +### 如何导入我的 Simulink 模型? +1. 确保模型保存为 `.slx` 格式 +2. 将模型文件放在 `models/` 目录下 +3. 使用模型加载器: + ```python + from your_project.model_loader import load_model + model = load_model('path/to/your_model.slx') + ``` + +### 支持哪些 Simulink 特性? +- ✅ 基本模块(增益、积分、传递函数等) +- ✅ 子系统封装和引用 +- ✅ 状态空间和传递函数 +- ✅ S-函数(有限支持) +- ✅ MATLAB Function 模块 +- ❌ Simscape 物理建模(计划中) +- ❌ SimEvents 离散事件仿真(计划中) + +### 如何从 Simulink 模型生成代码? +```matlab +% 在 MATLAB 中 +load_system('your_model.slx'); +rtwbuild('your_model'); + +% 或使用 Python 接口 +from your_project.codegen import generate_code +generate_code('your_model.slx', target='ert') +``` + +### 生成的代码如何集成到我的项目中? +1. **手动集成**: 将生成的 `.c/.h` 文件复制到您的项目 +2. **自动集成**: 使用提供的构建脚本 +3. **测试验证**: 使用 PIL (Processor-in-the-Loop) 测试 + +详细步骤参考 [模型文档](./models/MODEL_A.md) 中的代码生成部分。 + +## 性能问题 + +### 仿真运行速度很慢,如何优化? +1. **减少输出数据点**: + ```python + config = {'MaxDataPoints': 1000} # 限制数据点数量 + ``` + +2. **使用固定步长求解器**: + ```python + config = {'Solver': 'ode4', 'FixedStep': '0.01'} + ``` + +3. **禁用不必要的日志和监控**: + ```python + config = {'EnableLogging': False, 'EnableMonitoring': False} + ``` + +4. **并行计算**(如果支持): + ```python + from multiprocessing import Pool + with Pool(4) as p: + results = p.map(run_simulation, parameters) + ``` + +### 内存使用过多怎么办? +1. **限制仿真时间**: + ```python + sim_time = 10.0 # 秒 + ``` + +2. **使用稀疏矩阵**(如果适用): + ```python + from scipy import sparse + ``` + +3. **分批处理数据**: + ```python + batch_size = 1000 + for i in range(0, len(data), batch_size): + batch = data[i:i+batch_size] + process_batch(batch) + ``` + +4. **使用内存映射文件**处理大型数据集: + ```python + import numpy as np + data = np.memmap('large_data.dat', dtype='float32', mode='r') + ``` + +### 如何评估模型性能? +项目提供多种性能评估工具: + +1. **基准测试脚本**: + ```bash + python benchmarks/performance_test.py + ``` + +2. **性能分析器**: + ```python + import cProfile + cProfile.run('your_function()', 'profile_stats') + ``` + +3. **内存分析器**: + ```python + from memory_profiler import profile + @profile + def your_function(): + # 你的代码 + ``` + +## 错误和故障排除 + +### 常见错误代码和解决方案 + +#### 错误 1001: 初始化失败 +**原因**: 配置错误或依赖缺失 +**解决方案**: +1. 检查配置文件语法 +2. 验证所有依赖已安装 +3. 查看详细日志获取更多信息 + +#### 错误 2001: 仿真发散 +**原因**: 数值不稳定或参数设置不当 +**解决方案**: +1. 减小仿真步长 +2. 检查控制器参数 +3. 使用更稳定的求解器 + +#### 错误 3001: 文件读写错误 +**原因**: 权限问题或文件不存在 +**解决方案**: +1. 检查文件路径和权限 +2. 确保目录存在 +3. 使用绝对路径 + +#### 错误 4001: 许可证问题 +**原因**: MATLAB/Simulink 许可证无效 +**解决方案**: +1. 验证 MATLAB 许可证 +2. 检查网络连接(如果是网络许可证) +3. 联系系统管理员 + +### 如何报告错误? +1. 在 [GitHub Issues](https://github.com/your-username/your-project/issues) 中搜索是否已有类似问题 +2. 创建新 Issue,包含: + - 错误信息(完整 traceback) + - 复现步骤 + - 环境信息(操作系统、Python 版本等) + - 相关代码和配置文件 + +### 调试技巧 +1. **启用详细输出**: + ```python + import logging + logging.basicConfig(level=logging.DEBUG) + ``` + +2. **使用交互式调试**: + ```bash + python -m pdb your_script.py + ``` + +3. **检查中间结果**: + ```python + # 在关键位置添加检查点 + print(f"变量值: {variable}") + import pickle + pickle.dump(data, open('debug.pkl', 'wb')) + ``` + +4. **简化测试用例**: + - 创建最小复现示例 + - 逐步添加复杂度直到问题出现 + +## 扩展和定制 + +### 如何添加自定义模块? +1. 在 `extensions/` 目录中创建新模块 +2. 实现基础接口: + ```python + from your_project.base import BaseModule + + class CustomModule(BaseModule): + def __init__(self, config): + super().__init__(config) + + def process(self, input_data): + # 实现你的逻辑 + return processed_data + ``` + +3. 注册模块: + ```python + from your_project.registry import register_module + register_module('custom', CustomModule) + ``` + +### 如何集成第三方库? +1. 在 `requirements.txt` 或 `setup.py` 中添加依赖 +2. 创建适配器层: + ```python + class ThirdPartyAdapter: + def __init__(self, config): + import third_party_lib + self.lib = third_party_lib + + def adapt_method(self, *args, **kwargs): + # 适配第三方库接口 + return self.lib.original_method(*args, **kwargs) + ``` + +3. 确保许可证兼容性 + +### 如何贡献我的扩展? +参考 [贡献指南](./contributing.md) 了解详细的贡献流程。 + +## 许可证和法律 + +### 项目使用什么许可证? +项目使用 [MIT 许可证](../LICENSE),详见 [license.md](./license.md)。 + +### 我可以将项目用于商业用途吗? +是的,MIT 许可证允许商业使用,但请遵守许可证条款。 + +### 如何引用这个项目? +如果您在学术工作中使用了本项目,请引用: + +```bibtex +@software{your_project_2024, + author = {作者}, + title = {项目名称}, + year = {2024}, + publisher = {GitHub}, + url = {https://github.com/your-username/your-project} +} +``` + +### 贡献的代码使用什么许可证? +所有贡献的代码将在项目的 MIT 许可证下发布。 + +## 社区和支持 + +### 在哪里可以提问? +1. **GitHub Discussions**: 适合一般讨论和问题 +2. **GitHub Issues**: 适合错误报告和功能请求 +3. **邮件列表**: 适合正式交流(如果提供) +4. **Stack Overflow**: 使用项目标签提问 + +### 如何获取技术支持? +- **社区支持**: 通过上述渠道获取免费社区支持 +- **商业支持**: 联系项目维护者获取商业支持选项(如果提供) +- **咨询服务**: 定制开发和技术咨询(如果提供) + +### 如何报告安全漏洞? +请勿在公开渠道报告安全漏洞。请发送邮件到: +``` +security@example.com +``` + +包括: +1. 漏洞描述 +2. 影响版本 +3. 复现步骤 +4. 建议的修复方案 + +## 其他问题 + +### 项目的发展路线图是什么? +查看项目的 [Roadmap](https://github.com/your-username/your-project/wiki/Roadmap) 页面了解未来计划。 + +### 如何参与项目开发? +参考 [贡献指南](./contributing.md) 了解如何开始贡献。 + +### 项目有相关的论文或出版物吗? +查看项目的 [Publications](https://github.com/your-username/your-project/wiki/Publications) 页面。 + +### 如何获取项目更新通知? +1. Watch 项目的 GitHub 仓库 +2. 订阅邮件列表(如果提供) +3. 关注项目的社交媒体账号(如果提供) + +--- + +如果这里没有解答您的问题,请: +1. 查看完整文档 +2. 在 GitHub Issues 中搜索 +3. 创建新 Issue 提问 + +我们致力于及时回答所有问题! diff --git a/docs/getting-started.md b/docs/getting-started.md new file mode 100644 index 0000000..39c6d90 --- /dev/null +++ b/docs/getting-started.md @@ -0,0 +1,90 @@ +# 快速开始 + +本文档将引导您完成环境设置、安装和快速运行项目的三个步骤。 + +## 步骤 1: 环境准备 + +### 系统要求 + +- **操作系统**: Windows 10/11, macOS 10.14+, 或 Linux (Ubuntu 18.04+) +- **Python**: 版本 3.8 或更高 +- **内存**: 至少 4GB RAM +- **磁盘空间**: 至少 2GB 可用空间 + +### 环境检查 + +运行以下命令检查您的环境: + +```bash +python --version +pip --version +``` + +## 步骤 2: 安装 + +### 方法一: 使用 pip 安装 + +```bash +# 克隆项目仓库 +git clone https://github.com/your-username/your-project.git +cd your-project + +# 安装依赖 +pip install -r requirements.txt +``` + +### 方法二: 使用虚拟环境(推荐) + +```bash +# 创建虚拟环境 +python -m venv venv + +# 激活虚拟环境 +# Windows +venv\Scripts\activate +# Linux/macOS +source venv/bin/activate + +# 安装依赖 +pip install -r requirements.txt +``` + +## 步骤 3: 快速运行 + +### 运行示例脚本 + +```bash +python examples/example1.py +``` + +### 运行测试 + +```bash +python -m pytest tests/ +``` + +### 启动开发服务器 + +```bash +python app.py +``` + +## 验证安装 + +运行以下命令验证安装是否成功: + +```bash +python -c "import your_project; print('安装成功!')" +``` + +## 下一步 + +- 查看 [基础教程](./tutorials/tutorial-quick.md) 学习项目基本用法 +- 探索 [高级教程](./tutorials/tutorial-advanced.md) 了解高级功能 +- 参考 [API 文档](./api/index.md) 查看完整接口说明 + +## 遇到问题? + +- 查看 [FAQ](./faq.md) 常见问题解答 +- 查看 [问题排查指南](./troubleshooting.md)(如果存在) +- 在 GitHub 上 [提交问题](https://github.com/your-username/your-project/issues) diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..87f00e5 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,28 @@ +# 首页 / 快速开始 + +欢迎使用本项目文档!本页面为您提供快速入门的指南。 + +## 功能特性 + +- **快速启动**:只需三步即可运行项目 +- **详细教程**:从基础到高级的完整教程 +- **丰富示例**:包含实际用例和示例代码 +- **完整 API 文档**:自动生成的 API 参考 + +## 快速开始 + +1. 安装依赖:`pip install -r requirements.txt` +2. 配置环境:`cp .env.example .env` +3. 运行示例:`python examples/example1.py` + +## 下一步 + +- 查看 [快速开始指南](./getting-started.md) 获取详细安装说明 +- 浏览 [教程](./tutorials/tutorial-quick.md) 学习基本用法 +- 探索 [示例](./examples/example1.md) 了解实际应用 + +## 获取帮助 + +- 查看 [FAQ](./faq.md) 常见问题解答 +- 阅读 [贡献指南](./contributing.md) 参与项目开发 +- 查看 [更新日志](./changelog.md) 了解版本变化 diff --git a/docs/license.md b/docs/license.md new file mode 100644 index 0000000..2cf680c --- /dev/null +++ b/docs/license.md @@ -0,0 +1,225 @@ +# 许可证 + +本文档详细说明项目的许可证信息。 + +## 概述 + +本项目采用 **MIT 许可证**。这是一个宽松的开源许可证,允许用户在遵守许可证条款的前提下自由使用、复制、修改、合并、发布、分发、再许可和销售本软件的副本。 + +## 完整许可证文本 + +``` +MIT 许可证 + +版权所有 (c) 2024 [版权所有者姓名] + +特此免费授予任何获得本软件及相关文档文件(以下简称"软件")副本的人士, +允许不受限制地处理本软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件的副本, +并允许向其提供本软件的人士这样做,但须符合以下条件: + +上述版权声明和本许可声明应包含在本软件的所有副本或重要部分中。 + +本软件按"原样"提供,不提供任何形式的明示或暗示保证,包括但不限于适销性、 +特定用途适用性和非侵权性保证。在任何情况下,作者或版权持有人均不对 +因本软件或本软件的使用或其他交易而产生的任何索赔、损害赔偿或其他责任 +承担责任,无论是在合同诉讼、侵权诉讼还是其他诉讼中。 +``` + +## 许可证解释 + +### 您可以自由地: + +1. **商业使用** - 在商业产品中使用本软件 +2. **修改和衍生作品** - 修改源代码并创建衍生作品 +3. **分发** - 分发原始或修改后的软件副本 +4. **私人使用** - 在任何私人项目中使用 +5. **专利使用** - 使用相关专利(如果存在) + +### 您必须: + +1. **保留版权声明** - 在所有副本或重要部分中包含原始版权声明和许可证 +2. **免责声明** - 在分发时包含完整的免责声明 + +### 您不可以: + +1. **追究责任** - 追究作者因使用本软件而产生的任何损害责任 +2. **去除许可证** - 在分发时去除或修改许可证文本 + +## 第三方许可证 + +### 包含的第三方组件 + +本项目中可能包含以下第三方组件,它们有自己的许可证: + +#### 1. Python 依赖项 +``` +# 通过 pip 安装的依赖项 +# 每个依赖项都有自己的许可证,通常是开源许可证 +# 运行以下命令查看依赖项的许可证信息: +# pip-licenses +``` + +#### 2. Simulink 相关组件 +- **MATLAB/Simulink**: MathWorks 专有软件,需要有效许可证 +- **Simulink Coder**: MathWorks 专有软件,需要有效许可证 + +#### 3. 其他资源 +- **图标和图像**: 可能使用 Creative Commons 或其他开源许可证 +- **字体**: 可能使用 SIL Open Font License 或其他字体许可证 + +### 许可证兼容性 + +所有第三方组件的许可证都与 MIT 许可证兼容。主要的兼容性考虑包括: + +1. **GPL 兼容性**: MIT 许可证与 GPL 兼容 +2. **商业兼容性**: MIT 许可证允许商业使用 +3. **专利考虑**: MIT 许可证不包含明确的专利授权 + +## 如何使用许可证 + +### 在您的项目中 + +如果您在自己的项目中使用本软件: + +1. **作为库使用** - 只需在您的文档中注明使用了本软件 +2. **修改后分发** - 必须包含原始版权声明和 MIT 许可证 +3. **作为 SaaS 服务** - 无需分发源代码,但建议注明使用了本软件 + +### 版权声明示例 + +在您的项目中,可以这样注明: + +``` +本软件使用了 [项目名称],该软件基于 MIT 许可证。 +版权所有 (c) 2024 [版权所有者姓名] +``` + +### 源代码文件头 + +建议在每个源代码文件的开头包含简短的许可证声明: + +```python +# 版权所有 (c) 2024 [版权所有者姓名] +# MIT 许可证 +# 更多信息请参见 LICENSE 文件 +``` + +## 常见问题 + +### 关于 MIT 许可证 + +#### 1. 我需要在产品中公开源代码吗? +**不需要**。MIT 许可证不要求您公开源代码。您可以保持修改后的代码私有。 + +#### 2. 我可以在闭源商业产品中使用吗? +**可以**。MIT 许可证明确允许商业使用,且不要求开源衍生作品。 + +#### 3. 我需要付费吗? +**不需要**。MIT 许可证是免费的开源许可证,不需要支付许可费。 + +#### 4. 我可以重新许可吗? +**不可以**。您不能更改原始软件的许可证,但可以在分发时添加额外的条款(但不能限制 MIT 许可证授予的权利)。 + +#### 5. 专利保护呢? +MIT 许可证没有明确的专利授权条款。如果软件中包含专利,许可证隐含地授予使用这些专利的权利。 + +### 关于贡献 + +#### 1. 我的贡献使用什么许可证? +所有对本项目的贡献都将采用相同的 MIT 许可证。通过提交贡献,您同意您的贡献将在 MIT 许可证下发布。 + +#### 2. 我需要签署 CLA 吗? +目前不需要贡献者许可协议(CLA)。但通过提交贡献,您默认同意在 MIT 许可证下发布您的贡献。 + +#### 3. 我可以撤销贡献的许可证吗? +不可以。一旦贡献被接受并合并到项目中,就不能撤销 MIT 许可证。 + +### 关于分发 + +#### 1. 如何正确分发本软件? +分发时必须包含: +- 完整的源代码或可执行文件 +- 版权声明副本 +- MIT 许可证文本副本 + +#### 2. 可以在应用商店分发吗? +可以,但可能需要遵守应用商店的附加条款。 + +#### 3. 需要提供技术支持吗? +不需要。许可证明确声明软件按"原样"提供,不提供任何保证。 + +## 法律声明 + +### 免责声明 + +本软件按"原样"提供,不提供任何形式的保证。作者不对因使用本软件而产生的任何损害承担责任,包括但不限于直接损害、间接损害、附带损害、特殊损害或后果性损害。 + +### 责任限制 + +在任何情况下,作者或版权持有人均不对因本软件或本软件的使用或其他交易而产生的任何索赔、损害赔偿或其他责任承担责任,无论是在合同诉讼、侵权诉讼还是其他诉讼中。 + +### 管辖法律 + +除非另有约定,本许可证受[您的国家/地区]法律管辖。任何与本许可证相关的争议应提交至[您的城市]有管辖权的法院解决。 + +## 其他许可证选项 + +### 替代许可证 + +如果 MIT 许可证不满足您的需求,可以考虑以下替代方案: + +1. **Apache 2.0** - 包含明确的专利授权 +2. **GPL 系列** - 要求衍生作品开源 +3. **BSD 许可证** - 类似 MIT,但有时包含广告条款 +4. **LGPL** - 适合库文件,允许与专有软件链接 + +### 双重许可 + +本项目目前仅提供 MIT 许可证。如果需要其他许可证(如商业许可证),请联系项目维护者。 + +## 获取帮助 + +### 许可证问题 + +如果您对许可证有任何疑问: + +1. **查看完整文本** - 阅读项目根目录中的 `LICENSE` 文件 +2. **咨询律师** - 对于法律问题,建议咨询专业律师 +3. **联系维护者** - 发送邮件至 [license@example.com] + +### 商业许可 + +如果需要商业许可或定制许可证: + +- **企业支持** - 提供商业支持、保证和定制开发 +- **白标许可** - 允许在您的品牌下重新分发 +- **专利保护** - 提供额外的专利保护条款 + +请联系 [commercial@example.com] 获取更多信息。 + +## 致谢 + +感谢以下资源提供的许可证指导: + +- [Open Source Initiative](https://opensource.org/) - 开源许可证标准 +- [Choose a License](https://choosealicense.com/) - 帮助选择许可证 +- [Software Freedom Law Center](https://www.softwarefreedom.org/) - 开源法律资源 + +## 更新历史 + +### 许可证变更 + +| 日期 | 变更 | 说明 | +|------|------|------| +| 2024-01-01 | 初始版本 | 采用 MIT 许可证 | +| 2024-06-01 | 添加解释文档 | 创建本文档,详细解释许可证 | + +### 重要通知 + +本许可证文档仅供参考,不构成法律建议。对于具体的法律问题,请咨询合格的法律专业人士。 + +--- + +*最后更新: 2024-06-01* +*版本: 1.0.0* +*文档 ID: LICENSE-v1* diff --git a/docs/models/MODEL_A.md b/docs/models/MODEL_A.md new file mode 100644 index 0000000..2bcd889 --- /dev/null +++ b/docs/models/MODEL_A.md @@ -0,0 +1,373 @@ +# MODEL_A 文档 (Simulink 模型) + +本文档描述 MODEL_A Simulink 模型的设计、功能和使用方法。 + +## 模型概述 + +### 基本信息 +- **模型名称**: MODEL_A +- **版本**: 1.0.0 +- **创建日期**: 2024-01-01 +- **最后修改**: 2024-06-01 +- **作者**: 项目团队 +- **依赖**: Simulink R2022a 或更高版本 + +### 功能描述 +MODEL_A 是一个用于 [此处描述模型主要功能,例如:控制系统仿真、信号处理、电力系统分析等] 的 Simulink 模型。 + +### 应用场景 +- 场景 1: [具体应用场景 1] +- 场景 2: [具体应用场景 2] +- 场景 3: [具体应用场景 3] + +## 模型结构 + +### 顶层结构图 +``` +┌─────────────────────────────────────────────────────┐ +│ MODEL_A (顶层) │ +├─────────────────────────────────────────────────────┤ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ +│ │ 输入模块 │ │ 处理模块 │ │ 输出模块 │ │ +│ └──────────┘ └──────────┘ └──────────┘ │ +│ │ │ │ │ +│ └─────┬───────┴───────┬─────┘ │ +│ │ │ │ +│ ┌─────▼─────┐ ┌─────▼─────┐ │ +│ │ 控制逻辑 │ │ 监控模块 │ │ +│ └───────────┘ └───────────┘ │ +└─────────────────────────────────────────────────────┘ +``` + +### 子系统说明 + +#### 1. 输入模块 (Input_Subsystem) +**功能**: 负责接收和处理输入信号 + +**参数**: +- `SampleTime`: 采样时间 (默认: 0.01s) +- `InputRange`: 输入范围 (默认: [-10, 10]) +- `NoiseLevel`: 噪声水平 (默认: 0.01) + +**接口**: +``` +输入端口: + 1. In1: 主输入信号 + 2. In2: 参考信号 + 3. In3: 配置参数 + +输出端口: + 1. Out1: 处理后的输入信号 + 2. Out2: 输入状态标志 +``` + +#### 2. 处理模块 (Processing_Subsystem) +**功能**: 执行核心算法和处理逻辑 + +**包含组件**: +- **控制器**: PID 控制器模块 +- **滤波器**: 低通滤波器 (截止频率: 10Hz) +- **转换器**: 信号转换和缩放 + +**算法描述**: +```matlab +% 核心处理算法 +function output = processAlgorithm(input, params) + % 步骤 1: 信号预处理 + processed = preprocess(input, params.preprocess); + + % 步骤 2: 核心计算 + result = coreCalculation(processed, params.core); + + % 步骤 3: 后处理 + output = postprocess(result, params.postprocess); +end +``` + +#### 3. 输出模块 (Output_Subsystem) +**功能**: 生成输出信号和状态信息 + +**输出类型**: +1. **连续输出**: 主要控制信号 +2. **离散输出**: 状态标志和事件 +3. **监控输出**: 性能指标和诊断信息 + +#### 4. 控制逻辑 (Control_Logic) +**功能**: 实现状态机和模式切换 + +**状态定义**: +```matlab +states = { + 'INIT', % 初始化状态 + 'STANDBY', % 待机状态 + 'RUNNING', % 运行状态 + 'FAULT', % 故障状态 + 'SHUTDOWN' % 关机状态 +}; +``` + +#### 5. 监控模块 (Monitoring_Subsystem) +**功能**: 实时监控和诊断 + +**监控指标**: +- 系统稳定性指标 +- 性能指标 (响应时间、超调量等) +- 故障检测和诊断 + +## 参数配置 + +### 主要参数表 + +| 参数名 | 描述 | 默认值 | 单位 | 范围 | +|--------|------|--------|------|------| +| `Kp` | 比例增益 | 1.0 | - | [0.1, 10] | +| `Ki` | 积分增益 | 0.1 | - | [0, 5] | +| `Kd` | 微分增益 | 0.01 | - | [0, 2] | +| `Ts` | 采样时间 | 0.01 | s | [0.001, 1] | +| `Fc` | 截止频率 | 10 | Hz | [1, 100] | +| `MaxOutput` | 最大输出 | 100 | % | [0, 100] | +| `MinOutput` | 最小输出 | 0 | % | [0, 100] | + +### 配置示例 +```matlab +% MATLAB 配置脚本 +model_params = struct(); +model_params.controller.Kp = 1.5; +model_params.controller.Ki = 0.2; +model_params.controller.Kd = 0.05; +model_params.sampling.Ts = 0.005; +model_params.filter.Fc = 15; +model_params.limits.MaxOutput = 90; +model_params.limits.MinOutput = 10; + +% 应用配置到模型 +set_param('MODEL_A/Controller', 'Kp', num2str(model_params.controller.Kp)); +set_param('MODEL_A/Controller', 'Ki', num2str(model_params.controller.Ki)); +% ... 其他参数设置 +``` + +## 使用指南 + +### 1. 打开和加载模型 +```matlab +% 方法 1: 使用 open_system +open_system('MODEL_A.slx'); + +% 方法 2: 使用 load_system 然后打开 +load_system('MODEL_A.slx'); +open_system('MODEL_A'); +``` + +### 2. 运行仿真 +```matlab +% 基本仿真 +simOut = sim('MODEL_A.slx', 'StopTime', '10'); + +% 带参数的仿真 +simOut = sim('MODEL_A.slx', ... + 'StopTime', '20', ... + 'FixedStep', '0.01', ... + 'Solver', 'ode4'); + +% 批量仿真 (参数扫描) +paramValues = 0.1:0.1:1.0; +results = cell(length(paramValues), 1); +for i = 1:length(paramValues) + set_param('MODEL_A/Controller', 'Kp', num2str(paramValues(i))); + simOut = sim('MODEL_A.slx', 'StopTime', '10'); + results{i} = simOut; +end +``` + +### 3. 数据记录和分析 +```matlab +% 配置数据记录 +set_param('MODEL_A', 'SaveOutput', 'on'); +set_param('MODEL_A', 'OutputSaveName', 'yout'); +set_param('MODEL_A', 'SaveTime', 'on'); +set_param('MODEL_A', 'TimeSaveName', 'tout'); + +% 运行仿真 +simOut = sim('MODEL_A.slx'); + +% 提取和分析数据 +time = simOut.tout; +output = simOut.yout; + +% 绘制结果 +figure; +subplot(2,1,1); +plot(time, output(:,1)); +title('输出信号 1'); +xlabel('时间 (s)'); +ylabel('幅值'); + +subplot(2,1,2); +plot(time, output(:,2)); +title('输出信号 2'); +xlabel('时间 (s)'); +ylabel('幅值'); +``` + +## 模型验证 + +### 测试用例 + +#### 测试 1: 阶跃响应测试 +**目的**: 验证系统对阶跃输入的响应特性 + +**测试步骤**: +1. 设置输入为阶跃信号 (幅值: 1, 时间: 1s) +2. 运行仿真 10 秒 +3. 记录和评估响应特性 + +**验收标准**: +- 上升时间 < 2 秒 +- 超调量 < 5% +- 稳态误差 < 1% + +#### 测试 2: 频率响应测试 +**目的**: 验证系统频率特性 + +**测试步骤**: +1. 使用正弦扫频输入 (频率: 0.1-10Hz) +2. 记录输出幅值和相位 +3. 绘制 Bode 图 + +**验收标准**: +- 带宽 > 5Hz +- 相位裕度 > 45° + +#### 测试 3: 鲁棒性测试 +**目的**: 验证系统对参数变化的鲁棒性 + +**测试步骤**: +1. 在参数范围内随机变化关键参数 +2. 运行蒙特卡洛仿真 +3. 统计性能指标 + +**验收标准**: +- 95% 的仿真满足性能要求 + +## 性能指标 + +### 静态性能 +- **稳态误差**: < 1% +- **线性度**: > 99% +- **重复性**: > 99.5% + +### 动态性能 +- **上升时间**: 1.5 ± 0.3 秒 +- **调节时间**: 3.0 ± 0.5 秒 +- **超调量**: < 5% + +### 计算性能 +- **仿真步长**: 0.01 秒 +- **实时因子**: < 0.1 (远快于实时) +- **内存使用**: < 100 MB + +## 故障排除 + +### 常见问题 + +#### 问题 1: 仿真发散 +**症状**: 输出值无限增大或变为 NaN + +**可能原因**: +1. 控制器参数不合适 (特别是积分项过大) +2. 代数环问题 +3. 采样时间设置不当 + +**解决方案**: +1. 检查并调整控制器参数 +2. 使用 `Algebraic Loop Solver` +3. 减小采样时间或使用变步长求解器 + +#### 问题 2: 仿真速度慢 +**症状**: 仿真运行时间过长 + +**可能原因**: +1. 过小的固定步长 +2. 复杂的模型结构 +3. 过多的数据记录 + +**解决方案**: +1. 适当增大固定步长或使用变步长求解器 +2. 简化模型结构,使用封装子系统 +3. 减少数据记录点或使用触发记录 + +#### 问题 3: 模型编译错误 +**症状**: 编译时出现错误 + +**可能原因**: +1. 模块参数设置错误 +2. 数据类型不匹配 +3. 缺少必需的依赖项 + +**解决方案**: +1. 检查错误信息中提到的模块和参数 +2. 使用 `Model Advisor` 检查模型 +3. 确保所有依赖的库和工具箱已安装 + +### 调试技巧 +1. **使用信号记录**: 在关键点添加信号记录 +2. **断点调试**: 使用 Simulink 调试器设置断点 +3. **模型覆盖度**: 使用 `Simulink Coverage` 分析测试覆盖度 +4. **性能分析**: 使用 `Simulink Profiler` 分析仿真性能 + +## 代码生成 + +### 生成 C 代码 +```matlab +% 配置代码生成 +rtwconfig = get_param('MODEL_A', 'RTWGenSettings'); +rtwconfig.TargetLang = 'C'; +rtwconfig.GenCodeOnly = 'off'; +rtwconfig.GenerateReport = 'on'; + +% 生成代码 +slbuild('MODEL_A'); + +% 查看生成报告 +rtwview('MODEL_A'); +``` + +### 生成的代码结构 +``` +MODEL_A_ert_rtw/ +├── MODEL_A.c # 主模型代码 +├── MODEL_A.h # 模型头文件 +├── MODEL_A_private.h # 私有头文件 +├── MODEL_A_types.h # 类型定义 +├── rtmodel.h # 实时模型头文件 +└── html/ # 代码生成报告 +``` + +### 集成到目标系统 +1. **手动集成**: 将生成的代码文件添加到目标项目 +2. **自动集成**: 使用 Simulink Coder 支持包 +3. **验证**: 使用 PIL (Processor-in-the-Loop) 测试 + +## 版本历史 + +### v1.0.0 (2024-06-01) +- 初始发布版本 +- 包含基本控制功能 +- 支持代码生成 + +### v0.9.0 (2024-05-15) +- Beta 测试版本 +- 添加监控和诊断功能 +- 改进参数配置接口 + +### v0.8.0 (2024-04-30) +- Alpha 测试版本 +- 基本模型结构完成 +- 初步验证通过 + +## 相关文档 + +- [MODEL_B 文档](./MODEL_B.md) - 相关模型文档 +- [Simulink 基础教程](../tutorials/tutorial-quick.md) - Simulink 使用教程 +- [示例数据](../examples/example-data/) - 示例模型和脚本 +- [API 文档](../api/index.md) - 项目 API 参考 diff --git a/docs/models/MODEL_B.md b/docs/models/MODEL_B.md new file mode 100644 index 0000000..5ecd15b --- /dev/null +++ b/docs/models/MODEL_B.md @@ -0,0 +1,624 @@ +# MODEL_B 文档 (Simulink 模型) + +本文档描述 MODEL_B Simulink 模型的设计、功能和使用方法。 + +## 模型概述 + +### 基本信息 +- **模型名称**: MODEL_B +- **版本**: 1.0.0 +- **创建日期**: 2024-02-01 +- **最后修改**: 2024-06-15 +- **作者**: 项目团队 +- **依赖**: Simulink R2022a 或更高版本,Control System Toolbox + +### 功能描述 +MODEL_B 是一个高级控制系统模型,专为 [此处描述模型主要功能,例如:多变量控制、自适应控制、模型预测控制等] 设计。该模型扩展了 MODEL_A 的功能,增加了高级控制算法和更复杂的系统动力学。 + +### 主要特性 +- **多变量控制**: 支持多输入多输出(MIMO)系统 +- **自适应机制**: 可根据系统变化自动调整参数 +- **故障容错**: 内置故障检测和恢复机制 +- **优化控制**: 集成优化算法以实现最优性能 + +### 应用场景 +- 场景 1: 工业过程控制(如化工、制药) +- 场景 2: 机器人运动控制 +- 场景 3: 能源管理系统 +- 场景 4: 自动驾驶系统 + +## 模型结构 + +### 顶层结构图 +``` +┌─────────────────────────────────────────────────────────┐ +│ MODEL_B (顶层) │ +├─────────────────────────────────────────────────────────┤ +│ ┌──────────┐ ┌────────────┐ ┌──────────┐ │ +│ │ 多路输入 │ │ 高级处理器 │ │ 多路输出 │ │ +│ └──────────┘ └────────────┘ └──────────┘ │ +│ │ │ │ │ +│ └────────┬───────┴───────┬────────┘ │ +│ │ │ │ +│ ┌──────▼─────┐ ┌───────▼──────┐ │ +│ │ 自适应控制器 │ │ 优化引擎 │ │ +│ └────────────┘ └──────────────┘ │ +│ │ │ │ +│ ┌──────▼─────┐ ┌───────▼──────┐ │ +│ │ 状态估计器 │ │ 故障诊断模块 │ │ +│ └────────────┘ └──────────────┘ │ +└─────────────────────────────────────────────────────────┘ +``` + +### 子系统说明 + +#### 1. 多路输入模块 (MultiInput_Subsystem) +**功能**: 处理多个输入信号并进行同步 + +**输入通道**: +- **主输入通道** (4个): 主要控制信号 +- **辅助输入通道** (2个): 参考和干扰信号 +- **配置输入通道** (1个): 实时参数调整 + +**特性**: +- 信号同步和时钟对齐 +- 输入范围自动缩放 +- 通道间交叉干扰抑制 + +#### 2. 高级处理器 (AdvancedProcessor_Subsystem) +**功能**: 执行复杂算法和数据处理 + +**包含组件**: +- **状态空间控制器**: 基于状态空间模型的控制 +- **卡尔曼滤波器**: 状态估计和噪声过滤 +- **模型预测控制器**: 有限时域优化控制 +- **自适应律**: 在线参数调整 + +**算法描述**: +```matlab +% 高级处理算法 +function [control, state] = advancedAlgorithm(inputs, states, params) + % 步骤 1: 状态估计 + estimated_states = kalmanFilter(states, inputs, params.kalman); + + % 步骤 2: 模型预测控制 + if params.use_mpc + control = modelPredictiveControl(estimated_states, inputs, params.mpc); + else + % 步骤 3: 自适应控制 + control = adaptiveControl(estimated_states, inputs, params.adaptive); + end + + % 步骤 4: 优化调整 + if params.optimization.enabled + control = optimizeControl(control, estimated_states, params.optimization); + end +end +``` + +#### 3. 多路输出模块 (MultiOutput_Subsystem) +**功能**: 生成多通道输出和状态信息 + +**输出类型**: +1. **控制输出** (4通道): 主要控制信号 +2. **状态输出** (6通道): 系统状态信息 +3. **诊断输出** (2通道): 故障和性能指标 +4. **监控输出** (3通道): 实时监控数据 + +#### 4. 自适应控制器 (AdaptiveController) +**功能**: 实现自适应控制算法 + +**自适应机制**: +- **模型参考自适应控制**: 跟踪参考模型行为 +- **自校正调节器**: 在线参数估计和调整 +- **增益调度**: 基于工作点的参数调整 + +**参数更新律**: +```matlab +function params = updateParameters(params, error, gradient) + % 基于梯度的参数更新 + learning_rate = params.learning_rate; + params.values = params.values - learning_rate * gradient * error; + + % 参数约束处理 + params.values = applyConstraints(params.values, params.bounds); +end +``` + +#### 5. 优化引擎 (OptimizationEngine) +**功能**: 实时优化控制性能 + +**优化目标**: +- 最小化控制误差 +- 最小化控制能量 +- 满足约束条件(状态约束、输入约束) + +**优化算法**: +- **二次规划**: 用于模型预测控制 +- **梯度下降**: 用于在线优化 +- **粒子群优化**: 用于全局优化 + +#### 6. 状态估计器 (StateEstimator) +**功能**: 估计不可测状态变量 + +**估计方法**: +- 扩展卡尔曼滤波器 +- 无迹卡尔曼滤波器 +- 粒子滤波器 + +#### 7. 故障诊断模块 (FaultDiagnosis) +**功能**: 检测和诊断系统故障 + +**检测方法**: +- 残差分析 +- 主成分分析 +- 神经网络分类 + +## 参数配置 + +### 主要参数表 + +| 参数名 | 描述 | 默认值 | 单位 | 范围 | +|--------|------|--------|------|------| +| `Q` | 状态权重矩阵 | eye(6) | - | 正定矩阵 | +| `R` | 控制权重矩阵 | eye(4) | - | 正定矩阵 | +| `N` | 预测时域 | 10 | 步 | [5, 50] | +| `M` | 控制时域 | 5 | 步 | [3, 20] | +| `alpha` | 自适应增益 | 0.1 | - | [0.001, 1] | +| `beta` | 遗忘因子 | 0.99 | - | [0.9, 1] | +| `Ts` | 采样时间 | 0.005 | s | [0.001, 0.1] | +| `tol` | 优化容差 | 1e-6 | - | [1e-9, 1e-3] | + +### 配置示例 +```matlab +% MATLAB 配置脚本 +modelB_params = struct(); + +% 控制器参数 +modelB_params.controller.type = 'mpc'; % 'adaptive' 或 'mpc' +modelB_params.controller.Q = diag([1, 1, 0.5, 0.5, 0.1, 0.1]); +modelB_params.controller.R = diag([0.1, 0.1, 0.2, 0.2]); +modelB_params.controller.N = 15; +modelB_params.controller.M = 8; + +% 自适应参数 +modelB_params.adaptive.alpha = 0.05; +modelB_params.adaptive.beta = 0.995; +modelB_params.adaptive.forgetting_factor = 0.999; + +% 优化参数 +modelB_params.optimization.solver = 'quadprog'; +modelB_params.optimization.max_iter = 100; +modelB_params.optimization.tol = 1e-6; + +% 状态估计参数 +modelB_params.estimation.type = 'ekf'; +modelB_params.estimation.process_noise = 0.01 * eye(6); +modelB_params.estimation.measurement_noise = 0.1 * eye(4); + +% 应用配置 +configureModelB(modelB_params); +``` + +## 使用指南 + +### 1. 模型初始化 +```matlab +% 加载模型 +load_system('MODEL_B.slx'); + +% 初始化参数 +initParams = getDefaultParameters(); +setModelParameters('MODEL_B', initParams); + +% 检查模型状态 +modelStatus = checkModel('MODEL_B'); +if modelStatus.valid + disp('模型初始化成功'); +else + error('模型初始化失败: %s', modelStatus.message); +end +``` + +### 2. 运行仿真 +```matlab +% 基本仿真配置 +simConfig = struct(); +simConfig.StopTime = '30'; +simConfig.Solver = 'ode4'; +simConfig.FixedStep = '0.005'; +simConfig.SaveState = 'on'; +simConfig.StateSaveName = 'xout'; +simConfig.SaveOutput = 'on'; +simConfig.OutputSaveName = 'yout'; + +% 运行仿真 +simOut = sim('MODEL_B.slx', simConfig); + +% 或者使用简化语法 +simOut = sim('MODEL_B.slx', 'StopTime', '30', 'FixedStep', '0.005'); +``` + +### 3. 高级仿真场景 +```matlab +% 场景 1: 参数扫描 +param_values = linspace(0.1, 2.0, 20); +results = struct(); + +for i = 1:length(param_values) + % 更新参数 + set_param('MODEL_B/AdaptiveController', 'alpha', num2str(param_values(i))); + + % 运行仿真 + simOut = sim('MODEL_B.slx', 'StopTime', '20'); + + % 保存结果 + results(i).param_value = param_values(i); + results(i).performance = calculatePerformance(simOut); + results(i).data = simOut; +end + +% 分析结果 +analyzeParameterSweep(results); + +% 场景 2: 蒙特卡洛仿真 +num_runs = 100; +monte_carlo_results = cell(num_runs, 1); + +for run = 1:num_runs + % 随机扰动参数 + perturbed_params = perturbParameters(getDefaultParameters()); + setModelParameters('MODEL_B', perturbed_params); + + % 运行仿真 + simOut = sim('MODEL_B.slx', 'StopTime', '15'); + + % 记录结果 + monte_carlo_results{run} = simOut; +end + +% 统计性能 +performance_stats = analyzeMonteCarlo(monte_carlo_results); +``` + +### 4. 数据分析和可视化 +```matlab +% 提取仿真数据 +time = simOut.tout; +outputs = simOut.yout; +states = simOut.xout; + +% 创建综合可视化 +figure('Position', [100, 100, 1200, 800]); + +% 子图 1: 输出响应 +subplot(3, 2, 1); +plot(time, outputs(:, 1:2)); +title('控制输出响应'); +xlabel('时间 (s)'); +ylabel('幅值'); +legend('输出 1', '输出 2'); +grid on; + +% 子图 2: 状态变量 +subplot(3, 2, 2); +plot(time, states(:, 1:3)); +title('系统状态'); +xlabel('时间 (s)'); +ylabel('状态值'); +legend('状态 1', '状态 2', '状态 3'); +grid on; + +% 子图 3: 控制误差 +subplot(3, 2, 3); +error = calculateError(outputs); +plot(time, error); +title('控制误差'); +xlabel('时间 (s)'); +ylabel('误差'); +grid on; + +% 子图 4: 参数自适应 +subplot(3, 2, 4); +if isfield(simOut.logsout, 'parameters') + params = simOut.logsout.parameters.Values.Data; + plot(time, squeeze(params(:,1,:))); + title('自适应参数变化'); + xlabel('时间 (s)'); + ylabel('参数值'); + grid on; +end + +% 子图 5: 性能指标 +subplot(3, 2, 5); +metrics = calculatePerformanceMetrics(simOut); +bar(metrics.values); +title('性能指标'); +xlabel('指标'); +ylabel('值'); +set(gca, 'XTickLabel', metrics.names); +grid on; + +% 子图 6: 频率响应 +subplot(3, 2, 6); +[mag, phase, freq] = calculateFrequencyResponse(simOut); +semilogx(freq, 20*log10(mag)); +title('频率响应'); +xlabel('频率 (Hz)'); +ylabel('幅值 (dB)'); +grid on; + +% 保存图形 +saveas(gcf, 'MODEL_B_analysis.png'); +``` + +## 模型验证 + +### 验证测试套件 + +#### 测试 1: 稳定性测试 +**目的**: 验证闭环系统稳定性 + +**测试方法**: +1. 在不同工作点初始化系统 +2. 施加阶跃和脉冲扰动 +3. 分析系统响应 + +**验收标准**: +- 所有工作点均稳定 +- 超调量 < 10% +- 调节时间符合规格要求 + +#### 测试 2: 鲁棒性测试 +**目的**: 验证系统对参数不确定性的鲁棒性 + +**测试方法**: +1. 在参数空间随机采样 +2. 运行蒙特卡洛仿真 +3. 统计性能指标 + +**验收标准**: +- 90% 的仿真满足性能要求 +- 最坏情况性能下降不超过 20% + +#### 测试 3: 故障容错测试 +**目的**: 验证故障检测和恢复能力 + +**测试方法**: +1. 注入不同类型的故障 +2. 观察故障检测时间 +3. 评估系统恢复性能 + +**验收标准**: +- 故障检测时间 < 0.5 秒 +- 性能下降在可接受范围内 +- 系统不进入不稳定状态 + +#### 测试 4: 实时性测试 +**目的**: 验证模型实时执行能力 + +**测试方法**: +1. 测量单步计算时间 +2. 验证满足实时约束 +3. 测试代码生成性能 + +**验收标准**: +- 单步计算时间 < 采样时间 +- 代码生成满足目标平台要求 + +## 性能指标 + +### 控制性能 +- **稳态误差**: < 0.5% (各通道) +- **跟踪误差**: < 1% (正弦跟踪) +- **干扰抑制**: > 40 dB (在 1Hz) +- **命令响应**: 上升时间 < 0.1 秒 + +### 计算性能 +- **最大采样频率**: 200 Hz (基于标准硬件) +- **内存使用**: < 200 MB +- **代码效率**: 生成代码 < 50 KB (ROM) +- **实时性能**: 单步计算 < 2 ms (在 500 MHz 处理器) + +### 鲁棒性指标 +- **增益裕度**: > 6 dB +- **相位裕度**: > 45° +- **稳定时间**: < 2 秒 (对于 10% 阶跃) +- **参数变化容忍度**: ±30% + +## 故障排除 + +### 常见问题 + +#### 问题 1: 优化求解失败 +**症状**: 优化求解器返回错误或无法找到可行解 + +**可能原因**: +1. 约束条件冲突 +2. 优化问题非凸 +3. 数值问题(条件数过大) + +**解决方案**: +1. 检查并调整约束条件 +2. 使用不同的优化算法 +3. 添加正则化项改善数值条件 + +#### 问题 2: 自适应参数发散 +**症状**: 自适应参数无限增大或振荡 + +**可能原因**: +1. 自适应增益过大 +2. 持续激励不足 +3. 数值积分问题 + +**解决方案**: +1. 减小自适应增益 +2. 添加持续激励信号 +3. 使用泄漏积分或参数投影 + +#### 问题 3: 状态估计偏差 +**症状**: 估计状态与实际状态存在较大偏差 + +**可能原因**: +1. 过程或测量噪声协方差设置不当 +2. 模型失配 +3. 滤波器初始化错误 + +**解决方案**: +1. 调整噪声协方差矩阵 +2. 改进系统模型 +3. 改进滤波器初始化 + +#### 问题 4: 实时性能不足 +**症状**: 单步计算时间超过采样时间 + +**可能原因**: +1. 模型过于复杂 +2. 优化问题规模过大 +3. 算法实现效率低 + +**解决方案**: +1. 简化模型或降低模型阶次 +2. 减小预测时域或控制时域 +3. 使用更高效的算法实现 + +### 调试工具 + +#### 内置调试功能 +```matlab +% 启用详细日志 +set_param('MODEL_B', 'Debug', 'on'); + +% 设置调试断点 +set_param('MODEL_B/AdaptiveController', 'Breakpoints', 'on'); + +% 查看内部信号 +addSignalLogging('MODEL_B', {'AdaptiveController/parameters', ... + 'OptimizationEngine/cost'}); + +% 性能分析 +Simulink.profiler.start; +sim('MODEL_B.slx'); +Simulink.profiler.stop; +Simulink.profiler.report; +``` + +#### 自定义监控 +```matlab +% 创建自定义监控脚本 +function monitorModelB(simOut) + % 提取关键数据 + time = simOut.tout; + outputs = simOut.yout; + + % 实时监控指标 + metrics = struct(); + metrics.rise_time = calculateRiseTime(outputs); + metrics.settling_time = calculateSettlingTime(outputs); + metrics.overshoot = calculateOvershoot(outputs); + metrics.rmse = calculateRMSE(outputs); + + % 显示监控结果 + fprintf('性能指标:\n'); + fprintf(' 上升时间: %.3f s\n', metrics.rise_time); + fprintf(' 调节时间: %.3f s\n', metrics.settling_time); + fprintf(' 超调量: %.2f%%\n', metrics.overshoot*100); + fprintf(' RMSE: %.4f\n', metrics.rmse); + + % 检查性能阈值 + checkPerformanceThresholds(metrics); +end +``` + +## 代码生成 + +### 生成配置 +```matlab +% 配置代码生成选项 +cfg = coder.config('lib'); +cfg.TargetLang = 'C'; +cfg.GenerateReport = true; +cfg.ReportPotentialDifferences = false; +cfg.HardwareImplementation.ProdHWDeviceType = 'Intel->x86-64 (Linux 64)'; + +% 配置模型参数 +set_param('MODEL_B', 'SystemTargetFile', 'ert.tlc'); +set_param('MODEL_B', 'TargetLang', 'C'); +set_param('MODEL_B', 'GenerateSampleERTMain', 'on'); +set_param('MODEL_B', 'ERTCustomFileTemplate', 'ert_code_template.cgt'); + +% 生成代码 +rtwbuild('MODEL_B'); +``` + +### 生成代码结构 +``` +MODEL_B_ert_rtw/ +├── MODEL_B.c # 主模型代码 +├── MODEL_B.h # 模型头文件 +├── MODEL_B_private.h # 私有头文件 +├── MODEL_B_types.h # 类型定义 +├── rtmodel.h # 实时模型头文件 +├── MODEL_B_data.c # 模型数据 +├── MODEL_B_utils.c # 工具函数 +├── ert_main.c # 示例主程序 +└── html/ # 详细生成报告 + ├── index.html + ├── files.html + └── ... +``` + +### 目标集成 + +#### 集成步骤 +1. **文件复制**: 将生成的代码文件复制到目标项目 +2. **接口适配**: 实现目标特定的 I/O 接口 +3. **调度集成**: 集成到目标系统的任务调度器 +4. **测试验证**: 使用 PIL 或 HIL 测试 + +#### 接口函数 +```c +/* 模型接口函数 */ +void MODEL_B_initialize(void); // 初始化模型 +void MODEL_B_step(void); // 执行一步计算 +void MODEL_B_terminate(void); // 终止模型 + +/* 数据接口函数 */ +void MODEL_B_set_input(real_T *inputs); // 设置输入 +void MODEL_B_get_output(real_T *outputs); // 获取输出 +void MODEL_B_get_state(real_T *states); // 获取状态 +``` + +## 版本历史 + +### v1.0.0 (2024-06-15) +- 正式发布版本 +- 包含所有高级控制功能 +- 通过完整验证测试套件 +- 支持代码生成和实时部署 + +### v0.9.5 (2024-05-30) +- 改进优化算法效率 +- 增强故障诊断能力 +- 添加更多验证测试 +- 完善文档和示例 + +### v0.9.0 (2024-05-15) +- Beta 测试版本 +- 实现主要控制算法 +- 基本验证通过 +- 初步代码生成支持 + +### v0.8.0 (2024-04-30) +- Alpha 测试版本 +- 完成模型框架 +- 实现核心算法 +- 初步功能测试 + +## 相关文档 + +- [MODEL_A 文档](./MODEL_A.md) - 基础模型文档 +- [系统架构](../architecture.md) - 整体系统设计 +- [高级教程](../tutorials/tutorial-advanced.md) - 高级使用指南 +- [API 文档](../api/index.md) - 项目 API 参考 +- [示例数据](../examples/example-data/) - 示例模型和脚本 diff --git a/docs/tutorials/tutorial-advanced.md b/docs/tutorials/tutorial-advanced.md new file mode 100644 index 0000000..92131b8 --- /dev/null +++ b/docs/tutorials/tutorial-advanced.md @@ -0,0 +1,307 @@ +# 高级教程 + +本教程深入探讨项目的高级功能和复杂应用场景。 + +## 概述 + +本教程适合已经掌握基础用法的用户,将介绍: +- 高级配置和自定义 +- 性能优化技巧 +- 扩展开发指南 +- 集成第三方服务 + +## 高级配置 + +### 自定义插件系统 + +```python +from your_project.plugin import PluginManager, BasePlugin + +# 创建自定义插件 +class CustomPlugin(BasePlugin): + def __init__(self, config): + super().__init__(config) + self.name = "CustomPlugin" + + def execute(self, context): + # 自定义逻辑 + result = self._process_context(context) + return result + + def _process_context(self, context): + # 处理上下文 + return {"processed": True, "data": context} + +# 注册插件 +manager = PluginManager() +manager.register_plugin(CustomPlugin) +manager.load_plugins() + +# 使用插件 +results = manager.execute_all({"test": "data"}) +``` + +### 配置多环境部署 + +创建环境特定的配置文件: + +```yaml +# config.production.yaml +database: + host: "prod-db.example.com" + port: 5432 + ssl: true + +cache: + redis: + host: "redis.example.com" + port: 6379 + +# config.development.yaml +database: + host: "localhost" + port: 5432 + ssl: false + +cache: + redis: + host: "localhost" + port: 6379 +``` + +使用环境配置: + +```bash +export APP_ENV=production +python app.py +``` + +## 性能优化 + +### 缓存策略 + +```python +from your_project.cache import LRUCache, RedisCache + +# 使用LRU缓存 +cache = LRUCache(maxsize=1000) + +@cache.memoize(ttl=300) # 缓存5分钟 +def expensive_operation(x, y): + # 耗时计算 + time.sleep(2) + return x * y + +# 使用Redis分布式缓存 +redis_cache = RedisCache( + host="localhost", + port=6379, + db=0, + ttl=3600 # 1小时过期 +) +``` + +### 异步处理 + +```python +import asyncio +from your_project.async_processor import AsyncProcessor + +async def process_batch(items): + processor = AsyncProcessor() + + # 并发处理 + tasks = [processor.process(item) for item in items] + results = await asyncio.gather(*tasks, return_exceptions=True) + + # 处理结果 + successful = [r for r in results if not isinstance(r, Exception)] + failed = [r for r in results if isinstance(r, Exception)] + + return successful, failed + +# 运行异步任务 +async def main(): + items = [1, 2, 3, 4, 5] + successful, failed = await process_batch(items) + print(f"成功: {len(successful)}, 失败: {len(failed)}") + +asyncio.run(main()) +``` + +## 扩展开发 + +### 创建自定义模块 + +1. 创建模块文件 `extensions/my_module.py`: + +```python +from your_project.base import BaseExtension + +class MyExtension(BaseExtension): + """自定义扩展模块""" + + def __init__(self, config): + super().__init__(config) + self.version = "1.0.0" + + def setup(self): + """初始化扩展""" + self.logger.info("设置MyExtension") + + def teardown(self): + """清理扩展""" + self.logger.info("清理MyExtension") + + def custom_method(self, data): + """自定义方法""" + return {"processed": data, "extension": "my_module"} +``` + +2. 注册扩展: + +```python +from your_project.registry import ExtensionRegistry +from extensions.my_module import MyExtension + +registry = ExtensionRegistry() +registry.register("my_extension", MyExtension) +``` + +## 集成第三方服务 + +### 集成消息队列 + +```python +from your_project.integrations import MessageQueue + +# 连接到RabbitMQ +mq = MessageQueue( + host="localhost", + port=5672, + username="guest", + password="guest", + queue="task_queue" +) + +# 发送消息 +mq.publish({"task": "process", "data": "example"}) + +# 消费消息 +def callback(message): + print(f"收到消息: {message}") + # 处理消息 + return True + +mq.consume(callback) +``` + +### 集成监控系统 + +```python +from your_project.monitoring import MetricsCollector + +# 创建指标收集器 +metrics = MetricsCollector( + prometheus_url="http://localhost:9090", + application_name="myapp" +) + +# 记录指标 +@metrics.timer("function_execution_time") +def business_logic(): + # 业务逻辑 + pass + +# 自定义指标 +metrics.gauge("active_users", 150) +metrics.increment("requests_processed") +``` + +## 安全最佳实践 + +### 安全配置 + +```yaml +security: + # 启用HTTPS + ssl: + enabled: true + cert: "/path/to/cert.pem" + key: "/path/to/key.pem" + + # 认证与授权 + auth: + jwt_secret: "your-secret-key" + token_expiry: 3600 + + # 防止常见攻击 + protection: + csrf: true + xss: true + sql_injection: true +``` + +### 安全审计 + +```bash +# 运行安全扫描 +python security_audit.py --scan + +# 检查依赖漏洞 +pip-audit + +# 静态代码安全分析 +bandit -r your_project/ +``` + +## 故障排除与调试 + +### 高级调试技巧 + +```python +import logging +from your_project.debug import Debugger + +# 设置详细日志 +logging.basicConfig(level=logging.DEBUG) + +# 使用交互式调试器 +debugger = Debugger() +debugger.enable_profiling() + +# 性能分析 +with debugger.profile("critical_section"): + # 关键代码段 + perform_critical_operation() + +# 生成性能报告 +debugger.generate_report("performance_report.html") +``` + +### 监控与告警 + +```python +from your_project.alerting import AlertManager + +alert_manager = AlertManager( + slack_webhook="https://hooks.slack.com/services/...", + email_settings={"smtp_server": "smtp.example.com"} +) + +# 设置告警规则 +alert_manager.add_rule( + name="high_error_rate", + condition=lambda metrics: metrics.error_rate > 0.1, + action=alert_manager.send_slack_alert +) + +# 触发告警 +alert_manager.check_and_alert(current_metrics) +``` + +## 下一步 + +- 查看 [架构文档](../architecture.md) 了解系统设计 +- 参考 [API 文档](../api/index.md) 获取接口详情 +- 贡献您的扩展,查看 [贡献指南](../contributing.md) diff --git a/docs/tutorials/tutorial-quick.md b/docs/tutorials/tutorial-quick.md new file mode 100644 index 0000000..a0c59b1 --- /dev/null +++ b/docs/tutorials/tutorial-quick.md @@ -0,0 +1,126 @@ +# 基础教程 + +本教程将引导您快速了解项目的基本用法和核心功能。 + +## 概述 + +本教程适合初学者,将介绍: +- 项目的基本概念 +- 核心功能的使用方法 +- 常见任务的完成步骤 + +## 准备工作 + +在开始之前,请确保您已经: +1. 完成 [环境安装](../getting-started.md) +2. 克隆了项目代码 +3. 安装了所有依赖 + +## 第一步:初始化项目 + +### 配置文件 + +创建或修改配置文件 `config.yaml`: + +```yaml +# 基本配置 +project: + name: "我的项目" + version: "1.0.0" + +# 数据库配置 +database: + host: "localhost" + port: 5432 + name: "mydb" + user: "admin" + +# 日志配置 +logging: + level: "INFO" + file: "logs/app.log" +``` + +### 初始化脚本 + +运行初始化脚本: + +```bash +python scripts/init.py +``` + +## 第二步:使用核心功能 + +### 功能模块 A + +```python +from your_project.module_a import FeatureA + +# 创建实例 +feature = FeatureA(config_path="config.yaml") + +# 执行功能 +result = feature.process(input_data="example") + +# 查看结果 +print(result) +``` + +### 功能模块 B + +```python +from your_project.module_b import FeatureB + +feature_b = FeatureB() +feature_b.analyze(data_file="data.csv") +``` + +## 第三步:运行示例 + +运行提供的示例代码: + +```bash +python examples/basic_usage.py +``` + +## 第四步:验证结果 + +检查输出文件或日志,确保功能正常运行: + +```bash +cat output/result.json +tail -f logs/app.log +``` + +## 常见任务 + +### 任务 1:数据处理 + +```python +from your_project.data_processor import DataProcessor + +processor = DataProcessor() +processed_data = processor.clean_and_transform("raw_data.csv") +processor.save("processed_data.csv") +``` + +### 任务 2:模型训练 + +```python +from your_project.trainer import ModelTrainer + +trainer = ModelTrainer() +model = trainer.train( + training_data="train.csv", + validation_data="val.csv", + epochs=10 +) +trainer.save_model("model.pkl") +``` + +## 下一步 + +完成本教程后,您可以: +- 探索 [高级教程](./tutorial-advanced.md) 了解更复杂的功能 +- 查看 [示例](../examples/example1.md) 学习实际应用 +- 阅读 [API 文档](../api/index.md) 了解详细接口 diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..cd258e9 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,35 @@ +site_name: TestRepo Docs +site_description: "TestRepo — 模型与工具文档" +site_author: autoMBD +repo_name: autoMBD/TestRepo +repo_url: https://github.com/autoMBD/TestRepo +nav: + - Home: index.md + - Quick Start: getting-started.md + - Tutorials: + - Quick Tutorial: tutorials/tutorial-quick.md + - Advanced: tutorials/tutorial-advanced.md + - Examples: examples/example1.md + - Models: + - MODEL_A: models/MODEL_A.md + - API: api/index.md + - Contributing: contributing.md + - Changelog: changelog.md + +theme: + name: material + palette: + primary: 'indigo' + accent: 'indigo' + features: + - navigation.instant + - content.code.copy + +markdown_extensions: + - toc: + permalink: true + - admonition + - pymdownx.superfences + - pymdownx.tabbed +plugins: + - search diff --git a/site/404.html b/site/404.html new file mode 100644 index 0000000..394265e --- /dev/null +++ b/site/404.html @@ -0,0 +1,647 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + +本文档提供项目的完整 API 参考。如果可能,本 API 文档会自动从代码注释生成。
+项目提供以下主要模块的 API:
+如果项目使用自动文档生成工具(如 Sphinx、pydoc、Doxygen),则此部分内容应由工具自动生成。
+pip install sphinx sphinx-rtd-theme
+sphinx-quickstart docs/api/source
+conf.py:import os
+import sys
+sys.path.insert(0, os.path.abspath('../../..'))
+
+extensions = [
+ 'sphinx.ext.autodoc',
+ 'sphinx.ext.napoleon',
+ 'sphinx.ext.viewcode',
+ 'sphinx.ext.githubpages'
+]
+
+html_theme = 'sphinx_rtd_theme'
+cd docs/api
+sphinx-apidoc -o source/ ../../your_project
+make html
+npm install typedoc --save-dev
+npx typedoc --out docs/api --entryPoints src/index.ts
+类定义:
+class Project:
+ """项目主类,提供核心功能"""
+
+ def __init__(self, config_path: str = None, log_level: str = "INFO"):
+ """
+ 初始化项目
+
+ 参数:
+ config_path: 配置文件路径
+ log_level: 日志级别 (DEBUG, INFO, WARNING, ERROR)
+ """
+ pass
+
+ def load_config(self, config_path: str = None) -> dict:
+ """
+ 加载配置文件
+
+ 参数:
+ config_path: 配置文件路径,如果为None则使用初始化时的路径
+
+ 返回:
+ 配置字典
+ """
+ pass
+
+ def run(self, input_data: Any = None) -> dict:
+ """
+ 运行项目
+
+ 参数:
+ input_data: 输入数据
+
+ 返回:
+ 运行结果
+ """
+ pass
+class DataLoader:
+ """数据加载器,支持多种格式"""
+
+ def load_csv(self, filepath: str, **kwargs) -> pd.DataFrame:
+ """
+ 加载CSV文件
+
+ 参数:
+ filepath: CSV文件路径
+ **kwargs: 传递给pandas.read_csv的额外参数
+
+ 返回:
+ pandas DataFrame
+ """
+ pass
+
+ def load_json(self, filepath: str, **kwargs) -> dict:
+ """
+ 加载JSON文件
+
+ 参数:
+ filepath: JSON文件路径
+ **kwargs: 传递给json.load的额外参数
+
+ 返回:
+ JSON数据字典
+ """
+ pass
+
+ def load_from_database(self, query: str, connection: Any = None) -> pd.DataFrame:
+ """
+ 从数据库加载数据
+
+ 参数:
+ query: SQL查询语句
+ connection: 数据库连接对象
+
+ 返回:
+ pandas DataFrame
+ """
+ pass
+class DataTransformer:
+ """数据转换器,提供数据清洗和转换功能"""
+
+ def clean_data(self, df: pd.DataFrame, options: dict = None) -> pd.DataFrame:
+ """
+ 清洗数据
+
+ 参数:
+ df: 输入DataFrame
+ options: 清洗选项
+
+ 返回:
+ 清洗后的DataFrame
+ """
+ pass
+
+ def normalize(self, df: pd.DataFrame, columns: List[str] = None) -> pd.DataFrame:
+ """
+ 数据标准化
+
+ 参数:
+ df: 输入DataFrame
+ columns: 要标准化的列名列表,如果为None则标准化所有数值列
+
+ 返回:
+ 标准化后的DataFrame
+ """
+ pass
+
+ def encode_categorical(self, df: pd.DataFrame, columns: List[str] = None) -> pd.DataFrame:
+ """
+ 分类变量编码
+
+ 参数:
+ df: 输入DataFrame
+ columns: 要编码的列名列表,如果为None则编码所有分类列
+
+ 返回:
+ 编码后的DataFrame
+ """
+ pass
+class Analyzer:
+ """数据分析器,提供统计分析功能"""
+
+ def describe(self, df: pd.DataFrame) -> dict:
+ """
+ 数据描述统计
+
+ 参数:
+ df: 输入DataFrame
+
+ 返回:
+ 描述统计字典
+ """
+ pass
+
+ def correlation_analysis(self, df: pd.DataFrame, method: str = "pearson") -> pd.DataFrame:
+ """
+ 相关性分析
+
+ 参数:
+ df: 输入DataFrame
+ method: 相关性计算方法 ("pearson", "spearman", "kendall")
+
+ 返回:
+ 相关性矩阵DataFrame
+ """
+ pass
+
+ def hypothesis_test(self, df: pd.DataFrame, test_type: str, **kwargs) -> dict:
+ """
+ 假设检验
+
+ 参数:
+ df: 输入DataFrame
+ test_type: 检验类型 ("t-test", "chi-square", "anova")
+ **kwargs: 检验特定参数
+
+ 返回:
+ 检验结果字典
+ """
+ pass
+class ModelTrainer:
+ """模型训练器,提供机器学习模型训练功能"""
+
+ def train(self, X, y, model_type: str = "random_forest", **kwargs) -> Any:
+ """
+ 训练模型
+
+ 参数:
+ X: 特征数据
+ y: 目标数据
+ model_type: 模型类型
+ **kwargs: 模型特定参数
+
+ 返回:
+ 训练好的模型
+ """
+ pass
+
+ def evaluate(self, model, X_test, y_test, metrics: List[str] = None) -> dict:
+ """
+ 评估模型
+
+ 参数:
+ model: 训练好的模型
+ X_test: 测试特征数据
+ y_test: 测试目标数据
+ metrics: 评估指标列表
+
+ 返回:
+ 评估结果字典
+ """
+ pass
+
+ def cross_validate(self, X, y, model_type: str = "random_forest", cv: int = 5, **kwargs) -> dict:
+ """
+ 交叉验证
+
+ 参数:
+ X: 特征数据
+ y: 目标数据
+ model_type: 模型类型
+ cv: 交叉验证折数
+ **kwargs: 模型特定参数
+
+ 返回:
+ 交叉验证结果字典
+ """
+ pass
+class Logger:
+ """日志记录器,提供灵活的日志功能"""
+
+ def __init__(self, name: str = None, level: str = "INFO"):
+ """
+ 初始化日志记录器
+
+ 参数:
+ name: 日志记录器名称
+ level: 日志级别
+ """
+ pass
+
+ def debug(self, message: str, **kwargs):
+ """
+ 记录调试信息
+
+ 参数:
+ message: 日志消息
+ **kwargs: 额外参数
+ """
+ pass
+
+ def info(self, message: str, **kwargs):
+ """
+ 记录一般信息
+
+ 参数:
+ message: 日志消息
+ **kwargs: 额外参数
+ """
+ pass
+
+ def warning(self, message: str, **kwargs):
+ """
+ 记录警告信息
+
+ 参数:
+ message: 日志消息
+ **kwargs: 额外参数
+ """
+ pass
+
+ def error(self, message: str, **kwargs):
+ """
+ 记录错误信息
+
+ 参数:
+ message: 日志消息
+ **kwargs: 额外参数
+ """
+ pass
+class ConfigManager:
+ """配置管理器,提供配置加载和管理功能"""
+
+ def __init__(self, config_path: str = None):
+ """
+ 初始化配置管理器
+
+ 参数:
+ config_path: 配置文件路径
+ """
+ pass
+
+ def load(self, config_path: str = None) -> dict:
+ """
+ 加载配置
+
+ 参数:
+ config_path: 配置文件路径
+
+ 返回:
+ 配置字典
+ """
+ pass
+
+ def save(self, config: dict, config_path: str = None):
+ """
+ 保存配置
+
+ 参数:
+ config: 配置字典
+ config_path: 配置文件路径
+ """
+ pass
+
+ def get(self, key: str, default: Any = None) -> Any:
+ """
+ 获取配置值
+
+ 参数:
+ key: 配置键
+ default: 默认值
+
+ 返回:
+ 配置值
+ """
+ pass
+
+ def set(self, key: str, value: Any):
+ """
+ 设置配置值
+
+ 参数:
+ key: 配置键
+ value: 配置值
+ """
+ pass
+from your_project import Project
+from your_project.data_loader import DataLoader
+from your_project.analyzer import Analyzer
+
+# 初始化项目
+project = Project(config_path="config.yaml")
+
+# 加载配置
+config = project.load_config()
+
+# 加载数据
+data_loader = DataLoader()
+df = data_loader.load_csv("data.csv")
+
+# 分析数据
+analyzer = Analyzer()
+stats = analyzer.describe(df)
+print(stats)
+from your_project.model_trainer import ModelTrainer
+from your_project.data_transformer import DataTransformer
+from sklearn.model_selection import train_test_split
+
+# 准备数据
+transformer = DataTransformer()
+df_clean = transformer.clean_data(df)
+X = df_clean.drop("target", axis=1)
+y = df_clean["target"]
+
+# 分割数据
+X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
+
+# 训练模型
+trainer = ModelTrainer()
+model = trainer.train(X_train, y_train, model_type="random_forest")
+
+# 评估模型
+metrics = trainer.evaluate(model, X_test, y_test)
+print(f"模型性能: {metrics}")
+当前 API 版本:v1.0.0
+如果您想为 API 文档做出贡献:
+本文档描述项目的整体架构设计、组件交互和数据流。
+本项目采用模块化设计,遵循分层架构原则,确保系统的高可维护性、可扩展性和可靠性。
+┌─────────────────────────────────────────────────────────────┐
+│ 用户界面层 (UI Layer) │
+│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
+│ │ Web界面 │ │ CLI工具 │ │ API接口 │ │
+│ └─────────────┘ └─────────────┘ └─────────────┘ │
+└───────────────────────┬─────────────────────────────────────┘
+ │ HTTP/REST/CLI
+┌─────────────────────────────────────────────────────────────┐
+│ 应用服务层 (Application Layer) │
+│ ┌─────────────────────────────────────────────────────┐ │
+│ │ 业务逻辑控制器 (Controllers) │ │
+│ │ • 请求路由与验证 │ │
+│ │ • 业务流程协调 │ │
+│ │ • 事务管理 │ │
+│ └─────────────────────────────────────────────────────┘ │
+└───────────────────────┬─────────────────────────────────────┘
+ │ 服务调用
+┌─────────────────────────────────────────────────────────────┐
+│ 业务逻辑层 (Business Layer) │
+│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
+│ │ 服务模块A │ │ 服务模块B │ │ 服务模块C │ │
+│ │ • 核心算法 │ │ • 数据分析 │ │ • 模型训练 │ │
+│ │ • 业务规则 │ │ • 统计计算 │ │ • 预测推理 │ │
+│ └─────────────┘ └─────────────┘ └─────────────┘ │
+└───────────────────────┬─────────────────────────────────────┘
+ │ 数据访问
+┌─────────────────────────────────────────────────────────────┐
+│ 数据访问层 (Data Access Layer) │
+│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
+│ │ 数据仓库 │ │ 缓存层 │ │ 文件系统 │ │
+│ │ • 关系数据库│ │ • Redis │ │ • 本地文件 │ │
+│ │ • NoSQL │ │ • Memcached │ │ • 云存储 │ │
+│ └─────────────┘ └─────────────┘ └─────────────┘ │
+└─────────────────────────────────────────────────────────────┘
+功能: +- 提供多种用户交互方式 +- 输入验证和格式化 +- 响应渲染
+包含组件: +- Web界面:基于React/Vue的现代Web应用 +- CLI工具:命令行接口,用于脚本化和自动化 +- API接口:RESTful API,供第三方系统集成
+功能: +- 请求处理和路由 +- 身份认证和授权 +- 会话管理 +- 输入数据验证
+关键类:
+- RequestHandler:处理HTTP请求
+- AuthMiddleware:认证中间件
+- RateLimiter:限流控制
+- ValidationService:数据验证服务
功能: +- 实现核心业务规则 +- 数据处理和转换 +- 算法执行 +- 模型管理和训练
+核心模块:
+class DataProcessor:
+ """数据处理引擎"""
+
+ def extract(self, source):
+ """数据提取"""
+ pass
+
+ def transform(self, data, rules):
+ """数据转换"""
+ pass
+
+ def load(self, data, destination):
+ """数据加载"""
+ pass
+class AnalyticsEngine:
+ """分析引擎"""
+
+ def statistical_analysis(self, dataset):
+ """统计分析"""
+ pass
+
+ def predictive_modeling(self, features, target):
+ """预测建模"""
+ pass
+
+ def optimization(self, objective, constraints):
+ """优化计算"""
+ pass
+class ModelManager:
+ """模型管理器"""
+
+ def train(self, config):
+ """训练模型"""
+ pass
+
+ def evaluate(self, model, test_data):
+ """评估模型"""
+ pass
+
+ def deploy(self, model, environment):
+ """部署模型"""
+ pass
+
+ def monitor(self, model, metrics):
+ """监控模型"""
+ pass
+功能: +- 数据持久化 +- 缓存管理 +- 数据检索优化
+组件:
+class DataRepository:
+ """数据仓库抽象"""
+
+ def __init__(self, connection):
+ self.connection = connection
+
+ def save(self, entity):
+ """保存实体"""
+ pass
+
+ def find(self, query):
+ """查找实体"""
+ pass
+
+ def delete(self, entity_id):
+ """删除实体"""
+ pass
+class CacheService:
+ """缓存服务"""
+
+ def __init__(self, backend="redis"):
+ self.backend = backend
+
+ def get(self, key):
+ """获取缓存"""
+ pass
+
+ def set(self, key, value, ttl=None):
+ """设置缓存"""
+ pass
+
+ def invalidate(self, key):
+ """失效缓存"""
+ pass
+1. 数据输入
+ ↓
+2. 数据验证和清洗
+ ↓
+3. 特征工程和转换
+ ↓
+4. 模型训练/推理
+ ↓
+5. 结果后处理
+ ↓
+6. 输出和持久化
+┌─────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────┐
+│ 数据源 │───▶│ 数据摄取器 │───▶│ 数据清洗器 │───▶│ 特征工程 │
+│(CSV/DB/ │ │ (Ingestor) │ │ (Cleaner) │ │(Feature │
+│ API等) │ └──────────────┘ └──────────────┘ │ Engineer)│
+└─────────┘ │ │ └──────────┘
+ │ │ │
+ ┌────▼────┐ ┌─────▼────┐ │
+ │ 缓存层 │ │ 数据质量 │ │
+ │ (Cache) │ │ 监控器 │ │
+ └─────────┘ │(Quality │ │
+ │ Monitor) │ │
+ └──────────┘ │
+ ▼
+┌──────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────┐
+│ 结果存储 │◀───│ 结果处理器 │◀───│ 模型引擎 │◀───│ 模型训练/ │
+│(Result │ │ (Processor) │ │ (Engine) │ │ 推理器 │
+│ Storage) │ └──────────────┘ └──────────────┘ │(Trainer/ │
+└──────────┘ │ │ │ Inferencer)
+ │ │ └──────────┘
+ ┌────▼────┐ ┌─────▼────┐ │
+ │ 可视化 │ │ 模型评估 │ │
+ │(Viz) │ │(Evaluator)│ │
+ └─────────┘ └──────────┘ │
+ │
+ ┌──────▼──────┐
+ │ 模型仓库 │
+ │ (Model Repo)│
+ └─────────────┘
+┌─────────────────┐
+│ 开发机器 │
+│ • 本地数据库 │
+│ • 开发服务器 │
+│ • 调试工具 │
+└─────────────────┘
+┌─────────────────┐ ┌─────────────────┐
+│ 持续集成 │───▶│ 测试服务器 │
+│ • 自动构建 │ │ • 集成测试 │
+│ • 单元测试 │ │ • 系统测试 │
+└─────────────────┘ └─────────────────┘
+┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
+│ 负载均衡器 │───▶│ 应用服务器集群 │───▶│ 数据库集群 │
+│ • Nginx │ │ • 多实例部署 │ │ • 主从复制 │
+│ • HAProxy │ │ • 自动扩展 │ │ • 读写分离 │
+└─────────────────┘ └─────────────────┘ └─────────────────┘
+ │ │ │
+ ▼ ▼ ▼
+┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
+│ CDN和缓存 │ │ 消息队列集群 │ │ 对象存储 │
+│ • CloudFront │ │ • Kafka集群 │ │ • S3兼容存储 │
+│ • Redis缓存 │ │ • RabbitMQ │ │ • 备份系统 │
+└─────────────────┘ └─────────────────┘ └─────────────────┘
+VPN访问控制
+应用层安全
+身份认证和授权
+数据层安全
+数据脱敏
+运维安全
+用户请求
+ ↓
+身份验证 (JWT/OAuth2)
+ ↓
+令牌验证和解析
+ ↓
+权限检查 (RBAC/ABAC)
+ ↓
+资源访问
+缓存预热
+数据库优化
+分库分表
+异步处理
+批处理
+水平扩展
+0&&i[i.length-1])&&(p[0]===6||p[0]===2)){r=0;continue}if(p[0]===3&&(!i||p[1]>i[0]&&p[1]=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function K(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var o=r.call(e),n,i=[],s;try{for(;(t===void 0||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(a){s={error:a}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(s)throw s.error}}return i}function B(e,t,r){if(r||arguments.length===2)for(var o=0,n=t.length,i;o