一个具备科研可验证性的 LoRa 多跳算法评估基线。
This commit is contained in:
366
docs/plan/phase3.md
Normal file
366
docs/plan/phase3.md
Normal file
@@ -0,0 +1,366 @@
|
||||
下面是**下一阶段(Phase-3)明确执行清单**。
|
||||
目标不是继续“修代码”,而是把当前仿真从 **能运行的系统** 升级为 **可发表 / 可证明算法价值的实验平台**。
|
||||
|
||||
你可以直接把下面内容作为 `next_phase.md` 交给执行 AI。
|
||||
|
||||
---
|
||||
|
||||
# `next_phase.md`
|
||||
|
||||
```markdown
|
||||
# LoRa Route Py — Phase-3 任务清单
|
||||
## 目标
|
||||
当前系统已经:
|
||||
- ✅ 完整仿真框架
|
||||
- ✅ 多跳路由工作
|
||||
- ✅ 业务数据成功传输
|
||||
- ✅ 指标统计完善
|
||||
|
||||
下一阶段目标:
|
||||
|
||||
> 将仿真升级为 **算法评估平台(Algorithm Evaluation Platform)**
|
||||
|
||||
核心思想:
|
||||
|
||||
不再证明“能跑”
|
||||
→ 而是证明“比别人好”
|
||||
|
||||
---
|
||||
|
||||
# Phase-3 总览
|
||||
|
||||
新增三大能力:
|
||||
|
||||
1. Baseline 对照算法
|
||||
2. 可重复实验框架(Experiment Runner)
|
||||
3. 自动论文级结果输出
|
||||
|
||||
---
|
||||
|
||||
# TASK 1 — Baseline Routing(最高优先级)
|
||||
|
||||
## 目的
|
||||
当前只有 Gradient Routing。
|
||||
|
||||
必须加入对照组,否则结果没有科研意义。
|
||||
|
||||
---
|
||||
|
||||
## 1.1 新建目录
|
||||
|
||||
```
|
||||
|
||||
sim/routing/
|
||||
├── gradient_routing.py
|
||||
├── flooding.py ← NEW
|
||||
├── random_forward.py ← NEW
|
||||
└── shortest_path.py ← NEW(可选)
|
||||
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 1.2 Flooding Routing(必须实现)
|
||||
|
||||
### 行为
|
||||
|
||||
收到 DATA:
|
||||
|
||||
```
|
||||
|
||||
if packet_id 未见过:
|
||||
转发给所有邻居
|
||||
|
||||
````
|
||||
|
||||
需要:
|
||||
|
||||
- seen_packet_cache (TTL)
|
||||
- 防止无限广播
|
||||
|
||||
---
|
||||
|
||||
### 接口保持一致
|
||||
|
||||
```python
|
||||
class FloodingRouting(BaseRouting):
|
||||
def next_hop(self, packet):
|
||||
return BROADCAST
|
||||
````
|
||||
|
||||
Node 不需要修改。
|
||||
|
||||
---
|
||||
|
||||
## 1.3 Random Forward(必须)
|
||||
|
||||
用于验证:
|
||||
|
||||
> gradient 是否优于随机策略
|
||||
|
||||
逻辑:
|
||||
|
||||
```
|
||||
随机选择一个邻居转发
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 验收标准
|
||||
|
||||
新增测试:
|
||||
|
||||
```
|
||||
test_baseline_runs.py
|
||||
```
|
||||
|
||||
要求:
|
||||
|
||||
* flooding 能运行
|
||||
* random 能运行
|
||||
* 无死循环
|
||||
|
||||
---
|
||||
|
||||
# TASK 2 — Experiment Runner(核心)
|
||||
|
||||
## 目标
|
||||
|
||||
自动跑:
|
||||
|
||||
```
|
||||
节点数 × 区域大小 × 算法
|
||||
```
|
||||
|
||||
而不是手动运行。
|
||||
|
||||
---
|
||||
|
||||
## 2.1 新建
|
||||
|
||||
```
|
||||
sim/experiments/
|
||||
runner.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## API
|
||||
|
||||
```python
|
||||
run_experiment(
|
||||
routing="gradient",
|
||||
node_count=12,
|
||||
area_size=500,
|
||||
sim_time=500
|
||||
)
|
||||
```
|
||||
|
||||
返回:
|
||||
|
||||
```python
|
||||
{
|
||||
"pdr": float,
|
||||
"avg_latency": float,
|
||||
"avg_hop": float,
|
||||
"collision_rate": float,
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2.2 参数扫描
|
||||
|
||||
自动执行:
|
||||
|
||||
```
|
||||
nodes = [6, 9, 12, 15]
|
||||
area = [300, 500, 800]
|
||||
routing = ["gradient", "flooding", "random"]
|
||||
```
|
||||
|
||||
总实验:
|
||||
|
||||
```
|
||||
4 × 3 × 3 = 36 runs
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# TASK 3 — 固定随机种子(重要)
|
||||
|
||||
否则实验不可复现。
|
||||
|
||||
---
|
||||
|
||||
修改:
|
||||
|
||||
```
|
||||
config.py
|
||||
```
|
||||
|
||||
加入:
|
||||
|
||||
```python
|
||||
RANDOM_SEED = 42
|
||||
```
|
||||
|
||||
在 main 初始化:
|
||||
|
||||
```python
|
||||
random.seed(Config.RANDOM_SEED)
|
||||
np.random.seed(Config.RANDOM_SEED)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
验收:
|
||||
|
||||
同参数运行两次结果一致。
|
||||
|
||||
---
|
||||
|
||||
# TASK 4 — 新指标(Metrics v2)
|
||||
|
||||
扩展 metrics.py:
|
||||
|
||||
---
|
||||
|
||||
## 必须新增
|
||||
|
||||
### 4.1 End-to-End Latency
|
||||
|
||||
```
|
||||
receive_time - create_time
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```
|
||||
avg_latency
|
||||
p95_latency
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4.2 Forwarding Overhead
|
||||
|
||||
```
|
||||
total_tx / successful_packets
|
||||
```
|
||||
|
||||
衡量能量效率。
|
||||
|
||||
---
|
||||
|
||||
### 4.3 Network Load
|
||||
|
||||
```
|
||||
total_airtime / sim_time
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# TASK 5 — 自动结果导出
|
||||
|
||||
新增:
|
||||
|
||||
```
|
||||
analysis_tools/export.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 输出 CSV
|
||||
|
||||
```
|
||||
results.csv
|
||||
```
|
||||
|
||||
格式:
|
||||
|
||||
| routing | nodes | area | pdr | latency | hop |
|
||||
| ------- | ----- | ---- | --- | ------- | --- |
|
||||
|
||||
---
|
||||
|
||||
# TASK 6 — 自动绘图(必须)
|
||||
|
||||
使用 matplotlib:
|
||||
|
||||
生成:
|
||||
|
||||
```
|
||||
results/
|
||||
├── pdr_vs_nodes.png
|
||||
├── latency_vs_nodes.png
|
||||
├── overhead_compare.png
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
图要求:
|
||||
|
||||
* 每条 routing 一条曲线
|
||||
* 自动 legend
|
||||
|
||||
---
|
||||
|
||||
# TASK 7 — Regression Tests(防退化)
|
||||
|
||||
新增:
|
||||
|
||||
```
|
||||
test_algorithm_compare.py
|
||||
```
|
||||
|
||||
要求:
|
||||
|
||||
```
|
||||
gradient.pdr >= random.pdr
|
||||
```
|
||||
|
||||
(允许 small tolerance)
|
||||
|
||||
---
|
||||
|
||||
# TASK 8 — 自动实验入口
|
||||
|
||||
新增:
|
||||
|
||||
```
|
||||
python run_experiments.py
|
||||
```
|
||||
|
||||
执行后:
|
||||
|
||||
```
|
||||
✔ 运行全部实验
|
||||
✔ 输出CSV
|
||||
✔ 生成图表
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Phase-3 验收标准
|
||||
|
||||
必须全部满足:
|
||||
|
||||
* [ ] 至少 2 个 baseline 算法
|
||||
* [ ] 自动实验 runner
|
||||
* [ ] 固定随机种子
|
||||
* [ ] CSV 自动生成
|
||||
* [ ] 自动绘图
|
||||
* [ ] gradient 与 baseline 可比较
|
||||
* [ ] 一键运行实验
|
||||
|
||||
---
|
||||
|
||||
# 完成后系统能力
|
||||
|
||||
完成 Phase-3 后,你将拥有:
|
||||
|
||||
✅ LoRa mesh 仿真平台
|
||||
✅ 算法对照实验系统
|
||||
✅ 自动论文图生成
|
||||
✅ 可直接写实验章节
|
||||
Reference in New Issue
Block a user