no message
This commit is contained in:
187
GA_Agent_0925/ge_abm_readme.md
Normal file
187
GA_Agent_0925/ge_abm_readme.md
Normal file
@@ -0,0 +1,187 @@
|
||||
# 遗传算法优化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`
|
||||
|
||||
## 许可证
|
||||
|
||||
本项目仅供学术研究使用。
|
||||
|
||||
## 技术支持
|
||||
|
||||
如有问题请联系项目维护团队。
|
||||
Reference in New Issue
Block a user