-
Notifications
You must be signed in to change notification settings - Fork 7
/
config.go
128 lines (90 loc) · 4.06 KB
/
config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
// Copyright (c) 2023, The Emergent Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
// EnvConfig has config params for environment
// note: only adding fields for key Env params that matter for both Network and Env
// other params are set via the Env map data mechanism.
type EnvConfig struct {
// env parameters -- can set any field/subfield on Env struct, using standard TOML formatting
Env map[string]any
// environment run name
RunName string `default:"PosAcq_A100B50"`
// override the default number of blocks to run conditions with NBlocks
SetNBlocks bool
// number of blocks to run if SetNBlocks is true
NBlocks int
}
func (ec *EnvConfig) ShouldShow(field string) bool {
switch field {
case "NBlocks":
return ec.SetNBlocks
default:
return true
}
}
// ParamConfig has config parameters related to sim params
type ParamConfig struct {
// Rubicon parameters -- can set any field/subfield on Net.Rubicon params, using standard TOML formatting
Rubicon map[string]any
// network parameters
Network map[string]any
// Extra Param Sheet name(s) to use (space separated if multiple) -- must be valid name as listed in compiled-in params or loaded params
Sheet string
// extra tag to add to file names and logs saved from this run
Tag string
// user note -- describe the run params etc -- like a git commit message for the run
Note string
// Name of the JSON file to input saved parameters from.
File string `nest:"+"`
// Save a snapshot of all current param and config settings in a directory named params_<datestamp> (or _good if Good is true), then quit -- useful for comparing to later changes and seeing multiple views of current params
SaveAll bool `nest:"+"`
// for SaveAll, save to params_good for a known good params state. This can be done prior to making a new release after all tests are passing -- add results to git to provide a full diff record of all params over time.
Good bool `nest:"+"`
}
// RunConfig has config parameters related to running the sim
type RunConfig struct {
// use the GPU for computation -- only for testing in this model -- not faster
GPU bool `default:"false"`
// number of parallel threads for CPU computation -- 0 = use default
NThreads int `default:"0"`
// number of cycles per Theta phase (trial) -- either 200 or 300 (latter needed for motor actions)
ThetaCycles int `default:"300"`
// starting run number -- determines the random seed -- runs counts from there -- can do all runs in parallel by launching separate jobs with each run, runs = 1
Run int `default:"0"`
// total number of runs to do when running Train
NRuns int `default:"1" min:"1"`
}
// LogConfig has config parameters related to logging data
type LogConfig struct {
// stats to aggregate at higher levels
AggStats []string `default:"['DA','RewPred']"`
// if true, save final weights after each run
SaveWts bool
// if true, save block log to file, as .blk.tsv typically
Block bool `default:"true" nest:"+"`
// if true, save condition log to file, as .cnd.tsv typically
Cond bool `default:"true" nest:"+"`
// if true, save trial log to file, as .trl.tsv typically
Trial bool `default:"false" nest:"+"`
// if true, save network activation etc data from testing trials, for later viewing in netview
NetData bool
}
// Config is a standard Sim config -- use as a starting point.
type Config struct {
// specify include files here, and after configuration, it contains list of include files added
Includes []string
// open the GUI -- does not automatically run -- if false, then runs automatically and quits
GUI bool `default:"true"`
// log debugging information
Debug bool
// environment configuration options
Env EnvConfig `view:"add-fields"`
// parameter related configuration options
Params ParamConfig `view:"add-fields"`
// sim running related configuration options
Run RunConfig `view:"add-fields"`
// data logging related configuration options
Log LogConfig `view:"add-fields"`
}
func (cfg *Config) IncludesPtr() *[]string { return &cfg.Includes }