smbot/config.lua

70 lines
2.0 KiB
Lua

local function approx_cossim(dim)
return math.pow(1.521 * dim - 0.521, -0.5026)
end
local function intmap(x)
-- 0 -> 1.0
-- -1 -> 0.316
-- -2 -> 0.1
-- -3 -> 0.0316
-- -4 -> 0.01
-- etc.
return math.pow(10, x / 2)
end
local cfg = {
log_fn = 'log.csv', -- can be nil to disable logging.
defer_prints = true,
playable_mode = false,
start_big = false, --true
starting_lives = 0, --1
init_zeros = true, -- instead of he_normal noise or whatever.
frameskip = 4,
-- true greedy epsilon has both deterministic and det_epsilon set.
deterministic = false, -- use argmax on outputs instead of random sampling.
det_epsilon = false, -- take random actions with probability eps.
graycode = false,
epoch_trials = 64 * (7/8),
epoch_top_trials = 40 * (7/8), -- new with ARS.
unperturbed_trial = true, -- do a trial without any noise.
negate_trials = true, -- try pairs of normal and negated noise directions.
time_inputs = true, -- binary inputs of global frame count
-- ^ note that this now doubles the effective trials.
deviation = intmap(-3),
learning_rate = intmap(-4),
weight_decay = intmap(-6),
adamant = true, -- run steps through AMSgrad.
adam_b1 = math.pow(10, -1 / 15),
adam_b2 = math.pow(10, -1 / 100),
adam_eps = intmap(-8),
adam_debias = false,
cap_time = 222, --400
timer_loser = 1/2,
decrement_reward = false, -- bad idea, encourages mario to kill himself
playback_mode = false,
}
-- TODO: so, uhh..
-- what happens when playback_mode is true but unperturbed_trial is false?
cfg.epoch_top_trials = math.min(cfg.epoch_trials, cfg.epoch_top_trials)
cfg.eps_start = 1.0 * cfg.frameskip / 64
cfg.eps_stop = 0.1 * cfg.eps_start
cfg.eps_frames = 1000000
cfg.enable_overlay = cfg.playable_mode
cfg.enable_network = not cfg.playable_mode
return setmetatable(cfg, {
__index = function(t, n)
error("cannot use undeclared config '" .. tostring(n) .. "'", 2)
end
})