cuGenOpt/benchmark/experiments/e13_multiobjective/DESIGN.md

244 lines
6.6 KiB
Markdown
Raw Normal View History

# E13: 多目标优化验证实验
## 实验目标
验证 cuGenOpt 的两种多目标比较模式:
1. **Weighted加权求和** - 目标可权衡
2. **Lexicographic字典法** - 目标有严格优先级
## 实验设计
### 测试问题
#### 问题 1: 双目标 VRP距离 vs 车辆数)
**目标**
- 目标1: 最小化总距离
- 目标2: 最小化使用的车辆数
**配置**
- 基准实例: A-n32-k5, A-n48-k7Augerat
- 车辆容量: 标准配置
- 车辆上限: 充足(允许优化车辆数)
**测试模式**
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 的对比
- cuGenOptWeighted可能在单个 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 吗?