185 lines
5.3 KiB
Markdown
185 lines
5.3 KiB
Markdown
# 遗传算法优化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配置(需补充)
|
||
│── creating.py # 工具箱创建
|
||
│── orm.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. 运行遗传算法
|
||
```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`
|
||
|
||
## 许可证
|
||
|
||
本项目仅供学术研究使用。
|
||
|
||
## 技术支持
|
||
|
||
如有问题请联系项目维护团队。 |