Files
mesa-GA/README.md
2026-06-17 13:27:56 +08:00

183 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 安装内容
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^33^5因子选项中将列名依次修改为is_prf_sizeis_prf_connex_cap_typen_max_trialex_cap_paraprob_new_connt_max_trialn_sourcing
4. 将output_result/resilience文件夹*experiment_result.csv*文件中结果复制入田口设计表格右侧列
5. 依次对各个韧性指标进行田口设计分析统计——DOE——田口——分析田口设计从mean_count_firm_prodmean_max_ts_firm_prodmean_n_remove_firm_prodmean_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 § 扩展开发指南 | 添加参数、自定义算子、多目标优化 |
## 许可证与联系
本项目仅供学术研究使用。如有问题请联系项目维护团队。