overhaul presets system
This commit is contained in:
parent
49dfcfe5b3
commit
ebc494fb60
2 changed files with 207 additions and 163 deletions
180
config.lua
180
config.lua
|
@ -1,7 +1,7 @@
|
||||||
local preset = rawget(_G, 'preset')
|
local preset = rawget(_G, 'preset')
|
||||||
preset = preset ~= nil and preset ~= '' and preset or 'ars'
|
preset = preset ~= nil and preset ~= '' and preset or 'ars'
|
||||||
|
|
||||||
local common_cfg = {
|
local defaults = {
|
||||||
-- read-only modes:
|
-- read-only modes:
|
||||||
playable_mode = false,
|
playable_mode = false,
|
||||||
playback_mode = false,
|
playback_mode = false,
|
||||||
|
@ -45,6 +45,7 @@ local common_cfg = {
|
||||||
deviation = 1.0,
|
deviation = 1.0,
|
||||||
unperturbed_trial = true, -- perform an extra trial without any noise.
|
unperturbed_trial = true, -- perform an extra trial without any noise.
|
||||||
-- this is good for logging, so i'd recommend it.
|
-- this is good for logging, so i'd recommend it.
|
||||||
|
epoch_trials = 50,
|
||||||
graycode = false, -- for ARS.
|
graycode = false, -- for ARS.
|
||||||
negate_trials = true, -- try pairs of normal and negated noise directions.
|
negate_trials = true, -- try pairs of normal and negated noise directions.
|
||||||
-- AKA antithetic sampling. note that this doubles the number of trials.
|
-- AKA antithetic sampling. note that this doubles the number of trials.
|
||||||
|
@ -57,173 +58,23 @@ local common_cfg = {
|
||||||
sigma_decay = 0.0, -- for SNES, xNES.
|
sigma_decay = 0.0, -- for SNES, xNES.
|
||||||
}
|
}
|
||||||
|
|
||||||
local cfg
|
local presets = require("presets")
|
||||||
if preset == 'snes' then
|
|
||||||
|
|
||||||
cfg = {
|
|
||||||
es = 'snes',
|
|
||||||
|
|
||||||
log_fn = 'logs-snes.csv',
|
|
||||||
params_fn = 'params-snes.txt',
|
|
||||||
|
|
||||||
starting_lives = 1,
|
|
||||||
min_time = 300,
|
|
||||||
timer_loser = 1.0,
|
|
||||||
|
|
||||||
epoch_trials = 100,
|
|
||||||
negate_trials = false,
|
|
||||||
|
|
||||||
deviation = 1.0,
|
|
||||||
min_refresh = 0.2,
|
|
||||||
|
|
||||||
param_rate = 0.5,
|
|
||||||
sigma_rate = 0.1,
|
|
||||||
param_decay = 0.02, -- note: multiplied by its std, and param_rate.
|
|
||||||
sigma_decay = 0.01, -- note: multiplied by sigma_rate.
|
|
||||||
}
|
|
||||||
|
|
||||||
elseif preset == 'snes2' then
|
|
||||||
|
|
||||||
cfg = {
|
|
||||||
es = 'snes',
|
|
||||||
|
|
||||||
log_fn = 'logs-snes2.csv',
|
|
||||||
params_fn = 'params-snes2.txt',
|
|
||||||
|
|
||||||
start_big = true,
|
|
||||||
min_time = 300,
|
|
||||||
timer_loser = 1.0,
|
|
||||||
|
|
||||||
score_multiplier = 0,
|
|
||||||
|
|
||||||
init_zeros = true,
|
|
||||||
|
|
||||||
reduce_tiles = true,
|
|
||||||
bias_out = false,
|
|
||||||
|
|
||||||
deterministic = false,
|
|
||||||
|
|
||||||
deviation = 0.5,
|
|
||||||
negate_trials = false,
|
|
||||||
min_refresh = 0.5,
|
|
||||||
|
|
||||||
epoch_trials = 100,
|
|
||||||
|
|
||||||
param_rate = 1.0,
|
|
||||||
sigma_rate = 0.01,
|
|
||||||
param_decay = 0.02,
|
|
||||||
sigma_decay = 0.01,
|
|
||||||
}
|
|
||||||
|
|
||||||
elseif preset == 'xnes' then
|
|
||||||
|
|
||||||
cfg = {
|
|
||||||
es = 'xnes',
|
|
||||||
|
|
||||||
log_fn = 'logs-xnes.csv',
|
|
||||||
params_fn = 'params-xnes.txt',
|
|
||||||
|
|
||||||
start_big = true,
|
|
||||||
min_time = 300,
|
|
||||||
timer_loser = 1.0,
|
|
||||||
|
|
||||||
score_multiplier = 0,
|
|
||||||
|
|
||||||
init_zeros = true,
|
|
||||||
|
|
||||||
reduce_tiles = true,
|
|
||||||
bias_out = false,
|
|
||||||
|
|
||||||
deterministic = false,
|
|
||||||
|
|
||||||
deviation = 0.5,
|
|
||||||
negate_trials = false,
|
|
||||||
|
|
||||||
epoch_trials = 50,
|
|
||||||
|
|
||||||
param_rate = 1.0,
|
|
||||||
sigma_rate = 0.01,
|
|
||||||
covar_rate = 0.01,
|
|
||||||
}
|
|
||||||
|
|
||||||
elseif preset == 'xnes2' then
|
|
||||||
|
|
||||||
cfg = {
|
|
||||||
es = 'xnes',
|
|
||||||
|
|
||||||
log_fn = 'logs-xnes2.csv',
|
|
||||||
params_fn = 'params-xnes2.txt',
|
|
||||||
|
|
||||||
start_big = true,
|
|
||||||
min_time = 300,
|
|
||||||
timer_loser = 1.0,
|
|
||||||
|
|
||||||
score_multiplier = 0,
|
|
||||||
|
|
||||||
init_zeros = true,
|
|
||||||
|
|
||||||
reduce_tiles = true,
|
|
||||||
bias_out = false,
|
|
||||||
|
|
||||||
deterministic = false,
|
|
||||||
|
|
||||||
deviation = 1.0,
|
|
||||||
negate_trials = true, --false,
|
|
||||||
|
|
||||||
epoch_trials = 10, --50,
|
|
||||||
|
|
||||||
param_rate = 0.5,
|
|
||||||
sigma_rate = 0.04,
|
|
||||||
covar_rate = 0.04,
|
|
||||||
param_decay = 0.004,
|
|
||||||
sigma_decay = 0.00128,
|
|
||||||
}
|
|
||||||
|
|
||||||
elseif preset == 'ars' then
|
|
||||||
|
|
||||||
cfg = {
|
|
||||||
es = 'ars',
|
|
||||||
epoch_top_trials = 20 * 2,
|
|
||||||
ars_lips = false,
|
|
||||||
|
|
||||||
log_fn = 'logs-ars.csv',
|
|
||||||
params_fn = 'params-ars.txt',
|
|
||||||
|
|
||||||
start_big = true,
|
|
||||||
min_time = 300,
|
|
||||||
timer_loser = 1.0,
|
|
||||||
|
|
||||||
bias_out = false,
|
|
||||||
|
|
||||||
deterministic = false,
|
|
||||||
|
|
||||||
graycode = false,
|
|
||||||
deviation = 0.1,
|
|
||||||
negate_trials = false,
|
|
||||||
|
|
||||||
epoch_trials = 25 * 2,
|
|
||||||
|
|
||||||
param_rate = 1.0,
|
|
||||||
param_decay = 0.0025,
|
|
||||||
}
|
|
||||||
|
|
||||||
elseif preset == 'play' then
|
|
||||||
|
|
||||||
cfg = {
|
|
||||||
playable_mode = true,
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
error("invalid preset: "..tostring(preset))
|
|
||||||
|
|
||||||
|
for _, cfg in pairs(presets) do
|
||||||
|
local parent = defaults
|
||||||
|
if cfg.parent ~= nil then
|
||||||
|
parent = presets[cfg.parent]
|
||||||
|
assert(parent, "no such parent preset: "..tostring(cfg.parent))
|
||||||
end
|
end
|
||||||
|
setmetatable(cfg, {__index=parent})
|
||||||
|
end
|
||||||
|
|
||||||
|
local cfg = presets[preset]
|
||||||
|
assert(cfg, "invalid preset: "..tostring(preset))
|
||||||
|
|
||||||
-- TODO: so, uhh..
|
-- TODO: so, uhh..
|
||||||
-- what happens when playback_mode is true but unperturbed_trial is false?
|
-- what happens when playback_mode is true but unperturbed_trial is false?
|
||||||
|
|
||||||
setmetatable(cfg, {__index=common_cfg}) -- gets overridden later.
|
|
||||||
|
|
||||||
if cfg.es == 'ars' then
|
if cfg.es == 'ars' then
|
||||||
if cfg.param_rate == nil then cfg.param_rate = cfg.base_rate end
|
if cfg.param_rate == nil then cfg.param_rate = cfg.base_rate end
|
||||||
else
|
else
|
||||||
|
@ -232,9 +83,12 @@ end
|
||||||
if cfg.sigma_rate == nil then cfg.sigma_rate = cfg.base_rate end
|
if cfg.sigma_rate == nil then cfg.sigma_rate = cfg.base_rate end
|
||||||
if cfg.covar_rate == nil then cfg.covar_rate = cfg.sigma_rate end
|
if cfg.covar_rate == nil then cfg.covar_rate = cfg.sigma_rate end
|
||||||
|
|
||||||
|
local parent = getmetatable(cfg).__index
|
||||||
|
|
||||||
setmetatable(cfg, {
|
setmetatable(cfg, {
|
||||||
__index = function(t, n)
|
__index = function(t, n)
|
||||||
if common_cfg[n] ~= nil then return common_cfg[n] end
|
if parent ~= nil and parent[n] ~= nil then return parent[n] end
|
||||||
|
if n == 'name' then return nil end
|
||||||
if n == 'log_fn' then return nil end
|
if n == 'log_fn' then return nil end
|
||||||
if n == 'params_fn' then return nil end
|
if n == 'params_fn' then return nil end
|
||||||
if n == 'stats_fn' then return nil end
|
if n == 'stats_fn' then return nil end
|
||||||
|
|
190
presets.lua
Normal file
190
presets.lua
Normal file
|
@ -0,0 +1,190 @@
|
||||||
|
-- these are all still very experimental,
|
||||||
|
-- but they should at least give you a head-start.
|
||||||
|
local presets = {}
|
||||||
|
|
||||||
|
local function make_preset(cfg)
|
||||||
|
local name = cfg.name
|
||||||
|
if name ~= nil then
|
||||||
|
cfg.log_fn = cfg.log_fn or 'logs-'..name..'.csv'
|
||||||
|
cfg.params_fn = cfg.params_fn or 'params-'..name..'.txt'
|
||||||
|
end
|
||||||
|
presets[name] = cfg
|
||||||
|
return cfg
|
||||||
|
end
|
||||||
|
|
||||||
|
make_preset{
|
||||||
|
name = 'snes',
|
||||||
|
|
||||||
|
es = 'snes',
|
||||||
|
|
||||||
|
starting_lives = 1,
|
||||||
|
min_time = 300,
|
||||||
|
timer_loser = 1.0,
|
||||||
|
|
||||||
|
epoch_trials = 100,
|
||||||
|
negate_trials = false,
|
||||||
|
|
||||||
|
deviation = 1.0,
|
||||||
|
min_refresh = 0.2,
|
||||||
|
|
||||||
|
param_rate = 0.5,
|
||||||
|
sigma_rate = 0.1,
|
||||||
|
param_decay = 0.02,
|
||||||
|
sigma_decay = 0.01,
|
||||||
|
}
|
||||||
|
|
||||||
|
make_preset{
|
||||||
|
name = 'snes2',
|
||||||
|
|
||||||
|
es = 'snes',
|
||||||
|
|
||||||
|
start_big = true,
|
||||||
|
min_time = 300,
|
||||||
|
timer_loser = 1.0,
|
||||||
|
|
||||||
|
score_multiplier = 0,
|
||||||
|
|
||||||
|
init_zeros = true,
|
||||||
|
|
||||||
|
reduce_tiles = true,
|
||||||
|
bias_out = false,
|
||||||
|
|
||||||
|
deterministic = false,
|
||||||
|
|
||||||
|
deviation = 0.5,
|
||||||
|
negate_trials = false,
|
||||||
|
min_refresh = 0.5,
|
||||||
|
|
||||||
|
epoch_trials = 100,
|
||||||
|
|
||||||
|
param_rate = 1.0,
|
||||||
|
sigma_rate = 0.01,
|
||||||
|
param_decay = 0.02,
|
||||||
|
sigma_decay = 0.01,
|
||||||
|
}
|
||||||
|
|
||||||
|
make_preset{
|
||||||
|
name = 'xnes',
|
||||||
|
|
||||||
|
es = 'xnes',
|
||||||
|
|
||||||
|
start_big = true,
|
||||||
|
min_time = 300,
|
||||||
|
timer_loser = 1.0,
|
||||||
|
|
||||||
|
score_multiplier = 0,
|
||||||
|
|
||||||
|
init_zeros = true,
|
||||||
|
|
||||||
|
reduce_tiles = true,
|
||||||
|
bias_out = false,
|
||||||
|
|
||||||
|
deterministic = false,
|
||||||
|
|
||||||
|
deviation = 0.5,
|
||||||
|
negate_trials = false,
|
||||||
|
|
||||||
|
epoch_trials = 50,
|
||||||
|
|
||||||
|
param_rate = 1.0,
|
||||||
|
sigma_rate = 0.01,
|
||||||
|
covar_rate = 0.01,
|
||||||
|
}
|
||||||
|
|
||||||
|
make_preset{
|
||||||
|
name = 'xnes2',
|
||||||
|
|
||||||
|
es = 'xnes',
|
||||||
|
|
||||||
|
log_fn = 'logs-xnes4.csv',
|
||||||
|
params_fn = 'params-xnes4.txt',
|
||||||
|
|
||||||
|
start_big = true,
|
||||||
|
min_time = 300,
|
||||||
|
timer_loser = 1.0,
|
||||||
|
|
||||||
|
score_multiplier = 0,
|
||||||
|
|
||||||
|
init_zeros = true,
|
||||||
|
|
||||||
|
reduce_tiles = true,
|
||||||
|
bias_out = false,
|
||||||
|
|
||||||
|
deterministic = false,
|
||||||
|
|
||||||
|
deviation = 1.0,
|
||||||
|
negate_trials = true, --false,
|
||||||
|
|
||||||
|
epoch_trials = 10, --50,
|
||||||
|
|
||||||
|
param_rate = 0.5,
|
||||||
|
sigma_rate = 0.04,
|
||||||
|
covar_rate = 0.04,
|
||||||
|
param_decay = 0.004,
|
||||||
|
sigma_decay = 0.00128,
|
||||||
|
}
|
||||||
|
|
||||||
|
make_preset{
|
||||||
|
name = 'xnes3',
|
||||||
|
|
||||||
|
es = 'xnes',
|
||||||
|
|
||||||
|
log_fn = 'logs-xnes5b.csv',
|
||||||
|
params_fn = 'params-xnes5b.txt',
|
||||||
|
|
||||||
|
start_big = true,
|
||||||
|
timer_loser = 1.0,
|
||||||
|
|
||||||
|
score_multiplier = 0,
|
||||||
|
|
||||||
|
init_zeros = true,
|
||||||
|
|
||||||
|
reduce_tiles = true,
|
||||||
|
bias_out = false,
|
||||||
|
|
||||||
|
deterministic = false,
|
||||||
|
|
||||||
|
deviation = 0.1207,
|
||||||
|
negate_trials = true,
|
||||||
|
|
||||||
|
epoch_trials = 10,
|
||||||
|
|
||||||
|
param_rate = 0.5,
|
||||||
|
sigma_rate = 0.16,
|
||||||
|
covar_rate = 0.04,
|
||||||
|
param_decay = 0.004, -- this should be ok now that it's mul by sigma.
|
||||||
|
sigma_decay = 0.00128, -- this might be okay... but watch out.
|
||||||
|
}
|
||||||
|
|
||||||
|
make_preset{
|
||||||
|
name = 'ars',
|
||||||
|
|
||||||
|
es = 'ars',
|
||||||
|
epoch_top_trials = 20 * 2,
|
||||||
|
ars_lips = false,
|
||||||
|
|
||||||
|
start_big = true,
|
||||||
|
min_time = 300,
|
||||||
|
timer_loser = 1.0,
|
||||||
|
|
||||||
|
bias_out = false,
|
||||||
|
|
||||||
|
deterministic = false,
|
||||||
|
|
||||||
|
graycode = false,
|
||||||
|
deviation = 0.1,
|
||||||
|
negate_trials = false,
|
||||||
|
|
||||||
|
epoch_trials = 25 * 2,
|
||||||
|
|
||||||
|
param_rate = 1.0,
|
||||||
|
param_decay = 0.0025,
|
||||||
|
}
|
||||||
|
|
||||||
|
make_preset{
|
||||||
|
name = 'play',
|
||||||
|
|
||||||
|
playable_mode = true,
|
||||||
|
}
|
||||||
|
|
||||||
|
return presets
|
Loading…
Add table
Reference in a new issue