|
@@ -43,7 +43,7 @@ parser_evolve.add_argument('--pool-size', '-p', type=int, metavar='N',
|
43
|
43
|
default=10)
|
44
|
44
|
|
45
|
45
|
parser_evolve.add_argument('--pool-div', '-D', type=int, metavar='N',
|
46
|
|
- default=5,
|
|
46
|
+ default=2,
|
47
|
47
|
help='Each generation keep 1/N of the pool')
|
48
|
48
|
|
49
|
49
|
parser_evolve.add_argument('--prog-size', type=int, metavar='SIZE',
|
|
@@ -112,12 +112,15 @@ if 'pool_size' in args:
|
112
|
112
|
logger.info(msg % (generation, args.repeat_eval, args.turmit_count,
|
113
|
113
|
args.steps, args.pool_size))
|
114
|
114
|
genstart = time.time()
|
115
|
|
-
|
|
115
|
+
|
|
116
|
+ # Preparing work
|
116
|
117
|
works = []
|
117
|
118
|
for pid, prog in enumerate(progs):
|
118
|
119
|
for i in range(args.repeat_eval):
|
119
|
120
|
works.append((generation, pid, prog, i, args))
|
|
121
|
+ # running jobs
|
120
|
122
|
res = pool.imap(eval_prog, works)
|
|
123
|
+ # Processing results
|
121
|
124
|
scores = [0 for _ in range(len(progs))]
|
122
|
125
|
for pid, score in res:
|
123
|
126
|
scores[pid] += score
|
|
@@ -125,6 +128,7 @@ if 'pool_size' in args:
|
125
|
128
|
for i in range(len(progs))]
|
126
|
129
|
|
127
|
130
|
genstop = time.time()
|
|
131
|
+ # Displaying eval results
|
128
|
132
|
logger.info('Generation evaluating ended in %.2fs' % (genstop - genstart))
|
129
|
133
|
|
130
|
134
|
scores = sorted(scores, key=lambda x: x[0], reverse=True)
|
|
@@ -138,16 +142,19 @@ if 'pool_size' in args:
|
138
|
142
|
logprogs.flush()
|
139
|
143
|
logprogs.write('\n')
|
140
|
144
|
|
141
|
|
- keep_div = 2
|
|
145
|
+ # Split pool & mutate the one we kept
|
|
146
|
+ keep_div = args.pool_div
|
142
|
147
|
progs = []
|
143
|
148
|
for prog in [ prog for _, prog in scores[:len(scores)//keep_div]]:
|
144
|
149
|
progs.append(prog)
|
145
|
|
- for _ in range(keep_div - 1):
|
146
|
|
- progs.append(mutate(prog, force=True))
|
|
150
|
+ for cur_mut in range(keep_div - 1):
|
|
151
|
+ progs.append(mutate(prog, force=True, mutcount= 2**cur_mut))
|
147
|
152
|
if len(progs) >= args.pool_size:
|
148
|
153
|
break
|
149
|
154
|
if len(progs) >= args.pool_size:
|
150
|
155
|
break
|
|
156
|
+ for pid, prog in enumerate(progs):
|
|
157
|
+ logger.debug('P%d : %s' % (pid, str(prog)))
|
151
|
158
|
generation += 1
|
152
|
159
|
exit(0)
|
153
|
160
|
else:
|
|
@@ -173,7 +180,7 @@ else:
|
173
|
180
|
msg = 'Fractdim %.3f after %d steps in %.2fs (%dus per step)'
|
174
|
181
|
msg %= (w.fractdim(), args.steps,
|
175
|
182
|
stop - start,
|
176
|
|
- ((stop - start)*1000000)//args.steps)
|
|
183
|
+ ((stop - start)*1000000)//args.steps//args.turmit_count)
|
177
|
184
|
logger.info(msg)
|
178
|
185
|
|
179
|
186
|
w.save(args.output)
|