mesa-GA/GA_Agent_0925/ge_abm_readme.md

185 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 遗传算法优化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`
## 许可证
本项目仅供学术研究使用。
## 技术支持
如有问题请联系项目维护团队。