def set_up_evodynamics(self): fargs_list = [(a, ) for a in [self.ca_rule]] exp = experiment.Experiment(input_start=0, input_delay=self.reservoir_height, training_delay=5) g_ca = exp.add_group_cells(name="g_ca", amount=self.ca_width) neighbors, center_idx = ca.create_pattern_neighbors_ca1d(3) g_ca_bin = g_ca.add_binary_state(state_name='g_ca_bin', init="zeros") g_ca_bin_conn = ca.create_conn_matrix_ca1d('g_ca_bin_conn', self.ca_width, neighbors=neighbors, center_idx=center_idx) input_connection = exp.add_input(tf.float64, [self.ca_width], "input_connection") exp.add_connection( "input_conn", connection.IndexConnection(input_connection, g_ca_bin, np.arange(self.ca_width))) exp.add_connection( "g_ca_conn", connection.WeightedConnection(g_ca_bin, g_ca_bin, act.rule_binary_ca_1d_width3_func, g_ca_bin_conn, fargs_list=fargs_list)) # exp.add_monitor("g_ca", "g_ca_bin") exp.initialize_cells() # assign to self rather then return touple return exp, input_connection
def evaluate_genome(genome=[110], show_result = False): print(genome) gen_rule = [(r,) for r in genome] exp = experiment.Experiment() g_ca = exp.add_group_cells(name="g_ca", amount=width) neighbors, center_idx = ca.create_pattern_neighbors_ca1d(3) g_ca_bin = g_ca.add_binary_state(state_name='g_ca_bin') g_ca_bin_conn = ca.create_conn_matrix_ca1d('g_ca_bin_conn',width,\ neighbors=neighbors,\ center_idx=center_idx, is_wrapped_ca=True) exp.add_connection("g_ca_conn", connection.WeightedConnection(g_ca_bin,g_ca_bin, act.rule_binary_ca_1d_width3_func, g_ca_bin_conn, fargs_list=gen_rule)) exp.add_monitor("g_ca", "g_ca_bin", timesteps) exp.initialize_cells() start = time.time() exp.run(timesteps=timesteps) print("Execution time:", time.time()-start) exp.close() fitness, val_dict = evaluate_result(exp.get_monitor("g_ca", "g_ca_bin")[:,:,0]) return fitness, val_dict
def evaluate_genome(genome=6 * [0.5], filename=None): print(genome) # gen_rule = [(genome,)] exp = experiment.Experiment() g_ca = exp.add_group_cells(name="g_ca", amount=width) g_ca_bin = g_ca.add_binary_state(state_name='g_ca_bin') mean_pos = gene2mean(genome[0]) std_pos = 0.2 * mean_pos * genome[1] mean_neg = gene2mean(genome[2]) std_neg = 0.2 * mean_neg * genome[3] g_ca_bin_conn = random_net.create_esn_matrix('g_ca_bin_conn', width,\ mean_pos=mean_pos, std_pos=std_pos,\ mean_neg=mean_neg, std_neg=std_neg,\ pos_neg_prop=genome[4],\ sparsity=genome[5], is_sparse=genome[5]<0.9) exp.add_connection( "g_ca_conn", connection.WeightedConnection(g_ca_bin, g_ca_bin, act.stochastic_sigmoid, g_ca_bin_conn)) exp.add_monitor("g_ca", "g_ca_bin", timesteps) exp.initialize_cells() start = time.time() exp.run(timesteps=timesteps) #ca_result .append() print("Execution time:", time.time() - start) exp.close() fitness, val_dict = evaluate_result( exp.get_monitor("g_ca", "g_ca_bin")[:, :, 0]) if isinstance(filename, str): if ".csv" in filename: with open(filename, "a+", newline="") as f: wr = csv.writer(f, delimiter=";") if os.stat(filename).st_size == 0: wr.writerow(["genome", "fitness", "norm_ksdist_res", "norm_coef_res", "norm_unique_states",\ "norm_avalanche_pdf_size", "norm_linscore_res", "norm_R_res"]) wr.writerow([str(list(genome)), val_dict["fitness"], val_dict["norm_ksdist_res"],\ val_dict["norm_coef_res"], val_dict["norm_unique_states"],\ val_dict["norm_avalanche_pdf_size"],val_dict["norm_linscore_res"],\ val_dict["norm_R_res"]]) return fitness, val_dict
def evaluate_genome(genome=8*[0.5], filename=None): print(genome) gen_rule = [(genome,)] exp = experiment.Experiment() g_ca = exp.add_group_cells(name="g_ca", amount=width) neighbors, center_idx = ca.create_pattern_neighbors_ca1d(3) g_ca_bin = g_ca.add_binary_state(state_name='g_ca_bin') g_ca_bin_conn = ca.create_conn_matrix_ca1d('g_ca_bin_conn',width,\ neighbors=neighbors,\ center_idx=center_idx, is_wrapped_ca=True) exp.add_connection("g_ca_conn", connection.WeightedConnection(g_ca_bin,g_ca_bin, act.rule_binary_sca_1d_width3_func, g_ca_bin_conn, fargs_list=gen_rule)) exp.add_monitor("g_ca", "g_ca_bin", timesteps) exp.initialize_cells() start = time.time() exp.run(timesteps=timesteps) print("Execution time:", time.time()-start) exp.close() fitness, val_dict = evaluate_result(exp.get_monitor("g_ca", "g_ca_bin")[:,:,0]) if isinstance(filename, str): if ".csv" in filename: with open(filename, "a+", newline="") as f: wr = csv.writer(f, delimiter=";") if os.stat(filename).st_size == 0: wr.writerow(["genome", "fitness", "norm_ksdist_res", "norm_coef_res", "norm_unique_states",\ "norm_avalanche_pdf_size", "norm_linscore_res", "norm_R_res"]) wr.writerow([str(list(genome)), val_dict["fitness"], val_dict["norm_ksdist_res"],\ val_dict["norm_coef_res"], val_dict["norm_unique_states"],\ val_dict["norm_avalanche_pdf_size"],val_dict["norm_linscore_res"],\ val_dict["norm_R_res"]]) return fitness, val_dict
""" Simple animation of Echo State Network with custom connection matrix""" import tensorflow.compat.v1 as tf tf.disable_v2_behavior() import numpy as np import evodynamic.experiment as experiment import evodynamic.connection.custom as conn_custom import evodynamic.connection as connection import evodynamic.cells.activation as act import networkx as nx width = 100 input_size = width // 10 exp = experiment.Experiment() input_esn = exp.add_input(tf.float64, [input_size], "input_esn") g_esn = exp.add_group_cells(name="g_esn", amount=width) g_esn_real = g_esn.add_real_state(state_name='g_esn_bin') # Generate custom connection matrix conn_matrix = np.random.normal(loc=0.0, scale=0.4, size=(width, width)) conn_matrix[np.round(conn_matrix) == 0.0] = 0.0 g_esn_real_conn = conn_custom.create_custom_matrix('g_ca_bin_conn',conn_matrix) exp.add_connection("input_conn", connection.IndexConnection(input_esn,g_esn_real,np.arange(input_size))) exp.add_connection("g_esn_conn", connection.WeightedConnection(g_esn_real,
tf.disable_v2_behavior() import numpy as np import evodynamic.experiment as experiment import evodynamic.connection.cellular_automata as ca import evodynamic.connection as connection import evodynamic.connection.random as randon_conn import evodynamic.cells.activation as act width = 100 height_fig = 200 input_size = width // 2 output_layer_size = width memory_size = 5 exp = experiment.Experiment(input_start=5, input_delay=14, training_start=6, training_delay=0) input_ca = exp.add_input(tf.float64, [input_size], "input_ca") desired_output = exp.add_desired_output(tf.float64, [output_layer_size], "desired_output") g_ca = exp.add_group_cells(name="g_ca", amount=width) neighbors, center_idx = ca.create_pattern_neighbors_ca1d(3) g_ca_bin = g_ca.add_binary_state(state_name='g_ca_bin', init="zeros") g_ca_bin_conn = ca.create_conn_matrix_ca1d('g_ca_bin_conn',width,\ neighbors=neighbors,\ center_idx=center_idx) fargs_list = [(a, ) for a in [110]]
y_test_one_hot = np.zeros((y_test.max() + 1, y_test.size)) y_test_one_hot[y_test, np.arange(y_test.size)] = 1 y_test = y_test_one_hot epochs = 10 batch_size = 100 num_batches = int(np.ceil(x_train_num_images / batch_size)) width = 28 * 28 timesteps = 28 * 28 input_size = 1 output_layer_size = 10 image_num_pixels = x_train_image_shape[0] * x_train_image_shape[1] exp = experiment.Experiment(input_start=0, input_delay=0, training_start=timesteps - 1, training_delay=timesteps - 1, reset_cells_after_train=False, batch_size=batch_size) input_ca = exp.add_input(tf.float64, [input_size], "input_ca") desired_output = exp.add_desired_output(tf.float64, [output_layer_size], "desired_output") g_ca = exp.add_group_cells(name="g_ca", amount=width) neighbors, center_idx = ca.create_pattern_neighbors_ca1d(3) g_ca_bin = g_ca.add_binary_state(state_name='g_ca_bin', init="zeros") g_ca_bin_conn = ca.create_conn_matrix_ca1d('g_ca_bin_conn',width,\ neighbors=neighbors,\ center_idx=center_idx) fargs_list = [(a, ) for a in [170]]
""" Cellular automata 1D with input - animation """ import tensorflow.compat.v1 as tf tf.disable_v2_behavior() import evodynamic.experiment as experiment import evodynamic.connection.cellular_automata as ca import evodynamic.cells.activation as act import evodynamic.connection as connection import numpy as np width = 100 height_fig = 200 timesteps = 400 input_size = width // 2 exp = experiment.Experiment(input_start=5, input_delay=14) input_ca = exp.add_input(tf.float64, [input_size], "input_ca") g_ca = exp.add_group_cells(name="g_ca", amount=width) neighbors, center_idx = ca.create_pattern_neighbors_ca1d(3) g_ca_bin = g_ca.add_binary_state(state_name='g_ca_bin') g_ca_bin_conn = ca.create_conn_matrix_ca1d('g_ca_bin_conn',width,\ neighbors=neighbors,\ center_idx=center_idx) fargs_list = [(a, ) for a in [170]] exp.add_connection( "input_conn", connection.IndexConnection(input_ca, g_ca_bin, np.arange(input_size))) exp.add_connection(
x_train= ((x_train / 255.0) > 0.5).astype(np.int8) x_train = x_train.reshape(x_train.shape[0],-1) x_train = np.transpose(x_train) y_train_one_hot = np.zeros((y_train.max()+1, y_train.size)) y_train_one_hot[y_train,np.arange(y_train.size)] = 1 y_train = y_train_one_hot width = 100 input_size = 1 output_layer_size = 10 memory_size = 28*28 height_fig = memory_size exp = experiment.Experiment(input_start=0,input_delay=0,training_start=memory_size, training_delay=memory_size-1,reset_cells_after_train=True, reset_memories_after_train=True) input_ca = exp.add_input(tf.float64, [input_size], "input_ca") desired_output = exp.add_desired_output(tf.float64, [output_layer_size], "desired_output") g_ca = exp.add_group_cells(name="g_ca", amount=width) neighbors, center_idx = ca.create_pattern_neighbors_ca1d(3) g_ca_bin = g_ca.add_binary_state(state_name='g_ca_bin', init="zeros") g_ca_bin_conn = ca.create_conn_matrix_ca1d('g_ca_bin_conn',width,\ neighbors=neighbors,\ center_idx=center_idx) fargs_list = [(a,) for a in [110]] exp.add_connection("input_conn", connection.IndexConnection(input_ca,g_ca_bin,
""" Stochastic Cellular automata 1D with input - animation """ import tensorflow.compat.v1 as tf tf.disable_v2_behavior() import evodynamic.experiment as experiment import evodynamic.connection.cellular_automata as ca import evodynamic.cells.activation as act import evodynamic.connection as connection import numpy as np import matplotlib.pyplot as plt width = 100 timesteps = 400 input_size = width // 2 exp = experiment.Experiment(input_start=25, input_delay=24) input_ca = exp.add_input(tf.float64, [input_size], "input_ca") g_ca = exp.add_group_cells(name="g_ca", amount=width) neighbors, center_idx = ca.create_pattern_neighbors_ca1d(3) g_ca_bin = g_ca.add_binary_state(state_name='g_ca_bin') g_ca_bin_conn = ca.create_conn_matrix_ca1d('g_ca_bin_conn',width,\ neighbors=neighbors,\ center_idx=center_idx) """ Best 2 80;4.375510397876782;{'norm_ksdist_res': 0.9613162536023352, 'norm_coef_res': 1.6377095314393233, 'norm_unique_states': 1.0, 'norm_avalanche_pdf_size': 0.9659114597767141, 'norm_linscore_res': 0.8704469695084798, 'norm_R_res': 0.7277920719335422, 'fitness': 4.375510397876782}; [0.39422172047670734, 0.09472197628905793, 0.2394927250526252, 0.4084554505943707, 0.0, 0.7302038703441202, 0.9150343715586952, 1.0] """
number_of_resovoirs = 4 resovoir_width = 20 iterations_between_input = 4 input_locations = np.random.randint(resovoir_width, size=number_of_resovoirs) input_true_locations = [] for i in range(len(input_locations)): input_true_locations.append((i * resovoir_width) + (input_locations[i])) width = number_of_resovoirs * resovoir_width height_fig = 200 timesteps = 200 input_stream = np.ones(5, dtype=int) exp = experiment.Experiment(input_delay=0, training_delay=5) g_ca = exp.add_group_cells(name="g_ca", amount=width) neighbors, center_idx = ca.create_pattern_neighbors_ca1d(3) g_ca_bin = g_ca.add_binary_state(state_name='g_ca_bin', init="zeros") g_ca_bin_conn = ca.create_conn_matrix_ca1d('g_ca_bin_conn',width,\ neighbors=neighbors,\ center_idx=center_idx) input_connection = exp.add_input(tf.float64, [width], "input_connection") fargs_list = [(a, ) for a in [30]] exp.add_connection( "input_conn", connection.IndexConnection(input_connection, g_ca_bin, np.arange(width)))
y_test_one_hot = np.zeros((y_test.max() + 1, y_test.size)) y_test_one_hot[y_test, np.arange(y_test.size)] = 1 y_test = y_test_one_hot epochs = 10 batch_size = 100 num_batches = int(np.ceil(x_train_num_images / batch_size)) width = 28 * 28 input_size = 28 * 28 output_layer_size = 10 image_num_pixels = x_train_image_shape[0] * x_train_image_shape[1] exp = experiment.Experiment(input_start=0, input_delay=0, training_start=0, training_delay=0, reset_cells_after_train=True, batch_size=batch_size) input_esn = exp.add_input(tf.float64, [input_size], "input_esn") desired_output = exp.add_desired_output(tf.float64, [output_layer_size], "desired_output") g_esn = exp.add_group_cells(name="g_esn", amount=width) g_esn_real = g_esn.add_real_state(state_name='g_esn_real') exp.add_connection( "input_conn", connection.IndexConnection(input_esn, g_esn_real, np.arange(width))) indices = [[i, i] for i in range(width)]
import tensorflow.compat.v1 as tf tf.disable_v2_behavior() import evodynamic.experiment as experiment import evodynamic.connection.cellular_automata as ca import evodynamic.cells.activation as act import evodynamic.connection as connection import numpy as np import matplotlib.pyplot as plt width = 100 timesteps = 400 input_size = width // 2 batch_size = 2 exp = experiment.Experiment(input_start=25, input_delay=24, batch_size=batch_size) input_ca = exp.add_input(tf.float64, [input_size], "input_ca") g_ca = exp.add_group_cells(name="g_ca", amount=width) neighbors, center_idx = ca.create_pattern_neighbors_ca1d(3) g_ca_bin = g_ca.add_binary_state(state_name='g_ca_bin') g_ca_bin_conn = ca.create_conn_matrix_ca1d('g_ca_bin_conn',width,\ neighbors=neighbors,\ center_idx=center_idx) fargs_list = [(a, ) for a in [204]] exp.add_connection( "input_conn", connection.IndexConnection(input_ca, g_ca_bin, np.arange(input_size)))
x_train = np.transpose(x_train) y_train_one_hot = np.zeros((y_train.max() + 1, y_train.size)) y_train_one_hot[y_train, np.arange(y_train.size)] = 1 y_train = y_train_one_hot width = 28 * 28 timesteps = 28 * 28 input_size = 1 output_layer_size = 10 image_num_pixels = x_train_image_shape[0] * x_train_image_shape[1] height_fig = timesteps exp = experiment.Experiment(input_start=0, input_delay=0, training_start=timesteps - 1, training_delay=timesteps - 1, reset_cells_after_train=True) input_ca = exp.add_input(tf.float64, [input_size], "input_ca") desired_output = exp.add_desired_output(tf.float64, [output_layer_size], "desired_output") g_ca = exp.add_group_cells(name="g_ca", amount=width) neighbors, center_idx = ca.create_pattern_neighbors_ca1d(3) g_ca_bin = g_ca.add_binary_state(state_name='g_ca_bin', init="zeros") g_ca_bin_conn = ca.create_conn_matrix_ca1d('g_ca_bin_conn',width,\ neighbors=neighbors,\ center_idx=center_idx) fargs_list = [(a, ) for a in [170]]
""" Cellular automata 1D in batch - simulation plot """ import evodynamic.experiment as experiment import evodynamic.connection.cellular_automata as ca import evodynamic.cells.activation as act import evodynamic.connection as connection import matplotlib.pyplot as plt width = 100 timesteps = 400 batch_size = 4 exp = experiment.Experiment(batch_size=batch_size) g_ca = exp.add_group_cells(name="g_ca", amount=width) neighbors, center_idx = ca.create_pattern_neighbors_ca1d(3) g_ca_bin = g_ca.add_binary_state(state_name='g_ca_bin') g_ca_bin_conn = ca.create_conn_matrix_ca1d('g_ca_bin_conn',width,\ neighbors=neighbors,\ center_idx=center_idx) fargs_list = [(a, ) for a in [110]] exp.add_connection( "g_ca_conn", connection.WeightedConnection(g_ca_bin, g_ca_bin, act.rule_binary_ca_1d_width3_func, g_ca_bin_conn, fargs_list=fargs_list)) exp.add_monitor("g_ca", "g_ca_bin")