add ipynb test for testing whether add node or add conn will not change the output for the network.
51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
from pipeline import Pipeline
|
|
from algorithm.neat import *
|
|
|
|
from problem.func_fit import XOR3d
|
|
from utils import ACT_ALL, AGG_ALL, Act, Agg
|
|
|
|
if __name__ == "__main__":
|
|
pipeline = Pipeline(
|
|
algorithm=NEAT(
|
|
species=DefaultSpecies(
|
|
genome=DefaultGenome(
|
|
num_inputs=3,
|
|
num_outputs=1,
|
|
max_nodes=50,
|
|
max_conns=100,
|
|
node_gene=DefaultNodeGene(
|
|
activation_default=Act.tanh,
|
|
# activation_options=(Act.tanh,),
|
|
activation_options=ACT_ALL,
|
|
aggregation_default=Agg.sum,
|
|
# aggregation_options=(Agg.sum,),
|
|
aggregation_options=AGG_ALL,
|
|
),
|
|
output_transform=Act.sigmoid, # the activation function for output node
|
|
mutation=DefaultMutation(
|
|
node_add=0.1,
|
|
conn_add=0.1,
|
|
node_delete=0,
|
|
conn_delete=0,
|
|
),
|
|
),
|
|
pop_size=100000,
|
|
species_size=20,
|
|
compatibility_threshold=2,
|
|
survival_threshold=0.01, # magic
|
|
),
|
|
),
|
|
problem=XOR3d(),
|
|
generation_limit=10000,
|
|
fitness_target=-1e-8,
|
|
)
|
|
|
|
# initialize state
|
|
state = pipeline.setup()
|
|
# print(state)
|
|
# run until terminate
|
|
state, best = pipeline.auto_run(state)
|
|
# show result
|
|
pipeline.show(state, best)
|
|
pipeline.save(state=state)
|