示例#1
0
 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()
示例#2
0
    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])
示例#3
0
    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])
示例#4
0
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
示例#5
0
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]