# 遗传算法优化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`

## 许可证

本项目仅供学术研究使用。

## 技术支持

如有问题请联系项目维护团队。