fix bug in restore genome.

This commit is contained in:
wls2002
2024-05-31 19:43:14 +08:00
parent bc8267bad0
commit d6e9ff5d9a
4 changed files with 62 additions and 20 deletions

View File

@@ -56,6 +56,8 @@ class DefaultGenome(BaseGenome):
def restore(self, state, transformed):
seqs, nodes, u_conns = transformed
conns = flatten_conns(nodes, u_conns, C=self.max_conns)
# restore enable
conns = jnp.insert(conns, obj=2, values=1, axis=1)
return nodes, conns
def forward(self, state, inputs, transformed):

View File

@@ -57,6 +57,9 @@ class RecurrentGenome(BaseGenome):
def restore(self, state, transformed):
nodes, u_conns = transformed
conns = flatten_conns(nodes, u_conns, C=self.max_conns)
# restore enable
conns = jnp.insert(conns, obj=2, values=1, axis=1)
return nodes, conns
def forward(self, state, inputs, transformed):

View File

@@ -50,6 +50,11 @@ class Pipeline:
self.fetch_data = lambda data: data
else:
raise NotImplementedError
else:
if isinstance(problem, RLEnv):
assert not problem.record_episode, "record_episode must be False"
elif isinstance(problem, FuncFit):
assert not problem.return_data, "return_data must be False"
def setup(self, state=State()):
print("initializing")
@@ -90,6 +95,13 @@ class Pipeline:
self.problem.evaluate, in_axes=(None, 0, None, 0)
)(state, keys, self.algorithm.forward, pop_transformed)
# update population
pop_nodes, pop_conns = jax.vmap(self.algorithm.restore, in_axes=(None, 0))(
state, pop_transformed
)
state = state.update(pop_nodes=pop_nodes, pop_conns=pop_conns)
# update data for next generation
data = self.fetch_data(raw_data)
assert (
data.ndim == 3
@@ -119,9 +131,10 @@ class Pipeline:
# replace nan with -inf
fitnesses = jnp.where(jnp.isnan(fitnesses), -jnp.inf, fitnesses)
previous_pop = self.algorithm.ask(state)
state = self.algorithm.tell(state, fitnesses)
return state.update(randkey=randkey), fitnesses
return state.update(randkey=randkey), previous_pop, fitnesses
def auto_run(self, state):
print("start compile")
@@ -135,9 +148,7 @@ class Pipeline:
self.generation_timestamp = time.time()
previous_pop = self.algorithm.ask(state)
state, fitnesses = compiled_step(state)
state, previous_pop, fitnesses = compiled_step(state)
fitnesses = jax.device_get(fitnesses)

View File

@@ -7,8 +7,8 @@
"metadata": {
"collapsed": true,
"ExecuteTime": {
"end_time": "2024-05-30T11:40:55.584592400Z",
"start_time": "2024-05-30T11:40:53.016051600Z"
"end_time": "2024-05-31T09:01:41.824974900Z",
"start_time": "2024-05-31T09:01:39.138674100Z"
}
},
"outputs": [],
@@ -25,7 +25,7 @@
"outputs": [
{
"data": {
"text/plain": "((10, 5), (10, 4))"
"text/plain": "((5, 5), (5, 4))"
},
"execution_count": 2,
"metadata": {},
@@ -33,7 +33,7 @@
}
],
"source": [
"genome = DefaultGenome(num_inputs=3, num_outputs=2, max_nodes=10, max_conns=10)\n",
"genome = DefaultGenome(num_inputs=3, num_outputs=1, max_nodes=5, max_conns=5)\n",
"state = genome.setup()\n",
"key = jax.random.PRNGKey(0)\n",
"nodes, conns = genome.initialize(state, key)\n",
@@ -42,8 +42,8 @@
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2024-05-30T11:40:59.021858400Z",
"start_time": "2024-05-30T11:40:55.592593400Z"
"end_time": "2024-05-31T09:01:45.179170400Z",
"start_time": "2024-05-31T09:01:41.832976100Z"
}
},
"id": "89fb5cd0e77a028d"
@@ -54,7 +54,7 @@
"outputs": [
{
"data": {
"text/plain": "(2, 10, 10)"
"text/plain": "(Array([0, 1, 2, 4, 3], dtype=int32, weak_type=True),\n Array([[ 0. , -1.013169 , 1. , 0. , 0. ],\n [ 1. , -0.3775248 , 1. , 0. , 0. ],\n [ 2. , 0.7407059 , 1. , 0. , 0. ],\n [ 3. , -0.66817343, 1. , 0. , 0. ],\n [ 4. , 0.5336131 , 1. , 0. , 0. ]], dtype=float32, weak_type=True),\n Array([[[ nan, nan, nan, nan,\n 0.13149254],\n [ nan, nan, nan, nan,\n 0.02001922],\n [ nan, nan, nan, nan,\n -0.79229796],\n [ nan, nan, nan, nan,\n nan],\n [ nan, nan, nan, -0.57102853,\n nan]]], dtype=float32, weak_type=True))"
},
"execution_count": 3,
"metadata": {},
@@ -62,14 +62,14 @@
}
],
"source": [
"unflatten = unflatten_conns(nodes, conns)\n",
"unflatten.shape"
"transformed = genome.transform(state, nodes, conns)\n",
"transformed"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2024-05-30T11:40:59.472701700Z",
"start_time": "2024-05-30T11:40:59.021858400Z"
"end_time": "2024-05-31T09:01:45.729969500Z",
"start_time": "2024-05-31T09:01:45.178173400Z"
}
},
"id": "aaa88227bbf29936"
@@ -80,7 +80,7 @@
"outputs": [
{
"data": {
"text/plain": "(Array([[ 0. , 5. , 1. , -0.41923347],\n [ 1. , 5. , 1. , -3.1815007 ],\n [ 2. , 5. , 1. , 0.5184341 ],\n [ 5. , 3. , 1. , -1.9784615 ],\n [ 5. , 4. , 1. , 0.7132204 ],\n [ nan, nan, nan, nan],\n [ nan, nan, nan, nan],\n [ nan, nan, nan, nan],\n [ nan, nan, nan, nan],\n [ nan, nan, nan, nan]], dtype=float32, weak_type=True),\n Array([[ 0. , 5. , 1. , -0.41923347],\n [ 1. , 5. , 1. , -3.1815007 ],\n [ 2. , 5. , 1. , 0.5184341 ],\n [ 5. , 3. , 1. , -1.9784615 ],\n [ 5. , 4. , 1. , 0.7132204 ],\n [ nan, nan, nan, nan],\n [ nan, nan, nan, nan],\n [ nan, nan, nan, nan],\n [ nan, nan, nan, nan],\n [ nan, nan, nan, nan]], dtype=float32))"
"text/plain": "(Array([[ 0. , -1.013169 , 1. , 0. , 0. ],\n [ 1. , -0.3775248 , 1. , 0. , 0. ],\n [ 2. , 0.7407059 , 1. , 0. , 0. ],\n [ 3. , -0.66817343, 1. , 0. , 0. ],\n [ 4. , 0.5336131 , 1. , 0. , 0. ]], dtype=float32, weak_type=True),\n Array([[ 1. , 0. , 4. , 0.13149254],\n [ 1. , 1. , 4. , 0.02001922],\n [ 1. , 2. , 4. , -0.79229796],\n [ 1. , 4. , 3. , -0.57102853],\n [ 1. , nan, nan, nan]], dtype=float32))"
},
"execution_count": 4,
"metadata": {},
@@ -89,18 +89,44 @@
],
"source": [
"# single flatten\n",
"flatten = flatten_conns(nodes, unflatten, C=10)\n",
"conns, flatten"
"nodes, conns = genome.restore(state, transformed)\n",
"nodes, conns"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2024-05-30T11:41:00.308954100Z",
"start_time": "2024-05-30T11:40:59.469541500Z"
"end_time": "2024-05-31T09:01:46.660023600Z",
"start_time": "2024-05-31T09:01:45.724970700Z"
}
},
"id": "f2c65de38fdcff8f"
},
{
"cell_type": "code",
"execution_count": 7,
"outputs": [
{
"data": {
"text/plain": "Array([[ 1. , 3. , 0. , 1. , 4. ,\n 0.13149254],\n [ 1. , 3. , 1. , 1. , 4. ,\n 0.02001922],\n [ 1. , 3. , 2. , 1. , 4. ,\n -0.79229796],\n [ 1. , 3. , 4. , 1. , 3. ,\n -0.57102853],\n [ 1. , 3. , nan, 1. , nan,\n nan]], dtype=float32)"
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"conns = jnp.insert(conns, obj=3, values=1, axis=1)\n",
"conns"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2024-05-31T09:03:35.665080500Z",
"start_time": "2024-05-31T09:03:35.013654700Z"
}
},
"id": "10bcb665c32fb728"
},
{
"cell_type": "code",
"execution_count": 8,