exp(fb-mix): 轮次7负结论——衰减增益到达 23.4→9.4%、刹停兜底碰撞 1.6→57.8%(绕过安全层);参数默认关闭,历史最佳仍为 gain1.2 无衰减无兜底(23.4%/1.6%/0.454/973ms)
This commit is contained in:
+13
-2
@@ -141,7 +141,8 @@ class TeacherOracle:
|
||||
|
||||
@torch.no_grad()
|
||||
def rollout(model, kin, tasks, device, K=8, safety=False, seed=0, max_sec=None, return_traj=False, use_sub=True, sub_override=None,
|
||||
qp0=None, steps=1, z_scale=1.0, select='consist', oracle=None, replan='r3', sub_rule='cross', fb_gain=0.0):
|
||||
qp0=None, steps=1, z_scale=1.0, select='consist', oracle=None, replan='r3', sub_rule='cross',
|
||||
fb_gain=0.0, fb_scale=0.0, fb_near=0.2, fb_fallback=0.0):
|
||||
"""use_sub=False:不用子目标(sf=0);sub_override=(subs [B,M,6] 绝对关节角, n [B] 个数 或 need [B] bool):冷启动时用给定途经点代替子目标头;
|
||||
qp0 [B,6]:起点的上一帧(默认 = q0,即静止起步)。steps:MeanFlow 采样段数;z_scale:噪声缩放;
|
||||
select:consist(部署口径:冷启动价值前瞻、之后与上一条已提交计划的一致性)/ value(每次都价值前瞻)/ first(不选,取第 0 条)。
|
||||
@@ -191,7 +192,13 @@ def rollout(model, kin, tasks, device, K=8, safety=False, seed=0, max_sec=None,
|
||||
act, val, sub = model.sample_k(feat, K, z, steps=steps)
|
||||
inc = act.float().clamp(-1, 1) * astep
|
||||
if fb_gain > 0: # 实验(2026-10-20):目标反馈加在所有候选上(安全层也评估带反馈的候选)
|
||||
inc = inc + fb_gain * dls_steps(kin, qe, T, R, n=1)[:, :, None, :]
|
||||
fb = dls_steps(kin, qe, T, R, n=1)
|
||||
if fb_scale > 0: # 距离衰减:远离目标全增益,贴近目标减弱(减少过冲/刹停)
|
||||
dg, _ = goal_err(kin, qe, T, R)
|
||||
gdec = fb_gain * torch.clamp(dg / fb_scale, fb_near, 1.0)
|
||||
inc = inc + gdec[:, None, None, None] * fb[:, :, None, :]
|
||||
else:
|
||||
inc = inc + fb_gain * fb[:, :, None, :]
|
||||
if cold:
|
||||
need = sub[:, 12] > 0.5
|
||||
subs = q[:, None] + sub[:, :12].float().view(B, 2, 6) * 180
|
||||
@@ -240,6 +247,10 @@ def rollout(model, kin, tasks, device, K=8, safety=False, seed=0, max_sec=None,
|
||||
take = okk & ~ok_any
|
||||
chosen = torch.where(take[:, None, None], ck, chosen); chosen_k = torch.where(take, order[:, kk], chosen_k); ok_any |= okk
|
||||
commit = torch.where(ok_any[:, None, None], chosen, torch.zeros_like(chosen))
|
||||
if fb_gain > 0 and fb_fallback > 0: # 全拒时的兜底:半速朝目标走一步(须通过安全认证),避免原地停滞
|
||||
fb1 = dls_steps(kin, qe, T, R, n=1) * fb_fallback
|
||||
ok1 = kin.gaps(qe + fb1[:, 0], 0.5)['gm'].min(-1).values > 0
|
||||
commit = torch.where((~ok_any & ok1)[:, None, None], fb1.expand(-1, 3, -1), commit)
|
||||
brakes += (~ok_any).float()
|
||||
pick = chosen_k; committed = ok_any
|
||||
if near.any():
|
||||
|
||||
Reference in New Issue
Block a user