Skip to content

Commit e87ef9b

Browse files
committed
frogger clone - froggy
1 parent 05c8654 commit e87ef9b

5 files changed

Lines changed: 1013 additions & 0 deletions

File tree

pufferlib/config/ocean/froggy.ini

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
[base]
2+
package = ocean
3+
env_name = puffer_froggy
4+
policy_name = Policy
5+
rnn_name = Recurrent
6+
7+
[env]
8+
num_envs = 1024
9+
; MAX_MAP_WIDTH 50
10+
; MAX_MAP_HEIGHT 25
11+
width = 50
12+
height = 25
13+
episode_length = 500
14+
15+
[vec]
16+
num_envs = 1
17+
18+
[train]
19+
adam_beta1 = 0.4999999999999999
20+
adam_beta2 = 0.9999634443782168
21+
adam_eps = 0.00000001129702733166
22+
anneal_lr = True
23+
batch_size = auto
24+
bptt_horizon = 64
25+
checkpoint_interval = 200
26+
clip_coef = 0.4402948160236574
27+
compile = False
28+
compile_fullgraph = True
29+
compile_mode = max-autotune-no-cudagraphs
30+
cpu_offload = False
31+
data_dir = experiments
32+
device = cuda
33+
ent_coef = 0.20000000000000004
34+
gae_lambda = 0.9910692670389832
35+
gamma = 0.8023260815026797
36+
learning_rate = 0.1
37+
max_grad_norm = 1.6417573080756684
38+
max_minibatch_size = 32768
39+
minibatch_size = 32768
40+
name = leanke
41+
optimizer = muon
42+
precision = float32
43+
prio_alpha = 0.8165988326726807
44+
prio_beta0 = 0.9036752309658332
45+
project = puffer
46+
seed = 42
47+
torch_deterministic = True
48+
total_timesteps = 49999999.99999989
49+
update_epochs = 1
50+
use_rnn = True
51+
vf_clip_coef = 0.1
52+
vf_coef = 0.8649461801762395
53+
vtrace_c_clip = 2.550798689881474
54+
vtrace_rho_clip = 2.0697878060200265
55+
56+
[sweep]
57+
method = Protein
58+
metric = episode_return
59+
goal = maximize
60+
downsample = 10
61+
62+
[sweep.train.total_timesteps]
63+
distribution = log_normal
64+
min = 5e7
65+
max = 1e10
66+
mean = 1e8
67+
scale = time
68+
69+
[sweep.train.bptt_horizon]
70+
distribution = uniform_pow2
71+
min = 16
72+
max = 64
73+
mean = 64
74+
scale = auto
75+
76+
[sweep.train.minibatch_size]
77+
distribution = uniform_pow2
78+
min = 8192
79+
max = 65536
80+
mean = 32768
81+
scale = auto
82+
83+
[sweep.train.learning_rate]
84+
distribution = log_normal
85+
min = 0.00001
86+
mean = 0.01
87+
max = 0.1
88+
scale = 0.5
89+
90+
[sweep.train.ent_coef]
91+
distribution = log_normal
92+
min = 0.00001
93+
mean = 0.01
94+
max = 0.2
95+
scale = auto
96+
97+
[sweep.train.gamma]
98+
distribution = logit_normal
99+
min = 0.8
100+
mean = 0.98
101+
max = 0.9999
102+
scale = auto
103+
104+
[sweep.train.gae_lambda]
105+
distribution = logit_normal
106+
min = 0.6
107+
mean = 0.95
108+
max = 0.995
109+
scale = auto
110+
111+
[sweep.train.vtrace_rho_clip]
112+
distribution = uniform
113+
min = 0.0
114+
max = 5.0
115+
mean = 1.0
116+
scale = auto
117+
118+
[sweep.train.vtrace_c_clip]
119+
distribution = uniform
120+
min = 0.0
121+
max = 5.0
122+
mean = 1.0
123+
scale = auto
124+
125+
[sweep.train.clip_coef]
126+
distribution = uniform
127+
min = 0.01
128+
max = 1.0
129+
mean = 0.2
130+
scale = auto
131+
132+
[sweep.train.vf_clip_coef]
133+
distribution = uniform
134+
min = 0.1
135+
max = 5.0
136+
mean = 0.2
137+
scale = auto
138+
139+
[sweep.train.vf_coef]
140+
distribution = uniform
141+
min = 0.0
142+
max = 5.0
143+
mean = 2.0
144+
scale = auto
145+
146+
[sweep.train.max_grad_norm]
147+
distribution = uniform
148+
min = 0.0
149+
mean = 1.0
150+
max = 5.0
151+
scale = auto
152+
153+
[sweep.train.adam_beta1]
154+
distribution = logit_normal
155+
min = 0.5
156+
mean = 0.9
157+
max = 0.999
158+
scale = auto
159+
160+
[sweep.train.adam_beta2]
161+
distribution = logit_normal
162+
min = 0.9
163+
mean = 0.999
164+
max = 0.99999
165+
scale = auto
166+
167+
[sweep.train.adam_eps]
168+
distribution = log_normal
169+
min = 1e-14
170+
mean = 1e-8
171+
max = 1e-4
172+
scale = auto
173+
174+
[sweep.train.prio_alpha]
175+
distribution = logit_normal
176+
min = 0.1
177+
mean = 0.85
178+
max = 0.99
179+
scale = auto
180+
181+
[sweep.train.prio_beta0]
182+
distribution = logit_normal
183+
min = 0.1
184+
mean = 0.85
185+
max = 0.99
186+
scale = auto

pufferlib/ocean/froggy/binding.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#include "froggy.h"
2+
#define Env Froggy
3+
#include "../env_binding.h"
4+
5+
static int my_init(Env* env, PyObject* args, PyObject* kwargs) {
6+
env->width = unpack(kwargs, "width");
7+
env->height = unpack(kwargs, "height");
8+
env->episode_length = unpack(kwargs, "episode_length");
9+
return 0;
10+
}
11+
12+
static int my_log(PyObject* dict, Log* log) {
13+
assign_to_dict(dict, "lives_remaining", log->lives_remaining);
14+
assign_to_dict(dict, "crossings", log->crossings);
15+
assign_to_dict(dict, "episode_length", log->episode_length);
16+
assign_to_dict(dict, "episode_return", log->episode_return);
17+
// assign_to_dict(dict, "score", log->score);
18+
// assign_to_dict(dict, "n", log->n);
19+
return 0;
20+
}
21+
22+

pufferlib/ocean/froggy/froggy.c

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#include "froggy.h"
2+
#include <stdio.h>
3+
#include <stdlib.h>
4+
#include <time.h>
5+
#include "ncurses.h"
6+
7+
int main() {
8+
srand(time(NULL));
9+
Froggy env = {0};
10+
env.width = 20;
11+
env.height = 15;
12+
env.episode_length = 1000; // Set episode_length
13+
env.map_seed = time(NULL); // Initialize map seed
14+
15+
allocate(&env);
16+
c_reset(&env);
17+
c_render(&env);
18+
19+
while (1) {
20+
int action = froggy_ui_get_input();
21+
if (action == -1) {
22+
free_allocated(&env);
23+
c_close(&env);
24+
return 0;
25+
}
26+
env.actions[0] = action;
27+
c_step(&env);
28+
c_render(&env);
29+
}
30+
31+
return 0;
32+
}
33+

0 commit comments

Comments
 (0)