## 安装内容 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 § 扩展开发指南 | 添加参数、自定义算子、多目标优化 | ## 许可证与联系 本项目仅供学术研究使用。如有问题请联系项目维护团队。