mirror of
https://github.com/L-yang-yang/cugenopt.git
synced 2026-04-25 12:16:21 +02:00
244 lines
6.6 KiB
Markdown
244 lines
6.6 KiB
Markdown
|
|
# E13: 多目标优化验证实验
|
|||
|
|
|
|||
|
|
## 实验目标
|
|||
|
|
|
|||
|
|
验证 cuGenOpt 的两种多目标比较模式:
|
|||
|
|
1. **Weighted(加权求和)** - 目标可权衡
|
|||
|
|
2. **Lexicographic(字典法)** - 目标有严格优先级
|
|||
|
|
|
|||
|
|
## 实验设计
|
|||
|
|
|
|||
|
|
### 测试问题
|
|||
|
|
|
|||
|
|
#### 问题 1: 双目标 VRP(距离 vs 车辆数)
|
|||
|
|
|
|||
|
|
**目标**:
|
|||
|
|
- 目标1: 最小化总距离
|
|||
|
|
- 目标2: 最小化使用的车辆数
|
|||
|
|
|
|||
|
|
**配置**:
|
|||
|
|
- 基准实例: A-n32-k5, A-n48-k7(Augerat)
|
|||
|
|
- 车辆容量: 标准配置
|
|||
|
|
- 车辆上限: 充足(允许优化车辆数)
|
|||
|
|
|
|||
|
|
**测试模式**:
|
|||
|
|
1. **Weighted 模式**:
|
|||
|
|
- 配置 A: `weights = [0.9, 0.1]` - 主要关注距离
|
|||
|
|
- 配置 B: `weights = [0.7, 0.3]` - 平衡距离和车辆数
|
|||
|
|
- 配置 C: `weights = [0.5, 0.5]` - 同等重要
|
|||
|
|
|
|||
|
|
2. **Lexicographic 模式**:
|
|||
|
|
- 配置 D: 优先级 [距离, 车辆数], tolerance=[100.0, 0.0]
|
|||
|
|
- 配置 E: 优先级 [车辆数, 距离], tolerance=[0.0, 100.0]
|
|||
|
|
|
|||
|
|
#### 问题 2: 三目标 VRP(距离 vs 车辆数 vs 最大路径长度)
|
|||
|
|
|
|||
|
|
**目标**:
|
|||
|
|
- 目标1: 最小化总距离
|
|||
|
|
- 目标2: 最小化使用的车辆数
|
|||
|
|
- 目标3: 最小化最大路径长度(负载均衡)
|
|||
|
|
|
|||
|
|
**配置**:
|
|||
|
|
- 基准实例: A-n48-k7
|
|||
|
|
- 测试 Weighted 和 Lexicographic 两种模式
|
|||
|
|
|
|||
|
|
#### 问题 3: 双目标 Knapsack(价值 vs 重量)
|
|||
|
|
|
|||
|
|
**目标**:
|
|||
|
|
- 目标1: 最大化总价值
|
|||
|
|
- 目标2: 最小化总重量(在满足容量约束下,尽量少用重量)
|
|||
|
|
|
|||
|
|
**配置**:
|
|||
|
|
- 实例: knapPI_1_100
|
|||
|
|
- 容量: 标准配置
|
|||
|
|
|
|||
|
|
**测试模式**:
|
|||
|
|
- Weighted: `weights = [0.8, 0.2]` (80% 关注价值)
|
|||
|
|
- Lexicographic: 优先级 [价值, 重量]
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 实验配置
|
|||
|
|
|
|||
|
|
### 硬件环境
|
|||
|
|
- **主实验**: Tesla T4(单GPU)
|
|||
|
|
- **附加验证**: 2×T4(验证多 GPU 协同在多目标模式下是否正常工作)
|
|||
|
|
- **时间限制**: 60 秒
|
|||
|
|
- **随机种子**: 5 个种子(42, 123, 456, 789, 2024)
|
|||
|
|
|
|||
|
|
### 对比基线
|
|||
|
|
- **NSGA-II (DEAP)**: Python 实现的标准多目标算法
|
|||
|
|
- **单目标版本**: 只优化第一个目标(作为参考)
|
|||
|
|
|
|||
|
|
### 评价指标
|
|||
|
|
|
|||
|
|
#### 1. 解质量指标
|
|||
|
|
- **主目标 gap%**: 第一个目标相对最优值的差距
|
|||
|
|
- **次目标值**: 其他目标的绝对值
|
|||
|
|
- **Pareto 支配关系**: 解之间的支配情况
|
|||
|
|
|
|||
|
|
#### 2. 权重/容差敏感性
|
|||
|
|
- 不同权重配置下的解质量变化
|
|||
|
|
- 不同容差配置下的解质量变化
|
|||
|
|
|
|||
|
|
#### 3. 模式对比
|
|||
|
|
- Weighted vs Lexicographic 在相同问题上的表现
|
|||
|
|
- 收敛速度、解多样性
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 实验步骤
|
|||
|
|
|
|||
|
|
### 阶段 1: 实现测试问题(1-2 小时)
|
|||
|
|
|
|||
|
|
1. **创建 Problem 定义**:
|
|||
|
|
- `bi_objective_vrp.cuh` - 双目标 VRP
|
|||
|
|
- `tri_objective_vrp.cuh` - 三目标 VRP
|
|||
|
|
- `bi_objective_knapsack.cuh` - 双目标 Knapsack
|
|||
|
|
|
|||
|
|
2. **实现两种模式的配置**:
|
|||
|
|
- 每个问题提供 Weighted 和 Lexicographic 两个版本
|
|||
|
|
|
|||
|
|
### 阶段 2: 运行实验(2-3 小时)
|
|||
|
|
|
|||
|
|
#### 主实验(单 GPU)
|
|||
|
|
|
|||
|
|
1. **Weighted 模式实验**:
|
|||
|
|
- 不同权重配置(3-5 组)
|
|||
|
|
- 记录每个目标的值
|
|||
|
|
|
|||
|
|
2. **Lexicographic 模式实验**:
|
|||
|
|
- 不同容差配置(2-3 组)
|
|||
|
|
- 不同优先级顺序(2 组)
|
|||
|
|
|
|||
|
|
3. **对比基线**:
|
|||
|
|
- NSGA-II (DEAP) 运行相同问题
|
|||
|
|
- 单目标版本作为参考
|
|||
|
|
|
|||
|
|
#### 附加验证(多 GPU)
|
|||
|
|
|
|||
|
|
**目的**: 验证多 GPU 协同在多目标模式下是否正常工作(非性能对比)
|
|||
|
|
|
|||
|
|
**配置**:
|
|||
|
|
- 双目标 VRP (A-n48-k7)
|
|||
|
|
- Weighted 模式: `weights = [0.7, 0.3]`
|
|||
|
|
- Lexicographic 模式: 优先级 [距离, 车辆数]
|
|||
|
|
- 2×T4, 60 秒, 单次运行
|
|||
|
|
|
|||
|
|
**验证点**:
|
|||
|
|
- ✅ 多 GPU 协调器能否正确比较不同 GPU 的解
|
|||
|
|
- ✅ 最终结果是否合理(不劣于单 GPU)
|
|||
|
|
- ✅ 无崩溃、无死锁
|
|||
|
|
|
|||
|
|
### 阶段 3: 数据分析(1 小时)
|
|||
|
|
|
|||
|
|
1. **生成对比表**:
|
|||
|
|
- Weighted 不同权重下的解质量
|
|||
|
|
- Lexicographic 不同容差下的解质量
|
|||
|
|
- cuGenOpt vs NSGA-II 对比
|
|||
|
|
- 多 GPU 验证结果(简单表格,确认功能正常)
|
|||
|
|
|
|||
|
|
2. **可视化**:
|
|||
|
|
- Pareto front 散点图(双目标问题)
|
|||
|
|
- 权重敏感性曲线
|
|||
|
|
|
|||
|
|
3. **生成报告**: `E13_REPORT.md`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 预期结果
|
|||
|
|
|
|||
|
|
### 假设 1: Weighted 模式有效性
|
|||
|
|
- 不同权重配置应产生不同的 Pareto 解
|
|||
|
|
- 权重越大的目标,优化效果越好
|
|||
|
|
|
|||
|
|
### 假设 2: Lexicographic 模式有效性
|
|||
|
|
- 第一优先级目标应得到最优或接近最优
|
|||
|
|
- 容差内才考虑次要目标
|
|||
|
|
|
|||
|
|
### 假设 3: 与 NSGA-II 的对比
|
|||
|
|
- cuGenOpt(Weighted)可能在单个 Pareto 点上表现好
|
|||
|
|
- NSGA-II 可能在 Pareto front 覆盖上更好(维护整个前沿)
|
|||
|
|
|
|||
|
|
### 假设 4: 多 GPU 兼容性
|
|||
|
|
- 多 GPU 协调器能正确使用 Weighted/Lexicographic 模式比较解
|
|||
|
|
- 多 GPU 结果不劣于单 GPU(功能正常性验证)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 实验价值
|
|||
|
|
|
|||
|
|
### 学术价值
|
|||
|
|
1. **验证多目标能力**: 证明框架不仅支持单目标
|
|||
|
|
2. **模式对比**: 展示两种模式的适用场景
|
|||
|
|
3. **GPU 加速多目标**: 展示 GPU 在多目标优化上的潜力
|
|||
|
|
|
|||
|
|
### 工程价值
|
|||
|
|
1. **实际应用场景**: VRP 中距离 vs 车辆数是常见需求
|
|||
|
|
2. **用户指导**: 提供选择模式的实践建议
|
|||
|
|
3. **功能完整性**: 补全框架验证的最后一块拼图
|
|||
|
|
|
|||
|
|
### 论文价值
|
|||
|
|
1. **增强完整性**: 补充多目标实验
|
|||
|
|
2. **差异化优势**: 大多数 GPU 优化框架只支持单目标
|
|||
|
|
3. **实用性**: 展示框架在实际多目标场景的应用
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 时间估算
|
|||
|
|
|
|||
|
|
- **实现**: 1-2 小时(3 个 Problem 定义)
|
|||
|
|
- **主实验**: 2-3 小时(多组配置,对比基线)
|
|||
|
|
- **多 GPU 验证**: 0.5 小时(2 个快速测试)
|
|||
|
|
- **分析**: 1 小时(表格、图表、报告)
|
|||
|
|
- **总计**: 4.5-6.5 小时
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 是否纳入当前论文?
|
|||
|
|
|
|||
|
|
### 选项 A: 纳入 paper_v3(推荐)
|
|||
|
|
**优点**:
|
|||
|
|
- ✅ 功能完整性
|
|||
|
|
- ✅ 差异化优势
|
|||
|
|
- ✅ 实验工作量可控(4-6 小时)
|
|||
|
|
|
|||
|
|
**缺点**:
|
|||
|
|
- ⚠️ 论文已经 27 页,再加可能超 30 页
|
|||
|
|
- ⚠️ 需要新增 1-2 张图(Pareto front)
|
|||
|
|
|
|||
|
|
**建议**:
|
|||
|
|
- 新增 §6.6 "Multi-Objective Optimization Modes"
|
|||
|
|
- 1 个表格(Weighted 不同权重配置)
|
|||
|
|
- 1 个表格(Lexicographic 不同优先级配置)
|
|||
|
|
- 1 张图(Pareto front 散点图)
|
|||
|
|
- 1 个小表格(多 GPU 验证,放在脚注或附录)
|
|||
|
|
- 约 1.5-2 页内容
|
|||
|
|
|
|||
|
|
### 选项 B: 作为独立补充实验
|
|||
|
|
**优点**:
|
|||
|
|
- ✅ 不影响当前论文进度
|
|||
|
|
- ✅ 可以更深入探索
|
|||
|
|
|
|||
|
|
**缺点**:
|
|||
|
|
- ⚠️ 论文缺少多目标验证
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 建议
|
|||
|
|
|
|||
|
|
**我的建议**: **执行 E13 实验并纳入 paper_v3**
|
|||
|
|
|
|||
|
|
**理由**:
|
|||
|
|
1. 功能已实现,只差实验验证(4-6 小时可完成)
|
|||
|
|
2. 多目标是框架的重要特性,值得展示
|
|||
|
|
3. 实验设计清晰,工作量可控
|
|||
|
|
4. 可以作为论文的亮点之一
|
|||
|
|
|
|||
|
|
**下一步**:
|
|||
|
|
1. 创建 E13 实验目录和 Problem 定义
|
|||
|
|
2. 运行实验收集数据
|
|||
|
|
3. 生成 E13_REPORT.md
|
|||
|
|
4. 更新 paper_v3 添加 §6.6 节
|
|||
|
|
|
|||
|
|
要开始实现 E13 吗?
|