fix(layout_optimizer): update arm_slider reach value and improve scene poll version handling

This commit is contained in:
yexiaozhou
2026-04-03 00:43:40 +08:00
parent 5b3f317867
commit 306b787aa7
3 changed files with 6 additions and 4 deletions

View File

@@ -78,7 +78,7 @@ class MockReachabilityChecker:
"elite_cs66": 0.914,
"elite_cs612": 1.304,
"elite_cs620": 1.800,
"arm_slider": 1.07, # 线性导轨臂body 2.14m × 0.35mreach ≈ half length
"arm_slider": 0.3, # 线性导轨臂:1.07 body 2.14m × 0.35mreach ≈ half length
}
# 未知型号回退臂展realistic default for lab-scale arms

View File

@@ -80,7 +80,7 @@ def _run_de(
best_vector = init_pop[best_idx].copy()
# Early stopping 跟踪
patience = 20
patience = 200
best_cost_history: list[float] = [best_cost]
for gen in range(1, maxiter + 1):
@@ -102,6 +102,8 @@ def _run_de(
# 默认 currenttobest1binmutant = target + F*(best - target) + F*(r1 - r2)
mutant = (
init_pop[i]
# add a scaled minimum to encourage exploration
+ f_val * 0.1 * (upper - lower) * rng.uniform(-1, 1, size=ndim)
+ f_val * (best_vector - init_pop[i])
+ f_val * (init_pop[r1] - init_pop[r2])
)

View File

@@ -1200,13 +1200,13 @@ loadDeviceCatalog().then(() => {
});
/* ── Scene Poller (demo agent) ─────────────── */
let _scenePollVersion = -1; // -1 = uninitialized, first poll sets baseline
let _scenePollVersion = 0;
setInterval(async () => {
try {
const res = await fetch('/scene/placements');
if (!res.ok) return;
const data = await res.json();
if (_scenePollVersion === -1) { _scenePollVersion = data.version; return; } // baseline on first poll
if (data.version < _scenePollVersion) _scenePollVersion = 0; // server restart
if (data.version <= _scenePollVersion) return;
_scenePollVersion = data.version;
const labW = parseFloat(document.getElementById('lab-w').value) || 4;