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 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=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
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, g_esn_real,act.sigmoid, g_esn_real_conn)) exp.initialize_cells() weight_matrix = exp.session.run(exp.get_connection("g_esn_conn").w) def adjacency2indices_values(adjacency_matrix): indices = np.argwhere(adjacency_matrix != 0) values = adjacency_matrix[np.where(adjacency_matrix != 0)] return indices, values indices, values = adjacency2indices_values(weight_matrix) G = nx.DiGraph()
import evodynamic.connection as connection width = 200 height = 150 exp = experiment.Experiment() g_ca = exp.add_group_cells(name="g_ca", amount=width * height) neighbors, center_idx = ca.create_count_neighbors_ca2d(3, 3) g_ca_bin = g_ca.add_binary_state(state_name='g_ca_bin') g_ca_bin_conn = ca.create_conn_matrix_ca2d('g_ca_bin_conn',width,height,\ neighbors=neighbors,\ center_idx=center_idx) exp.add_connection( "g_ca_conn", connection.WeightedConnection(g_ca_bin, g_ca_bin, act.game_of_life_func, g_ca_bin_conn)) exp.initialize_cells() # Animation import matplotlib.pyplot as plt import matplotlib.animation as animation fig = plt.figure() idx_anim = 0 im = plt.imshow(exp.get_group_cells_state("g_ca", "g_ca_bin")[:, 0].reshape( (height, width)), animated=True) plt.title('Step: 0')
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, np.arange(input_size))) 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)) g_ca_memory = exp.add_state_memory(g_ca_bin, memory_size) output_layer = exp.add_group_cells(name="output_layer", amount=output_layer_size) output_layer_real_state = output_layer.add_real_state( state_name='output_layer_real_state', stddev=0) ca_output_conn = randon_conn.create_xavier_connection("ca_output_conn", width * memory_size, output_layer_size) exp.add_trainable_connection( "output_conn",
neighbors=neighbors,\ center_idx=center_idx) output_layer = exp.add_group_cells(name="output_layer", amount=height) output_layer_real_state = output_layer.add_real_state( state_name='output_layer_real_state', stddev=0) ca_output_conn = randon_conn.create_xavier_connection("ca_output_conn", width * height, height) exp.add_connection( "input_conn", connection.IndexConnection(input_ca, g_ca_bin, np.arange(input_size))) exp.add_connection( "g_ca_conn", connection.WeightedConnection(g_ca_bin, g_ca_bin, act.game_of_life_func, g_ca_bin_conn)) exp.add_trainable_connection( "output_conn", connection.WeightedConnection(g_ca_bin, output_layer_real_state, act.sigmoid, ca_output_conn)) c_loss = tf.losses.mean_squared_error( labels=desired_output, predictions=exp.trainable_connections["output_conn"].output) exp.set_training(c_loss, 0.1) exp.initialize_cells() # Animation import matplotlib.pyplot as plt
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( "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.initialize_cells() # Animation import matplotlib.pyplot as plt import matplotlib.animation as animation fig = plt.figure() idx_anim = 0 im_ca = np.zeros((height_fig, width)) im_ca[0] = exp.get_group_cells_state("g_ca", "g_ca_bin")[:, 0]
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)] values = [1] * width dense_shape = [width, width] g_esn_real_conn = conn_custom.create_custom_sparse_matrix( 'g_esn_real_conn', indices, values, dense_shape) exp.add_connection( "g_esn_conn", connection.WeightedConnection(g_esn_real, g_esn_real, act.relu, g_esn_real_conn)) output_layer = exp.add_group_cells(name="output_layer", amount=output_layer_size) output_layer_real_state = output_layer.add_real_state( state_name='output_layer_real_state', stddev=0) esn_output_conn = conn_random.create_xavier_connection("esn_output_conn", width, output_layer_size) exp.add_trainable_connection( "output_conn", connection.WeightedConnection(g_esn_real, output_layer_real_state, act.sigmoid, esn_output_conn)) c_loss = tf.reduce_mean(
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) print("mean_pos", mean_pos) print("std_pos", std_pos) print("mean_neg", mean_neg) print("std_neg", std_neg) print("pos_neg_prop", genome[4]) print("sparsity", genome[5]) 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 = exp.get_monitor("g_ca", "g_ca_bin")[:,:,0] print("Execution time:", time.time()-start) exp.close()
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') g_esn_real_conn = conn_random.create_gaussian_matrix('g_ca_bin_conn',width, sparsity=0.95, is_sparse=True) 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, g_esn_real,act.stochastic_sigmoid, g_esn_real_conn)) exp.initialize_cells() weight_matrix = exp.session.run(exp.get_connection("g_esn_conn").w) G = nx.DiGraph() G.add_edges_from(weight_matrix[0]) pos_dict = {} for i in range(width): if i < input_size: pos_dict[i] = (0,i) pos = nx.spring_layout(G,pos=pos_dict, fixed=pos_dict.keys())