2235cc86ccd065b13a43da014f748e8d131621fc
安装内容
- 数据库,推荐使用mysql 8.0以上版本
- Python 3.8
- 通过pip等方法安装requirements_manual_selected_20230304.txt文件中的包
前期准备工作
- 复制整个代码到本地
- 用root及密码登录mysql,在本地数据库中创建一个数据库,命名为iiabmdb
- 在mysql中运行SQL_db_user_create.sql里的sql命令,创建数据库用户。如果创建用户报错,需打开该文件,并运行第三行被注释掉的代码。该文件后面的sql命令也需要运行,将数据库用户的权限赋予iiabmdb数据库
- 之后直接运行controller.py文件,如果没有报错,则说明前期准备工作完成
运行程序
- 将conf_db_prefix.yaml文件中的db_prefix改为db_name_prefix: without_exp
- 打开命令行,进入代码所在目录,运行
python main.py --exp without_exp --job 6 --reset_db True
- 等待运行完成。结束后,将db_name_prefix: without_exp改为db_name_prefix: with_exp,并运行
python main.py --exp with_exp --job 6 --reset_db True
- 漫长的等待,直到运行完成
获得结果,绘制图表
风险节点分析
- 运行risk_analysis_sum_result.py文件,该程序自动产生风险节点分析统计数据并放置到output_result/risk文件夹中
- 依次运行risk_analysis_prod_network.py,risk_analysis_firm_network.py文件,将自动产生相关结果放置到output_result/risk文件夹中
韧性影响因素分析
- 运行SQL_analysis_experiment.sql文件,将汇总结果手工复制至output_result/resilience文件夹experiment_result.csv文件中
- 使用Minitab进行田口设计分析
- 新建田口设计(统计——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
- 将output_result/resilience文件夹experiment_result.csv文件中结果复制入田口设计表格右侧列
- 依次对各个韧性指标进行田口设计分析(统计——DOE——田口——分析田口设计),从mean_count_firm_prod,mean_max_ts_firm_prod,mean_n_remove_firm_prod,mean_end_ts中选择一个韧性指标,图形选项勾选均值,分析选项中显示响应表勾选均值,拟合线性模型勾选均值,点击确定
- 手工汇总方差分析结果至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 文件夹,使用遗传算法(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 模型参数:
n_max_trial- 最大尝试次数 [1, 60]prf_size- 偏好大小 [0.0, 1.0]prf_conn- 偏好连接 [0.0, 1.0]cap_limit_prob_type- 容量限制概率类型 [0, 1]cap_limit_level- 容量限制水平 [5, 80]diff_new_conn- 新连接差异 [0.0, 1.0]netw_prf_n- 网络偏好 N [1, 20]s_r- 小 r 参数 [0.01, 0.5]S_r- 大 R 参数 [0.5, 1.0]x- X 参数 [0.0, 1.0]k- K 参数 [0.1, 5.0]production_increase_ratio- 生产增加比率 [1.0, 5.0]
配置文件示例 (config.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: 变异概率
使用方法
- 准备数据库:确保数据库服务运行,配置 orm.py 中的连接参数
- 运行遗传算法(进入 GA_Agent_0925 目录):
python main.py - 监控运行过程:程序运行时会显示进度条和每代信息(进化代数、最优适应度、平均适应度、产业匹配情况)
- 查看结果:运行完成后,在
results/目录下生成:best_individual_each_gen.txt- 每代最优个体记录best_result_with_industry.json- 最终最优结果及产业匹配详情convergence.png- 收敛曲线图
适应度函数逻辑
目标函数
适应度 = -误差,其中误差 = |模拟脆弱产业集合 Δ 目标产业集合|
产业匹配分析
- 匹配产业:模拟结果与目标重合的产业
- 多余产业:模拟结果中多出的产业
- 缺失产业:目标中未被模拟覆盖的产业
目标产业集合
包含 35 个关键半导体产业链编号,涵盖半导体设备类、材料类、晶圆制造类、封装测试类、芯片设计类等。
数据库操作
- 样本管理:自动从数据库获取随机样本,样本锁定机制防止重复使用,支持临时表管理和清理
- 结果存储:每个 GA 个体分配唯一 ID,模拟结果与 GA 个体关联存储,支持多进程并发访问
故障排除
常见问题
- 数据库连接失败:检查 orm.py 中的连接配置
- 缺少依赖包:运行
pip install -r requirements.txt - ABM 模型错误:检查 my_model.py 的实现和 evaluate_func.py 的参数映射
- 内存不足:减少种群大小或并行进程数
日志信息
程序运行时输出详细日志,包括 GA 个体参数、数据库操作状态、产业匹配统计、错误和异常信息。
扩展开发
添加新参数
- 在 creating.py 中注册新基因
- 在 evaluate_func.py 的 fitness 函数中映射参数
- 更新 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中的扩展开发指南部分。
详细文档导航
| 需求 | 查看文档 | 说明 |
|---|---|---|
| 快速入门 | 本文件(README.md) | GA_Agent_0925 快速参考 |
| 完整文档 | 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 § 扩展开发指南 | 添加参数、自定义算子、多目标优化 |
许可证与联系
本项目仅供学术研究使用。如有问题请联系项目维护团队。
Description
本项目使用遗传算法(Genetic Algorithm)来优化基于代理的模型(Agent-Based Model)的关键参数,目标是使模型生成的脆弱产业集合与目标产业集合尽可能匹配。项目包含完整的遗传算法实现、ABM模型集成、数据库操作和结果分析功能。
Languages
Python
100%