aip-sci 0.1.0

Affective Interaction Programming - 情感交互编程
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
# AIP (Affective Interaction Programming) - 情感交互编程

基于情绪数据模型的AI决策与生成式用户交互系统。

## 项目概述

AIP是一个将用户情绪作为AI决策者直接优化目标的框架。系统不推荐内容,而是生成交互逻辑本身——将用户特质与实时行为情绪信号映射到参数化的交互机制。

### 核心组件

1. **EDM (Emotion Data Model)**: 情绪数据模型,从行为信号推断用户情绪状态
2. **Director**: 交互策略网络,基于情绪状态生成最优交互参数

---

## 技术架构

### 项目结构

```
aip/
├── Cargo.toml
├── src/
│   ├── lib.rs
│   ├── edm/
│   │   ├── mod.rs
│   │   ├── core.rs           # EDM核心接口定义
│   │   ├── features.rs       # 特征工程
│   │   └── roguelite/
│   │       ├── mod.rs
│   │       ├── core.rs       # EDM Roguelite推理实现
│   │       └── training.rs   # EDM Roguelite训练实现
│   ├── director/
│   │   ├── mod.rs
│   │   ├── core.rs           # Director核心接口定义
│   │   └── roguelite/
│   │       ├── mod.rs
│   │       ├── core.rs       # Director Roguelite推理实现
│   │       └── training.rs   # Director Roguelite训练实现
│   └── utils/
│       ├── math.rs           # 数学工具
│       └── tensor.rs         # Tensor工具
└── papers/
    └── 001.md                # 论文文档
```

### Cargo Features

| Feature | 描述 | 依赖 |
|---------|------|------|
| `edm` | EDM核心接口 | - |
| `edm_roguelite` | EDM Roguelite推理 | `edm` |
| `edm_roguelite_training` | EDM Roguelite训练 | `edm_roguelite` |
| `director` | Director核心接口 | - |
| `director_roguelite` | Director Roguelite推理 | `director`, `edm_roguelite` |
| `director_roguelite_training` | Director Roguelite训练 | `director_roguelite` |

---

## EDM (情绪数据模型)

### 功能描述

从触屏动力学、按键熵与犹豫模式等行为信号推断用户的实时情绪状态(效价、唤醒、掌控感)。

### 核心接口 (src/edm/core.rs)

```rust
pub trait EmotionDataModel: Send + Sync {
    fn infer(&self, features: &HashMap<u32, f32>) -> Result<EmotionState, EdmError>;
}

pub trait EmotionDataModelTrainer: Send + Sync {
    fn train(&mut self, dataset: &TrainingDataset) -> Result<TrainingResult, EdmError>;
    fn save(&self, path: &Path) -> Result<(), EdmError>;
    fn load(&mut self, path: &Path) -> Result<(), EdmError>;
}

#[derive(Debug, Clone)]
pub struct EmotionState {
    pub valence: f32,    // 效价 [0, 1]
    pub arousal: f32,    // 唤醒 [0, 1]
    pub dominance: f32,  // 掌控感 [0, 1]
}
```

### 特征定义

| 特征ID | 特征名 | 计算窗口 | 情绪关联 |
|--------|--------|----------|----------|
| 0 | 点击频率 | 10秒 | 唤醒↑ |
| 1 | 滑动速度 | 每次滑动 | 唤醒↑ |
| 2 | 多点触控比例 | 10秒 | 唤醒↑ |
| 3 | 设备倾斜标准差 | 10秒 | 唤醒↑ |
| 4 | 重试延迟 | 每次失败 | 效价↓ |
| 5 | 暂停时长 | 每次暂停 | 效价↓ |
| 6 | 犹豫时间 | 10秒 | 效价↓ |
| 7 | 路径效率 | 10秒 | 掌控↑ |
| 8 | 取消率 | 10秒 | 掌控↓ |
| 9 | 完成率 | 10秒 | 掌控↑ |
| 10 | 平均压力 | 10秒 | 唤醒↑ |
| 11 | 压力标准差 | 10秒 | 唤醒↑ |
| 12 | 动作精度 | 10秒 | 掌控↑ |
| 13 | 平均反应时间 | 10秒 | 效价↓ |
| 14 | 反应时间标准差 | 10秒 | 效价↓ |

### 模型架构

```
输入 (15维特征 × 5步历史)
1D卷积 (滤波器=32, 核=3)
SE模块 (通道注意力)
双向LSTM (64)
自注意力层
MLP (64→32→3)
Sigmoid → [效价, 唤醒, 掌控感] ∈ [0,1]
```

### 损失函数

```
L = 0.4 · MSE(v) + 0.4 · MSE(a) + 0.2 · MSE(d) + 0.2 · (1 - CCC)
```

### 性能目标

| 维度 | Pearson r 目标 | RMSE 目标 |
|------|----------------|-----------|
| 效价 | ≥ 0.55 | ≤ 0.18 |
| 唤醒 | ≥ 0.60 | ≤ 0.16 |
| 掌控感 | ≥ 0.50 | ≤ 0.20 |

---

## Director (交互策略)

### 功能描述

基于用户特质、环境状态和实时情绪向量,输出连续的交互参数以优化复合奖励。

### 核心接口 (src/director/core.rs)

```rust
pub trait InteractionStrategy: Send + Sync {
    fn decide(&self, state: &InteractionState) -> Result<InteractionParams, DirectorError>;
}

pub trait InteractionStrategyTrainer: Send + Sync {
    fn train(&mut self, trajectories: &Vec<Trajectory>) -> Result<TrainingResult, DirectorError>;
    fn save(&self, path: &Path) -> Result<(), DirectorError>;
    fn load(&mut self, path: &Path) -> Result<(), DirectorError>;
}

#[derive(Debug, Clone)]
pub struct InteractionState {
    pub user_traits: HashMap<u32, f32>,      // 用户特质 (8维)
    pub env_state: HashMap<u32, f32>,        // 环境状态 (6维)
    pub emotion: EmotionState,               // 实时情绪 (3维)
    pub emotion_stats: EmotionStats,         // 情绪统计 (6维)
}

#[derive(Debug, Clone)]
pub struct InteractionParams {
    pub intensity_factor: f32,    // [0.5, 2.0]
    pub feedback_intensity: f32,  // [0.3, 1.5]
    pub pace_speed: f32,          // [0.6, 1.8]
    pub reward_scarcity: f32,     // [0.0, 1.0]
    pub env_arousal: f32,         // [0.3, 1.0]
    pub rhythm_modulation: f32,   // [0.8, 1.5]
    pub challenge_curve: f32,     // [-1.0, 1.0]
}
```

### 状态空间 (23维)

| 类别 | 维度 | 描述 |
|------|------|------|
| 用户特质 | 8 | 年龄组、性别、自我报告风格、反应时间百分位等 |
| 环境状态 | 6 | 关卡、进度、资源、时间等 |
| 实时情绪 | 3 | 效价、唤醒、掌控感 |
| 情绪统计 | 6 | 过去30秒的均值和标准差 |

### 动作空间 (7维连续)

| 参数 | 范围 | 含义 |
|------|------|------|
| 强度因子 | [0.5, 2.0] | 事件频率/密度的乘数 |
| 反馈强度 | [0.3, 1.5] | 触觉/视觉反馈的强度 |
| 节奏速度 | [0.6, 1.8] | 交互进程的速度 |
| 奖励稀缺度 | [0.0, 1.0] | 稀有奖励的概率 |
| 环境唤醒度 | [0.3, 1.0] | 背景刺激水平 |
| 节奏调节 | [0.8, 1.5] | 音频反馈的节奏/步调 |
| 挑战曲线 | [-1.0, 1.0] | 难度进展的陡峭程度 |

### 奖励函数

```
R = 0.4 · R_progress + 0.4 · R_emotion + 0.2 · R_retention
```

### 训练参数 (PPO)

| 参数 ||
|------|-----|
| 学习率 | 3e-4 |
| 裁剪系数 | 0.2 |
| GAE λ | 0.95 |
| 熵系数 | 0.01 |
| 小批量大小 | 64 |
| 训练轮次 | 2000+ |

---

## 依赖库

- **Candle**: 最新版本,用于模型推理和训练
- **ndarray**: 数值计算
- **serde**: 序列化/反序列化

---

## 可验证任务清单

### Phase 1: 项目基础设施

> 预计完成标准: 编译通过 ✅

- [x] **T1.1** 初始化Rust项目,配置Cargo.toml
  - 验证标准: `cargo build` 成功
- [x] **T1.2** 配置所有features依赖关系
  - 验证标准: `cargo build --features edm_roguelite_training` 成功
- [x] **T1.3** 添加Candle依赖
  - 验证标准: `cargo build` 包含candle依赖
- [x] **T1.4** 创建基础模块结构
  - 验证标准: 所有mod.rs文件存在且可编译

### Phase 2: EDM核心实现

> 预计完成标准: 单元测试通过

- [x] **T2.1** 定义EDM核心trait (src/edm/core.rs)
  - 验证标准: 编译通过,trait定义完整
- [x] **T2.2** 实现EmotionState结构体
  - 验证标准: 包含valence, arousal, dominance字段
- [x] **T2.3** 实现特征工程模块 (src/edm/features.rs)
  - 验证标准: 15维特征计算正确
- [x] **T2.4** 实现特征归一化 (z-score)
  - 验证标准: 测试数据归一化结果正确
- [x] **T2.5** 编写EDM单元测试
  - 验证标准: `cargo test --lib edm` 全部通过

### Phase 3: EDM Roguelite推理实现

> 预计完成标准: 推理测试通过

- [x] **T3.1** 实现1D卷积层 (Candle)
  - 验证标准: 卷积输出维度正确
- [x] **T3.2** 实现SE注意力模块
  - 验证标准: 通道注意力输出正确
- [x] **T3.3** 实现双向LSTM层
  - 验证标准: 序列处理正确
- [x] **T3.4** 实现自注意力层
  - 验证标准: 注意力权重计算正确
- [x] **T3.5** 实现MLP输出层
  - 验证标准: 输出3维情绪向量
- [x] **T3.6** 实现模型加载/保存
  - 验证标准: 模型权重正确保存和加载
- [x] **T3.7** 集成推理pipeline
  - 验证标准: 给定输入特征,输出情绪状态
- [x] **T3.8** 编写推理测试
  - 验证标准: `cargo test --features edm_roguelite` 通过

### Phase 4: EDM Roguelite训练实现

> 预计完成标准: 训练收敛

- [x] **T4.1** 实现MSE损失函数
  - 验证标准: 损失计算正确
- [x] **T4.2** 实现CCC损失函数
  - 验证标准: 一致性相关系数计算正确
- [x] **T4.3** 实现组合损失函数 (权重0.4/0.4/0.2/0.2)
  - 验证标准: 损失计算符合论文定义
- [x] **T4.4** 实现训练数据加载器
  - 验证标准: 支持SAM评分数据格式
- [x] **T4.5** 实现训练循环
  - 验证标准: 支持mini-batch训练
- [x] **T4.6** 实现5折交叉验证
  - 验证标准: 验证流程正确
- [ ] **T4.7** 训练并验证模型性能
  - 验证标准: Pearson r ≥ 0.55 (效价)
- [x] **T4.8** 编写训练测试
  - 验证标准: `cargo test --features edm_roguelite_training` 通过

### Phase 5: Director核心实现

> 预计完成标准: 单元测试通过

- [x] **T5.1** 定义Director核心trait (src/director/core.rs)
  - 验证标准: 编译通过,trait定义完整
- [x] **T5.2** 实现InteractionState结构体
  - 验证标准: 包含23维状态字段
- [x] **T5.3** 实现InteractionParams结构体
  - 验证标准: 包含7维动作字段
- [x] **T5.4** 实现状态空间编码
  - 验证标准: HashMap到Tensor转换正确
- [x] **T5.5** 编写Director单元测试
  - 验证标准: `cargo test --lib director` 全部通过

### Phase 6: Director Roguelite推理实现

> 预计完成标准: 推理测试通过

- [x] **T6.1** 实现Actor网络 (策略网络)
  - 验证标准: 输出7维连续动作
- [x] **T6.2** 实现Critic网络 (价值网络)
  - 验证标准: 输出1维价值估计
- [x] **T6.3** 实现动作空间约束
  - 验证标准: 输出在指定范围内
- [x] **T6.4** 实现模型加载/保存
  - 验证标准: 模型权重正确保存和加载
- [x] **T6.5** 集成推理pipeline
  - 验证标准: 给定状态,输出交互参数
- [x] **T6.6** 编写推理测试
  - 验证标准: `cargo test --features director_roguelite` 通过

### Phase 7: Director Roguelite训练实现

> 预计完成标准: 训练收敛

- [x] **T7.1** 实现奖励函数计算
  - 验证标准: 三项奖励正确组合
- [x] **T7.2** 实现GAE计算
  - 验证标准: λ=0.95的GAE正确计算
- [x] **T7.3** 实现PPO裁剪目标函数
  - 验证标准: ε=0.2裁剪正确
- [x] **T7.4** 实现熵正则化
  - 验证标准: 熵系数0.01正确应用
- [x] **T7.5** 实现训练循环
  - 验证标准: 支持mini-batch=64训练
- [x] **T7.6** 实现经验轨迹收集
  - 验证标准: 支持分布式轨迹上传
- [ ] **T7.7** 训练并验证策略收敛
  - 验证标准: 平均回报从0.32提升至0.78
- [x] **T7.8** 编写训练测试
  - 验证标准: `cargo test --features director_roguelite_training` 通过

### Phase 8: 集成测试

> 预计完成标准: 端到端测试通过

- [x] **T8.1** EDM + Director集成测试
  - 验证标准: 完整pipeline运行正确
- [x] **T8.2** 模拟玩家环境测试
  - 验证标准: 模拟环境响应正确
- [x] **T8.3** 用户群体特化验证
  - 验证标准: t-SNE可视化显示聚类分离
- [x] **T8.4** 消融实验验证
  - 验证标准: 无情绪策略情绪波动性更高
- [x] **T8.5** 性能基准测试
  - 验证标准: 推理延迟 < 10ms

### Phase 9: 文档与发布

> 预计完成标准: 文档完整

- [x] **T9.1** 编写API文档
  - 验证标准: `cargo doc` 无警告
- [x] **T9.2** 编写使用示例
  - 验证标准: 示例代码可运行
- [x] **T9.3** 编写性能基准文档
  - 验证标准: 包含详细性能数据

---

## 验证命令汇总

```bash
# 基础编译
cargo build

# 完整编译 (所有features)
cargo build --all-features

# 全部测试
cargo test --all-features

# 文档生成
cargo doc --open

# 代码格式化
cargo fmt

# 静态检查
cargo clippy --all-features
```

---

## 参考文献

1. Barthet et al. (2024). Closing the Affective Loop via Experience-Driven Reinforcement Learning Designers.
2. Yannakakis & Togelius (2011). Experience-driven procedural content generation.
3. Schulman et al. (2017). Proximal policy optimization algorithms.

---

## 许可证

MIT License