Neuromatch Academy最优控制教程:离散状态的最优控制策略
2025-07-10 08:02:45作者:蔡怀权
教程概述
本教程将介绍如何使用**部分可观测马尔可夫决策过程(POMDP)**来建模和解决一个二元控制问题——钓鱼任务。在这个任务中,你需要决定在两个钓鱼点之间切换位置,以最大化捕获鱼的数量,同时最小化切换位置的成本。
核心概念
1. 问题建模
我们将钓鱼问题建模为一个部分可观测马尔可夫决策过程(POMDP),包含以下要素:
- 隐藏状态:鱼群的实际位置(左或右)
- 观测:是否捕获到鱼
- 动作:保持当前位置或切换位置
- 奖励:捕获鱼获得正奖励,切换位置产生负成本
2. 关键技术组件
2.1 鱼群动态模型
鱼群的位置变化遵循电报过程(telegraph process),这是一个连续时间马尔可夫过程:
def fish_dynamics(self):
p_stay, _, _, _ = self.params
fish_state = np.zeros(self.T, int)
fish_state[0] = self.fish_initial
tele_operations = binomial_tele(p_stay, self.T)
for t in range(1, self.T):
fish_state[t] = int(not(fish_state[t-1] ^ tele_operations[t]))
return fish_state
2.2 信念更新
基于观测结果(是否捕获鱼),我们需要不断更新对鱼群位置的信念(belief)——即给定过去观测条件下鱼群位置的后验概率分布。
2.3 策略评估
我们需要评估不同控制策略的质量,最终找到能够最大化效用的最优策略。
实现步骤
1. 初始化环境
首先设置环境参数:
# 参数说明:
# p_stay: 鱼群保持在当前位置的概率
# p_low_rwd: 鱼群不在当前位置时捕获鱼的概率(低)
# p_high_rwd: 鱼群在当前位置时捕获鱼的概率(高)
# cost_sw: 切换位置的成本
params = (0.8, 0.1, 0.6, 0.1)
T = 50 # 时间步数
2. 可视化鱼群动态
使用提供的绘图函数可视化鱼群位置随时间的变化:
hmm = binaryHMM(params, T)
fish_state = hmm.fish_dynamics()
plot_fish(fish_state)
3. 实施被动策略
先尝试一个简单的被动策略——始终保持在初始位置:
fish_state, loc, meas = hmm.generate_process_lazy()
plot_dynamics(None, loc, None, meas, fish_state, None)
4. 信念更新实现
基于观测结果更新信念:
def update_belief(belief, measurement, action, params):
p_stay, p_low_rwd, p_high_rwd, _ = params
# 预测步骤
if action == 0: # 保持
pred_belief = p_stay * belief + (1 - p_stay) * (1 - belief)
else: # 切换
pred_belief = (1 - p_stay) * belief + p_stay * (1 - belief)
# 更新步骤
if measurement == 1: # 捕获鱼
likelihood = p_high_rwd if action == 0 else p_low_rwd
else: # 未捕获鱼
likelihood = 1 - p_high_rwd if action == 0 else 1 - p_low_rwd
post_belief = (likelihood * pred_belief) / \
(likelihood * pred_belief + (1 - likelihood) * (1 - pred_belief))
return post_belief
5. 策略评估与优化
评估不同阈值策略的性能,找到最优阈值:
def evaluate_policy(threshold, params, T=100, num_runs=100):
total_reward = 0
for _ in range(num_runs):
hmm = binaryHMM_belief(params, T)
fish_state, loc, meas = hmm.generate_process(threshold)
total_reward += np.sum(meas) - cost_sw * np.sum(np.abs(np.diff(loc)))
return total_reward / num_runs
# 测试不同阈值
thresholds = np.linspace(0.1, 0.9, 9)
values = [evaluate_policy(t, params) for t in thresholds]
optimal_threshold = thresholds[np.argmax(values)]
关键见解
-
信息-行动循环:系统展示了典型的感知-行动循环,观测用于更新信念,信念指导行动选择。
-
探索-利用权衡:需要在探索(切换位置获取信息)和利用(在当前位置最大化奖励)之间找到平衡。
-
延迟奖励:有时需要承受短期损失(切换成本)以获得长期收益。
-
不确定性管理:信念状态量化了我们对隐藏状态的不确定性,最优策略需要考虑这种不确定性。
实际应用
这种POMDP框架可以应用于许多实际问题:
- 机器人导航:在部分可观测环境中规划路径
- 医疗决策:基于不完全检测结果选择治疗方案
- 金融交易:在市场状态不完全可见情况下的交易决策
- 认知神经科学:理解大脑如何在不确定环境下做出决策
总结
本教程通过钓鱼任务展示了:
- 如何将实际问题建模为POMDP
- 如何实现信念更新机制
- 如何评估和优化控制策略
- 最优控制理论在实际问题中的应用
理解这些概念对于构建能够在不确定环境中做出最优决策的智能系统至关重要。