## 安装内容
1. 数据库，推荐使用mysql 8.0以上版本
2. Python 3.8
3. 通过pip等方法安装*requirements_manual_selected_20230304.txt*文件中的包

## 前期准备工作
1. 复制整个代码到本地
2. 用root及密码登录mysql，在本地数据库中创建一个数据库，命名为*iiabmdb*
3. 在mysql中运行*SQL_db_user_create.sql*里的sql命令，创建数据库用户。如果创建用户报错，需打开该文件，并运行第三行被注释掉的代码。该文件后面的sql命令也需要运行，将数据库用户的权限赋予*iiabmdb*数据库
4. 之后直接运行controller.py文件，如果没有报错，则说明前期准备工作完成

## 运行程序
1. 将*conf_db_prefix.yaml*文件中的*db_prefix*改为*db_name_prefix: without_exp*
2. 打开命令行，进入代码所在目录，运行
```shell
python main.py --exp without_exp --job 6 --reset_db True
```
3. 等待运行完成。结束后，将*db_name_prefix: without_exp*改为*db_name_prefix: with_exp*，并运行
```shell
python main.py --exp with_exp --job 6 --reset_db True
```
4. 漫长的等待，直到运行完成

## 获得结果，绘制图表

### 风险节点分析
1. 运行*risk_analysis_sum_result.py*文件，该程序自动产生风险节点分析统计数据并放置到output_result/risk文件夹中
2. 依次运行*risk_analysis_prod_network.py*，*risk_analysis_firm_network.py*文件，将自动产生相关结果放置到output_result/risk文件夹中

### 韧性影响因素分析
1. 运行*SQL_analysis_experiment.sql*文件，将汇总结果手工复制至output_result/resilience文件夹*experiment_result.csv*文件中
2. 使用Minitab进行田口设计分析
3. 新建田口设计（统计——DOE——田口——创建田口设计——混合水平设计），因子数选项设置为8，设计选项设置为L36，水平^列为2^3，3^5，因子选项中将列名依次修改为：is_prf_size，is_prf_conn，ex_cap_type，n_max_trial，ex_cap_para，prob_new_conn，t_max_trial，n_sourcing
4. 将output_result/resilience文件夹*experiment_result.csv*文件中结果复制入田口设计表格右侧列
5. 依次对各个韧性指标进行田口设计分析（统计——DOE——田口——分析田口设计），从mean_count_firm_prod，mean_max_ts_firm_prod，mean_n_remove_firm_prod，mean_end_ts中选择一个韧性指标，图形选项勾选均值，分析选项中显示响应表勾选均值，拟合线性模型勾选均值，点击确定
6. 手工汇总方差分析结果至output_result/resilience文件夹*anova.csv*文件中，汇总响应表结果至*anova_visualization.csv*文件中

### 数据可视化工具

#### 绘制图.py
该脚本用于生成**各风险等级企业结构占比堆叠柱状图**，展示不同风险等级下的产业类别分布（包括材料、设备、设计、制造封测等），带有柱内百分比标签，便于快速了解各风险等级的产业结构特征。

#### 绘制度.py
该脚本通过读取产业链网络数据和企业网络缓存数据，生成两个度分布图：
- **产业链度分布图**（degree_distribution_with_labels.png）：展示产业链中各节点的度数分布，反映产业之间的连接关系复杂性
- **企业网络度分布图**（degree_distribution_firm.png）：展示企业网络中各企业的度数分布，反映企业间的合作/竞争关系

## GA_Agent_0925：遗传算法优化 ABM 模型参数

> 📚 **详细文档**：本部分是快速参考，更详细的说明（包括每个文件的详细功能、完整使用指南、故障排除、扩展开发等）请查看 [`GA_Agent_0925/ge_abm_readme.md`](./GA_Agent_0925/ge_abm_readme.md)

### 项目概述
该子项目位于 GA_Agent_0925 文件夹，使用遗传算法（Genetic Algorithm）来优化基于代理的模型（Agent-Based Model）的关键参数，目标是使模型生成的脆弱产业集合与目标产业集合尽可能匹配。项目包含完整的遗传算法实现、ABM 模型集成、数据库操作和结果分析功能。

### 项目结构
```
GA_Agent_0925/
├── main.py                    # 遗传算法主程序
├── evaluate_func.py           # 适应度函数和评估逻辑
├── creating.py                # 遗传算法工具箱创建（基因注册）
├── config.json                # 配置文件（种群参数）
├── my_model.py                # ABM 模型实现
├── orm.py                     # 数据库 ORM 配置
├── controller_db.py           # 数据库控制器
├── SQL_analysis_risk_ga.sql   # 分析 SQL 脚本
└── results/                   # 结果输出目录（自动创建）
```

### 核心功能
- **遗传算法优化**：使用 DEAP 框架实现完整的遗传算法流程，包括选择、交叉、变异等操作
- **多进程并行计算**：支持多进程运行 ABM 模型，提高计算效率
- **实时结果记录**：每代最优个体和适应度实时保存到文件
- **收敛曲线可视化**：自动生成算法收敛过程图表
- **产业匹配分析**：详细分析模拟结果与目标产业的匹配情况

### 优化参数范围
算法优化以下 12 个关键 ABM 模型参数：
1. `n_max_trial` - 最大尝试次数 [1, 60]
2. `prf_size` - 偏好大小 [0.0, 1.0]
3. `prf_conn` - 偏好连接 [0.0, 1.0]
4. `cap_limit_prob_type` - 容量限制概率类型 [0, 1]
5. `cap_limit_level` - 容量限制水平 [5, 80]
6. `diff_new_conn` - 新连接差异 [0.0, 1.0]
7. `netw_prf_n` - 网络偏好 N [1, 20]
8. `s_r` - 小 r 参数 [0.01, 0.5]
9. `S_r` - 大 R 参数 [0.5, 1.0]
10. `x` - X 参数 [0.0, 1.0]
11. `k` - K 参数 [0.1, 5.0]
12. `production_increase_ratio` - 生产增加比率 [1.0, 5.0]

### 配置文件示例 (config.json)
```json
{
    "seed": 42,
    "pop_size": 50,
    "n_gen": 100,
    "cx_prob": 0.7,
    "mut_prob": 0.2
}
```

**参数说明：**
- `seed`: 随机数种子，确保结果可重现
- `pop_size`: 种群大小
- `n_gen`: 进化代数
- `cx_prob`: 交叉概率
- `mut_prob`: 变异概率

### 使用方法
1. **准备数据库**：确保数据库服务运行，配置 orm.py 中的连接参数
2. **运行遗传算法**（进入 GA_Agent_0925 目录）：
   ```bash
   python main.py
   ```
3. **监控运行过程**：程序运行时会显示进度条和每代信息（进化代数、最优适应度、平均适应度、产业匹配情况）
4. **查看结果**：运行完成后，在 `results/` 目录下生成：
   - `best_individual_each_gen.txt` - 每代最优个体记录
   - `best_result_with_industry.json` - 最终最优结果及产业匹配详情
   - `convergence.png` - 收敛曲线图

### 适应度函数逻辑

#### 目标函数
```
适应度 = -误差，其中误差 = |模拟脆弱产业集合 Δ 目标产业集合|
```

#### 产业匹配分析
- **匹配产业**：模拟结果与目标重合的产业
- **多余产业**：模拟结果中多出的产业
- **缺失产业**：目标中未被模拟覆盖的产业

#### 目标产业集合
包含 35 个关键半导体产业链编号，涵盖半导体设备类、材料类、晶圆制造类、封装测试类、芯片设计类等。

### 数据库操作
- **样本管理**：自动从数据库获取随机样本，样本锁定机制防止重复使用，支持临时表管理和清理
- **结果存储**：每个 GA 个体分配唯一 ID，模拟结果与 GA 个体关联存储，支持多进程并发访问

### 故障排除

#### 常见问题
1. **数据库连接失败**：检查 orm.py 中的连接配置
2. **缺少依赖包**：运行 `pip install -r requirements.txt`
3. **ABM 模型错误**：检查 my_model.py 的实现和 evaluate_func.py 的参数映射
4. **内存不足**：减少种群大小或并行进程数

#### 日志信息
程序运行时输出详细日志，包括 GA 个体参数、数据库操作状态、产业匹配统计、错误和异常信息。

### 扩展开发

#### 添加新参数
1. 在 creating.py 中注册新基因
2. 在 evaluate_func.py 的 fitness 函数中映射参数
3. 更新 my_model.py 以使用新参数

#### 修改目标产业
编辑 evaluate_func.py 中的 `get_target_vulnerable_industries()` 函数，更新目标产业列表。

#### 调整算法策略
修改 main.py 中的遗传算子：
- 选择策略：`tools.selTournament`
- 交叉算子：`tools.cxTwoPoint`
- 变异算子：`tools.mutShuffleIndexes`

> 💡 **更多扩展指南**：有关自定义适应度函数、更换遗传算子、多目标优化等高级主题，请参考 [`GA_Agent_0925/ge_abm_readme.md`](./GA_Agent_0925/ge_abm_readme.md) 中的**扩展开发指南**部分。

### 详细文档导航

| 需求 | 查看文档 | 说明 |
|------|--------|------|
| 快速入门 | 本文件（README.md）| GA_Agent_0925 快速参考 |
| **完整文档** | **[`GA_Agent_0925/ge_abm_readme.md`](./GA_Agent_0925/ge_abm_readme.md)** | **详细的API、使用指南、故障排除等** |
| 核心算法细节 | ge_abm_readme.md § 核心文件详细说明 | main.py、evaluate_func.py、creating.py 等详细解释 |
| 配置调优 | ge_abm_readme.md § 完整使用指南 | 参数配置、性能优化建议 |
| 数据库操作 | ge_abm_readme.md § 数据库操作详解 | SQL查询、并发安全、表关系 |
| 问题排查 | ge_abm_readme.md § 故障排除 | 常见问题、调试模式、性能优化 |
| 高级扩展 | ge_abm_readme.md § 扩展开发指南 | 添加参数、自定义算子、多目标优化 |

## 许可证与联系
本项目仅供学术研究使用。如有问题请联系项目维护团队。
