def set_circuit_size(self, new_size): MEMS_CTRNN.set_circuit_size(self, new_size) self.inp_alpha = np.full(7, 1.0, dtype=float) self.inp_beta = np.full(7, 0.0, dtype=float) self.out_alpha = np.full(2, 1.0, dtype=float) self.out_beta = np.full(2, 0.0, dtype=float) self.outputs = np.full(2, 0.0, dtype=float)
def test_CTRNN_load(self): c = MEMS_CTRNN() c.load('sample.ns') self.assertEqual(c.size, 14) self.assertEqual(c.mem_h, 2.6e-6) self.assertEqual(c.mem_rho, 2330) self.assertEqual(c.mem_ythr, -3e-5) self.assertEqual(int(c.taus[0]), 1) self.assertEqual(int(c.v_biases[0]), -3) self.assertEqual(int(c.hs[0]), 2) self.assertEqual(c.weights[13][0], 0)
def __init__(self, new_size=0, stability_acc=0.001, stability_hist_bucket=3, stability_min_iteration=7, stability_max_iteration=150): self.stability_acc = stability_acc self.stability_hist_bucket = stability_hist_bucket self.stability_min_iteration = stability_min_iteration self.stability_max_iteration = stability_max_iteration MEMS_CTRNN.__init__(self, new_size)
def euler_step_with_stability(self, step_size=None, use_dim_equation=False, save_detail=False, use_defelection_feedback=False, return_states_info=False): states_info = [] if save_detail is True: outfile = open('duration_analysis.csv', 'a') outfile_csv = csv.writer(outfile, delimiter=',', quotechar="'", quoting=csv.QUOTE_MINIMAL) a = [0] * self.stability_hist_bucket b = [0] * self.stability_hist_bucket l = self.stability_hist_bucket t = time.time() for i in range(self.stability_max_iteration): MEMS_CTRNN.euler_step(self, step_size, use_dim_equation, use_defelection_feedback) if save_detail is True: outfile_csv.writerow([ t, i, step_size, self.states[-2], self.states[-1], '-', a[(i - l) % l], b[(i - l) % l], '-', (i - l) % l, '-', a[(i - l) % l] - b[(i - l) % l], '-', a, b ]) if return_states_info is True: states_info.append(list(self.states)) if i >= self.stability_min_iteration and \ abs(a[(i - l) % l] - self.states[-2]) < self.stability_acc and \ abs(b[(i - l) % l] - self.states[-1]) < self.stability_acc: # print(i) break elif i >= l: a[(i - l) % l] = self.states[-2] b[(i - l) % l] = self.states[-1] if i >= 10: print(i) if save_detail is True: outfile.close() return states_info
def test_CTRNN_save(self): s_fname = 'sample2.ns' c = MEMS_CTRNN() c.load('sample.ns') c.save(s_fname) c2 = MEMS_CTRNN() c2.load(s_fname) self.assertEqual(c.size, c2.size) self.assertEqual(c.mem_h, c2.mem_h) self.assertEqual(c.mem_rho, c2.mem_rho) self.assertEqual(c.weights[13][0], c2.weights[13][0]) self.assertEqual(c.mem_ythr, c2.mem_ythr) os.remove(s_fname)
print('The MEMCTRN {} is stablized in iteration {} for '.format(t, i) + 'input1 = {}, input2 = {} and max_variation= {}'.format( i1, i2, max_variation)) return True elif i >= l: a[(i - l) % l] = c.states[-2] b[(i - l) % l] = c.states[-1] return False if __name__ == "__main__": f_name = 'sample_2n.ns' c = MEMS_CTRNN() c.load(f_name) c1 = MEMS_CTRNN() c1.load(f_name) c2 = MEMS_CTRNN() c2.load(f_name) c.print_model() c.print_model_abstract() mem_wm = 131675.65242702136 run_duration = 0.01 step_size = 1 / mem_wm with open('debug.csv', 'w') as fi:
def print_model_abstract(self): MEMS_CTRNN.print_model_abstract(self) self.print_vagent_variables()
def print_model(self): MEMS_CTRNN.print_model(self) self.print_vagent_variables()
import numpy as np import csv def gen_input(t): i1 = 80 if t > 200 else 0 i2 = 180 if t > 400 else 0 i2 = i2 if t < 800 else 0 return (i1, i2) if __name__ == "__main__": f_name = 'sample_2n.ns' c = MEMS_CTRNN() c.load(f_name) c.print_model() c.print_model_abstract() run_duration = 1000 step_size = 1 in1 = [] in2 = [] out1 = [] out2 = [] v_mem1 = [] v_mem2 = [] with open('debug.csv', 'w') as fi: