experiment(reservoir): reduce warm-start weight to 0.1 for faster learning adaptation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user