# 遗传算法优化ABM模型参数项目 ## 项目概述 本项目使用遗传算法(Genetic Algorithm)来优化基于代理的模型(Agent-Based Model)的关键参数,目标是使模型生成的脆弱产业集合与目标产业集合尽可能匹配。项目包含完整的遗传算法实现、ABM模型集成、数据库操作和结果分析功能。 ## 项目结构 ``` 项目根目录/ ├── main.py # 遗传算法主程序 ├── evaluate_func.py # 适应度函数和评估逻辑 ├── creating.py # 遗传算法工具箱创建 ├── config.json # 配置文件 ├── controller_db.py # 数据库控制器(需补充) ├── my_model.py # ABM模型实现(需补充) ├── orm.py # 数据库ORM配置(需补充) ├── GA_Agent_0925/ # 遗传算法相关模块 │ ├── creating.py # 工具箱创建 │ ├── orm.py # 数据库配置 │ └── SQL_analysis_risk_ga.sql # 分析SQL脚本 ├── results/ # 结果输出目录(自动创建) └── requirements.txt # 依赖包列表(需补充) ``` ## 功能特性 ### 核心功能 - **遗传算法优化**:使用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. 运行遗传算法 ```bash python main.py ``` ### 3. 监控运行过程 程序运行时会显示进度条和每代信息: - 当前进化代数 - 最优个体适应度 - 平均适应度 - 产业匹配情况 ### 4. 查看结果 运行完成后,在`results/`目录下生成: - `best_individual_each_gen.txt` - 每代最优个体记录 - `best_result_with_industry.json` - 最终最优结果 - `convergence.png` - 收敛曲线图 ## 输出文件说明 ### 文本输出文件 ``` 实验开始时间:2024-01-01 14 以下为每一代的最优个体基因参数: 第1代最优基因:[参数列表] 最优适应度: 0.8500 第2代最优基因:[参数列表] 最优适应度: 0.8700 ... ``` ### JSON结果文件 包含完整的优化结果: - 算法配置参数 - 最优个体基因值 - 最优适应度值 - 收敛曲线数据 - 时间戳信息 ### 可视化结果 生成收敛曲线图,显示最佳适应度和平均适应度随代数的变化趋势。 ## 适应度函数逻辑 ### 目标函数 适应度 = -误差,其中误差计算为: ``` 误差 = |模拟脆弱产业集合 Δ 目标产业集合| ``` ### 产业匹配分析 - **匹配产业**: 模拟结果与目标重合的产业 - **多余产业**: 模拟结果中多出的产业 - **缺失产业**: 目标中未被模拟覆盖的产业 ### 目标产业集合 包含35个关键半导体产业链编号,涵盖: - 半导体设备类(光刻机、刻蚀设备等) - 半导体材料类(光刻胶、清洗溶剂等) - 晶圆制造类 - 封装测试类 - 芯片设计类 ## 数据库操作 ### 样本管理 - 自动从数据库获取随机样本 - 样本锁定机制防止重复使用 - 临时表管理和清理 ### 结果存储 - 每个GA个体分配唯一ID - 模拟结果与GA个体关联存储 - 支持多进程并发访问 ## 故障排除 ### 常见问题 1. **数据库连接失败**: 检查`orm.py`中的连接配置 2. **缺少依赖包**: 运行`pip install -r requirements.txt` 3. **ABM模型错误**: 检查`my_model.py`的实现 4. **内存不足**: 减少种群大小或并行进程数 ### 日志信息 程序运行时会输出详细日志,包括: - GA个体参数 - 数据库操作状态 - 产业匹配统计 - 错误和异常信息 ## 扩展开发 ### 添加新参数 1. 在`creating.py`中注册新基因 2. 在`evaluate_func.py`的`fitness`函数中映射参数 3. 更新ABM模型以使用新参数 ### 修改目标产业 编辑`evaluate_func.py`中的`get_target_vulnerable_industries()`函数,更新目标产业列表。 ### 调整算法策略 修改`main.py`中的遗传算子: - 选择策略:`tools.selTournament` - 交叉算子:`tools.cxTwoPoint` - 变异算子:`tools.mutShuffleIndexes` ## 许可证 本项目仅供学术研究使用。 ## 技术支持 如有问题请联系项目维护团队。