Beispiel #1
0
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
Beispiel #2
0
    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
Beispiel #4
0
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
Beispiel #5
0
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()
Beispiel #6
0
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')
Beispiel #7
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]
Beispiel #10
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(
Beispiel #11
0
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()
Beispiel #12
0
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())