把论文方法转成伪代码
论文里算法写得像密码,每次复现都要花半小时重梳理逻辑和缩进。
有人这样说「这篇NeurIPS的采样算法太绕了,复现得重读三遍才懂循环结构。」
能替你选的都选好了。不想动,直接点下面「交给 AI 办」,点一下就开始做;想改,就点一下要的那个。
已替你选好想改就点一下
更多选项(一般不用动)
只有你知道的不填就先空着,成品里留【待填】
还想怎么改可以不选
开工前请确认
高级选项一般不用动 · 这件事通常 1 分钟左右做好
示例成品全文按上面这组示例选项真跑出来的
按你给的段落补全如下;get_candidate_set 和 update_state 是原文没贴出来的部分,先按常见实现占位,你替换成论文对应公式即可。
===== 输入 =====
state_s 当前状态,作为网络输入
candidate_set_S_t 第 t 轮候选动作集,来自论文 S_t
net_model 策略网络,输出未归一化 logits
max_round_T 最大迭代轮数,论文未给出时按实验设置
===== 输出 =====
action_seq_A 每轮采样到的动作序列
===== 中间量 =====
logits_all 网络对全部动作的原始输出
logits_cand 候选动作对应的 logits
probs_P softmax 后的概率 P(a|s)
local_idx 候选集内的局部采样位置
action_seq_A = [] # 初始化输出动作序列
for t = 1 to max_round_T do # 外层循环:对应“每轮迭代”
candidate_set_S_t = get_candidate_set(state_s, t) # 获取当前轮候选集 S_t
if candidate_set_S_t is empty then # 易错点:空候选集做 softmax 会报错
break # 无候选动作,直接终止循环
else # 候选集非空,进入采样
logits_all = net_model(state_s) # 网络输出所有动作 logits
logits_cand = logits_all[candidate_set_S_t] # 筛出候选动作对应的 logits
logits_cand = logits_cand - max(logits_cand) # 易错点:减去最大值防止 exp 上溢
probs_P = softmax(logits_cand) # 原文:P(a|s) 由 logits 经 softmax 归一化得到
local_idx = categorical_sample(probs_P) # 按概率 P(a|s) 从候选集中采样一个位置
action_a = candidate_set_S_t[local_idx] # 易错点:别返回局部索引,要映射回全局动作 ID
action_seq_A.append(action_a) # 记录本轮采样结果
state_s = update_state(state_s, action_a) # 若论文只采样不更新状态,删除此行
end if
end for
return action_seq_A # 返回每轮采样得到的动作序列