def setUp(self): random.seed(2) self.DELTA = 1 self.names = [ "tests/eoinseed1.txt", "tests/eoinseed2.txt", "tests/eoinseed3.txt", "tests/eoinseed4.txt", "tests/eoinseed5.txt", "tests/eoinseed6.txt", "tests/eoinseed7.txt", "tests/eoinseed8.txt", "tests/eoinseed9.txt", "tests/eoinseed10.txt" ] self.grn = grn.GRN()
def test_eoin(self): sizes = [] final_concs = [] correct_sizes = [7, 8, 7, 7, 8, 9, 10, 10, 7, 8] correct_concs = [ 0.10536119562462604, 1.0785531576949638e-05, 0.96204392235109859, 0.036227250980492995, 0.14936626819446591, 0.0017180411368314544, 0.74527253618090816, 0.20216842837768173, 1.8597966179449688e-41, 9.8837209610607373e-11, 2.8433950003789704e-12, 3.7272818452249546e-19, 0.79783157161841423, 0.99999999990116273, 1.0605769176570928e-12, 0.43021628377545634, 1.8607359883012191e-14, 7.8687897480028881e-11, 0.10528617335121833, 0.99999999999998135, 1.1568225120729014e-75, 0.46449754279463745, 1.0, 1.0, 3.852020054491351e-50, 2.2676764109720152e-47, 1.2698664131258545e-50, 4.614598027941728e-51, 1.0230365114501557e-49, 0.96250388634805484, 0.10434327320808674, 9.8246257052620553e-11, 9.8246257052620553e-11, 0.89565672649717465, 0.015449167345545771, 9.8246257052620553e-11, 0.022046946306399435, 1.549088544201994e-51, 2.0653767133682643e-49, 3.1437911279343385e-51, 0.18145538980022971, 1.0, 5.5872364375449987e-50, 0.1892264857816604, 0.62931812441810986, 5.4289702573481519e-52, 0.00076655281898026532, 0.99999999960006059, 0.0021459130763556624, 9.9984846630215615e-11, 0.75450804442096187, 0.21977813174014549, 9.9984846630215615e-11, 9.9984846630215615e-11, 9.9984846630215615e-11, 0.022801357943556831, 0.016570752661809442, 0.006791886227358491, 0.012708024669514883, 0.0055977427316390221, 0.97053528744991513, 0.0022669597556181486, 9.3192992915059737e-11, 0.0061020387097514761, 3.4951165492265383e-08, 0.97942727275003505, 0.17202757039233571, 0.99999999989999022, 1.0000982013359345e-10, 0.00012387320936094268, 0.77259278064842241, 0.055248455240959803, 7.3205089211345301e-06, 4.4798299830043145e-05, 0.10714347255184113, 0.83990369807369525, 9.9719383174870601e-11, 0.16009630172686587, 5.2259906141012131e-126, 9.9719383174870601e-11, 0.89281172914832874 ] for name in self.names: self.grn = grn.GRN(delta=self.DELTA) self.grn.read_genome(name) self.grn.build_genes() self.grn.precalc_matrix() self.grn.regulate_matrix(2000) sizes.append(len(self.grn.conc_list)) for conc in self.grn.conc_list: final_concs.append(conc[-1]) for i in range(len(sizes)): self.assertEqual(sizes[i], correct_sizes[i]) for i in range(len(final_concs)): self.assertEqual(final_concs[i], correct_concs[i])
def test_miguel(self): concs = [] correct_concs = [ 2.4694881581878343e-12, 1.1537420071432216e-12, 2.3929814982520794e-37, 0.79999999999637683, 0.05, 0.05, 0.05, 0.05 ] self.grn = grn.GRN(1) self.grn.read_genome("tests/miguel_parsed.txt") self.grn.build_genes() self.grn.add_extra("EXTRA_A", 0.05, [0] * 32) self.grn.add_extra("EXTRA_B", 0.05, [1] * 32) self.grn.add_extra("EXTRA_C", 0.05, [0] * 16 + [1] * 16) self.grn.add_extra("EXTRA_D", 0.05, [1] * 16 + [0] * 16) self.grn.precalc_matrix() size = len(self.grn.conc_list) self.assertEqual(size, 8) self.grn.regulate_matrix(1000) for conc in self.grn.conc_list: concs.append(conc[-1]) for i in range(len(concs)): self.assertEquals(concs[i], correct_concs[i])
def run_grn(genome, delta): stabiter = 10000 / delta runiter = 1000 / delta completed = False results = None bh_total = 0 #run until delta stays above zero while not completed: regnet = grn.GRN(genome, delta) regnet.build_genes() regnet.add_extra("EXTRA_sineval", 0.0, [0]*32) results = [0] * len(regnet.genes) regnet.precalc_matrix() #build list of p-genes, quit if only 1 p gene p_genes = [ idx for idx, gn in enumerate(regnet.genes) if gn.gene_type == "P"] if len(p_genes) < 2: return [0],0 regnet.regulate_matrix(stabiter) # stabilise the grn # use sine as input value for grn onff = 0 for i in range(0, 50): if i % 10 == 0: if onff == 1: onff = 0 else: onff = 1 inputval = onff extra_vals = {'sineval':inputval} regnet.set_extras(extra_vals) regnet.regulate_matrix(runiter) samples = range(stabiter, (runiter*50)+stabiter, runiter) #only finish if it doesn't go below zero if regnet.below_zero == False: completed = True else: delta = delta - 1 stabiter = 10000 / delta runiter = 1000 / delta # read results from grn to calc fitness for p_gene in p_genes: fitness = 0 onff = 0 for j in range(0, 50): # if j % 10 == 0: # if onff == 1: # onff = 0 # else: # onff = 1 # target = onff idx, idy = p_gene, samples[int(j)] target = regnet.conc_list[-1][idy] signal = regnet.conc_list[idx][idy] # print "T", target, "S",regnet.conc_list[-1][idy] fitness += 1 - abs(target - signal) results[p_gene] += fitness return results, regnet.conc_list
def run_grn(genome, companies, delta): stabiter = 10000 / delta runiter = 1000 / delta completed = False grn = regnet.GRN(genome) grn.build_genes() train_results = [0] * grn.p_genes test_results = [0] * grn.p_genes bh_total = 0 for compid, data in enumerate(companies): while not completed: cash_total = 1000 cash_list = [] signal = [] buy_hold = 1000 / data['shareprice'][0] grn = regnet.GRN(genome, delta) grn.build_genes() grn.add_extra("EXTRA_priceearn", 0.0, [0]*32) grn.add_extra("EXTRA_pricebook", 0.0, [1]*32) grn.add_extra("EXTRA_beta", 0.0, [0]*16 +[1]*16) grn.add_extra("EXTRA_cashflow", 0.0, [1]*16 +[0]*16) grn.precalc_matrix() #build list of p-genes, quit if only 1 p gene p_genes = [ idx for idx, gn in enumerate(grn.genes) if gn.gene_type == "P"] if len(p_genes) < 2: return 0,0 grn.regulate_matrix(stabiter) # stabilise the grn # use compustat as GRN input for 60 months for month in range(60): extra_vals = {} for key in data: if not key == 'shareprice': extra_vals[key] = data[key][month] grn.set_extras(extra_vals) grn.regulate_matrix(runiter) samples = range(stabiter, (runiter*60)+stabiter, runiter) if grn.below_zero == False: completed = True else: delta = delta - 1 stabiter = 10000 / delta runiter = 1000 / delta print "lowering delta to", delta, "r",runiter,"s",stabiter for i, p_gene in enumerate(p_genes): cash_total = 1000 share_count = 0 invest = 0 for month in range(60): share_price = data['shareprice'][month] cash_total = (share_price*share_count) + cash_total cash_list.append(cash_total) idx, idy = p_gene, samples[month] signal.append(grn.conc_list[idx][idy]) invest = grn.conc_list[idx][idy] * cash_total cash_total = cash_total - invest share_count = invest / share_price final = (share_price*share_count) + cash_total if compid < 5: train_results[i] += final else: test_results[i] += final buy_hold = buy_hold * share_price bh_total += buy_hold bestidx = train_results.index(max(train_results)) return train_results[bestidx], test_results[bestidx]