37 lines
1020 B
Lua
37 lines
1020 B
Lua
-- power.lua: Power-law scheduler with configurable exponent
|
|
|
|
scheduler = {
|
|
name = "power",
|
|
display = "Power (p=2)",
|
|
description = "Power-law t^p, front-loaded",
|
|
params = {
|
|
{ key = "exponent", type = "slider", label = "Exponent",
|
|
default = 2.0, min = 0.5, max = 5.0, step = 0.1,
|
|
hint = "Higher values front-load more steps at high noise" },
|
|
},
|
|
}
|
|
|
|
function schedule(output, num_steps, shift)
|
|
local p = (params and params.exponent) or 2.0
|
|
for i = 0, num_steps - 1 do
|
|
local frac = i / num_steps
|
|
output[i] = (1.0 - frac) ^ p
|
|
end
|
|
clamp(output, num_steps)
|
|
apply_shift(output, num_steps, shift)
|
|
end
|
|
|
|
function apply_shift(ts, n, shift)
|
|
if shift == 1.0 then return end
|
|
for i = 0, n - 1 do
|
|
local t = ts[i]; ts[i] = shift * t / (1.0 + (shift - 1.0) * t)
|
|
end
|
|
end
|
|
|
|
function clamp(ts, n)
|
|
for i = 0, n - 1 do
|
|
if ts[i] < 1e-6 then ts[i] = 1e-6 end
|
|
if ts[i] > 1.0 then ts[i] = 1.0 end
|
|
end
|
|
end
|