Files
tensorneat-mend/examples/brax/hopper_origin.py
wls2002 ee1a2a8271 This commit is related to issue: https://github.com/EMI-Group/tensorneat/issues/11
1. Add origin_node and origin_conn.
2. Change the behavior of crossover and mutation. Now, TensorNEAT will use all fix_attrs(include historical marker if it has one) as identifier for gene in crossover and distance calculation.
3. Other slightly change.
4. Add two related examples: xor_origin and hopper_origin
5. Add related test file.
2024-12-18 16:20:34 +08:00

50 lines
1.5 KiB
Python

from tensorneat.pipeline import Pipeline
from tensorneat.algorithm.neat import NEAT
from tensorneat.genome import DefaultGenome, OriginNode, OriginConn
from tensorneat.problem.rl import BraxEnv
from tensorneat.common import ACT, AGG
"""
Solving Hopper with OriginGene
See https://github.com/EMI-Group/tensorneat/issues/11
"""
if __name__ == "__main__":
pipeline = Pipeline(
algorithm=NEAT(
pop_size=1000,
species_size=20,
survival_threshold=0.1,
compatibility_threshold=1.0,
genome=DefaultGenome(
num_inputs=11,
num_outputs=3,
init_hidden_layers=(),
# origin node gene, which use the same crossover behavior to the origin NEAT paper
node_gene=OriginNode(
activation_options=ACT.tanh,
aggregation_options=AGG.sum,
response_lower_bound = 1,
response_upper_bound= 1, # fix response to 1
),
# use origin connection, which using historical marker
conn_gene=OriginConn(),
output_transform=ACT.tanh,
),
),
problem=BraxEnv(
env_name="hopper",
max_step=1000,
),
seed=42,
generation_limit=100,
fitness_target=5000,
)
# initialize state
state = pipeline.setup()
# print(state)
# run until terminate
state, best = pipeline.auto_run(state)