Example #1
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
Example #2
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
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
Example #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
Example #5
0
""" 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,
Example #6
0
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]]
Example #7
0
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)))
Example #12
0
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)]
Example #13
0
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)))
Example #14
0
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")