From 8289488e13c524ca9576e954998ebe5a731e1ffd Mon Sep 17 00:00:00 2001 From: Davide Cappellini Date: Thu, 17 Sep 2026 08:44:47 +0200 Subject: [PATCH] experiment(reservoir): reduce warm-start weight to 0.1 for faster learning adaptation Co-Authored-By: Claude Sonnet 4.6 --- SNNBot_garage/src/reservoir.nim | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/SNNBot_garage/src/reservoir.nim b/SNNBot_garage/src/reservoir.nim index bf6ae4e..26920e2 100644 --- a/SNNBot_garage/src/reservoir.nim +++ b/SNNBot_garage/src/reservoir.nim @@ -11,7 +11,7 @@ type GridCell = object sumSin: float sumCos: float - count: int + count: float LeadGrid* = object cells: array[VPERP_BINS * DIST_BINS, GridCell] # 17 × 8 = 136 cells @@ -25,9 +25,9 @@ proc initLeadGrid*(): LeadGrid = let sinVal = clamp(vPerp / BULLET_SPEED, -1.0, 1.0) let offsetRad = arcsin(sinVal) let idx = vBin * DIST_BINS + dBin - result.cells[idx].sumSin = sin(offsetRad) - result.cells[idx].sumCos = cos(offsetRad) - result.cells[idx].count = 1 + result.cells[idx].sumSin = 0.1 * sin(offsetRad) + result.cells[idx].sumCos = 0.1 * cos(offsetRad) + result.cells[idx].count = 0.1 proc cellIndex(vPerp: float, distance: float): int {.inline.} = let vBin = clamp(int(vPerp + 8.5), 0, VPERP_BINS - 1) @@ -50,12 +50,12 @@ proc forward*(grid: var LeadGrid, vPerp, distance: float): float = let db = dBin + dd if vb < 0 or vb >= VPERP_BINS or db < 0 or db >= DIST_BINS: continue let c = grid.cells[vb * DIST_BINS + db] - if c.count == 0: continue + if c.count < 0.001: continue let w = if dv == 0 and dd == 0: 1.0 elif dv == 0 or dd == 0: 0.5 else: 0.25 - sinSum += w * c.sumSin / float(c.count) - cosSum += w * c.sumCos / float(c.count) + sinSum += w * c.sumSin / c.count + cosSum += w * c.sumCos / c.count totalW += w if totalW == 0.0: return -999.0 @@ -65,8 +65,8 @@ proc learn*(grid: var LeadGrid, vPerp, distance, correctOffset: float) = let idx = cellIndex(vPerp, distance) grid.cells[idx].sumSin += sin(degToRad(correctOffset)) grid.cells[idx].sumCos += cos(degToRad(correctOffset)) - inc grid.cells[idx].count + grid.cells[idx].count += 1.0 -proc totalCount*(grid: LeadGrid): int = +proc totalCount*(grid: LeadGrid): float = for c in grid.cells: result += c.count