Exemple #1
0
class Organism(nx.DiGraph):
    def __init__(self, MetNet, inicial = False, control = None, ES = None):
        self.age = 0
        self.record = 'a'
        self.fitness = 0
        self.mother_record = 'a'
        self.species = 'a'
        food_list = range(Constants.food)

        
        if inicial: #verifica se a populacao eh inicial

            #talvez fosse util ter um dicionario que redireciona pra funcoes
            #dependendo do tipo de inicializacao - inicial ou mutacao - e
            #encapsular uma serie de coisas que por enquanto estao no __init__.

            self.chemistry = deepcopy(MetNet) 
            self.control = Control(inicial)   # cria um controle inicial -> genes ligados por acaso e independentemente
            self.change_environment_org(ES)  #agora seta a comida do controle e da quimica
            self.chemistry.update_reactions(self.control.switch_dict)   #manda sinal dos genes ligados para a rede metabolica
            self.biomass = Constants.division_threshold/2.0        #aqui eh a biomassa do organismo inicial.

        else: #caso a populacao seja gerada de uma mutacao...
            self.chemistry = deepcopy(MetNet)  
            self.control = control
            self.change_environment_org(ES)         #informa os recem-nascidos da situacao de comida...
            self.chemistry.update_reactions(self.control.switch_dict)
            self.biomass = Constants.division_threshold/2.0      #aqui deve ser a biomassa do organismo filho mutado.
            
    
    def change_environment_org(self, food_list):
        self.control.change_environment(food_list)
        self.chemistry.update_food(self.control.food_dict)

    def mutate(self, rate, MetNet, ES):

        DNAp = self.control.export_code()
        DNAm = mutate_DNA(DNAp, rate)
        control_son = Control(DNA = DNAm, mother = self.control)
        
        return Organism(MetNet, False, control_son, ES)
  

    def eval_fitness(self, futurelist):
        pass
#completar com os estados

on = [False, True, False, False, False, False, False, False, False, True, False]

fl = [on[j] for j in range(food)]
env_list = [[True, True], [True, False], [False, False], [False, True]]
period = len(env_list)

index = (env_list.index(fl) + 1)%period


mae = nx.Graph()


for i in range(len(listadenos)):
    mae.add_node(listadenos[i], {'on': on[i]})



control = Control(DNA = D, mother = mae)


for i in range(50):
    draw_BN(control, control.pos, listadenos) #control.genes_list nao inclui os intermediarios e eles ficam sem o involucro do no
    control.change_state()
    time.sleep(1)
    if i%4 == 3:
        control.change_environment(env_list[index])           #mudar aqui o metodo de atualizacao de comidas
        index = (index+1)%period  #rndm.randint(0,period - 1)

Exemple #3
0
class Organism(nx.DiGraph):
    def __init__(self, MetNet, met, reac, number_food, targets, gen, p, inicial = False, control = None):
        #quais sao as caracteristicas em comum entre um organismo gerado from scratch
        #e um organismo proveninente de uma mutacao? Isso tem que estar no __init__
        
        #self.chemistry = MetNet

        self.age = 0
        self.record = 'a'
        self.mother_record = 'a'

        self.number_targets = targets
        food_list = range(number_food)
        
        if inicial: #verifica se a populacao eh inicial
            react_list = [x + met for x in range(MetNet.number_reactions)]
             

            if gen > len(react_list):
                raise GeneNumberException('There are more genes than reactions to be controlled!')

            genes_list = food_list + sorted(rndm.sample(react_list, gen))

            #talvez fosse util ter um dicionario que redireciona pra funcoes
            #dependendo do tipo de inicializacao - inicial ou mutacao - e
            #encapsular uma serie de coisas que por enquanto estao no __init__.

            self.chemistry = self.clean_met_net(MetNet, genes_list, food_list)
##            print 'o dicionario inicial de chemis:'
##            print self.chemistry.node
            self.control = Control(number_food, met, genes_list, p, reac, inicial)
##            print 'dicionario inicial:'
##            print self.control.switch_dict
            self.biomass = self.chemistry.update_reactions(self.control.switch_dict)
##            print 'biomass_init'
##            print self.biomass
        else: #caso a populacao seja gerada de uma mutacao...
            self.control = control
            self.chemistry = self.clean_met_net(MetNet, control.genes_list, food_list)
            self.biomass = self.chemistry.update_reactions(self.control.switch_dict)
            

    def clean_met_net(self, MetNet, genes_list, food_list):
        #Verificar com mais calma se a delecao de targets nao afeta nada...
        chemis = deepcopy(MetNet)
        #sera que esse objeto vai receber as funcoes da classe MetabolicNetwork?

        for r in [x for x in MetNet.nodes() if MetNet.node[x]['Type'] == 'R']:
            if r not in [reac for reac in genes_list if reac not in food_list]:
                chemis.remove_node(r)
        #Alguns targets podem ser deletados nesse passo:
        chemis.remove_nodes_from([isol for isol in nx.isolates(chemis) if isol not in food_list])

        #chemis.remove_nodes_from([n for n in nx.isolates(chemis) if n not in food_list])????
        #Talvez tenha que verificar se food ou target molecules foram removidos?
        return chemis
    
    def change_environment_org(self, food_list):
        self.control.change_environment(food_list)
        self.chemistry.update_food(self.control.food_dict)

    def mutate(self, rate, MetNet):

        DNAp = self.control.export_code()
        DNAm = mutate_DNA(DNAp, rate)
        control_son = Control(MetNet.number_food, MetNet.number_metabolites, [], 0, MetNet.number_reactions, DNA = DNAm, mother = self.control)
        
        return Organism(MetNet, MetNet.number_metabolites, MetNet.number_reactions, MetNet.number_food, MetNet.number_targets, 0, 0, inicial = False, control = control_son)
    nx.draw_networkx_nodes(graph,positions, nodelist = listadenos, node_color=graph.colors,node_size=150)
    nx.draw_networkx_edges(graph,positions,alpha=0.3)
    plt.draw()

#completar com os estados

on = [True, True, False, True, True, True, False, False, True, False, False, False, False]

fl = [on[j] for j in range(food)]
env_list = [[True, True], [False, True], [True, True], [True, False], [True, True], [False, False]]
period = len(env_list)

index = (env_list.index(fl) + 1)%period


mae = nx.Graph()

for i in range(len(listadenos)):
    mae.add_node(listadenos[i], {'on': on[i]})

control = Control(DNA = D, mother = mae)

for i in range(50):
    draw_BN(control, control.pos, control.genes_list)
    control.change_state()
    time.sleep(1)
    if i%5 == 4:
        control.change_environment(env_list[index])
        index = (index+1)%period

Exemple #5
0
class Organism(nx.DiGraph):
    def __init__(self, MetNet, inicial = False, control = None, EnvironmentSituation = None):
        self.age = 0
        self.record = 'a'
        self.mother_record = 'a'
        self.species = 'a'
        self.metabolites = Constants.metabolites
        self.number_targets = Constants.targets
        food_list = range(Constants.food)

        
        if inicial: #verifica se a populacao eh inicial
            react_list = [x + self.metabolites for x in range(Constants.reactions)]
             

            if Constants.genes > len(react_list):
                raise GeneNumberException('There are more genes than reactions to be controlled!')

            genes_list = food_list + sorted(rndm.sample(react_list, Constants.genes))

            #talvez fosse util ter um dicionario que redireciona pra funcoes
            #dependendo do tipo de inicializacao - inicial ou mutacao - e
            #encapsular uma serie de coisas que por enquanto estao no __init__.

            self.chemistry = self.clean_met_net(MetNet, genes_list, food_list, EnvironmentSituation)
##            print 'o dicionario inicial de chemis:'
##            print self.chemistry.node
            self.control = Control(genes_list, inicial)
##            print 'dicionario inicial:'
##            print self.control.switch_dict
            self.chemistry.update_reactions(self.control.switch_dict)
            self.biomass = Constants.division_threshold/2.0        #aqui eh a biomassa do organismo inicial.
##            print 'biomass_init'
##            print self.biomass
        else: #caso a populacao seja gerada de uma mutacao...
            self.control = control
            self.chemistry = self.clean_met_net(MetNet, control.genes_list, food_list, EnvironmentSituation)
            self.chemistry.update_reactions(self.control.switch_dict)
            self.biomass = Constants.division_threshold/2.0      #aqui deve ser a biomassa do organismo filho mutado.
            

    def clean_met_net(self, MetNet, genes_list, food_list, EnvironmentSituation):
        #Verificar com mais calma se a delecao de targets nao afeta nada...
        chemis = deepcopy(MetNet)
        #sera que esse objeto vai receber as funcoes da classe MetabolicNetwork?

        for r in [x for x in MetNet.nodes() if MetNet.node[x]['Type'] == 'R']:
            if r not in [reac for reac in genes_list if reac not in food_list]:
                chemis.remove_node(r)
        #Alguns targets podem ser deletados nesse passo:
        chemis.remove_nodes_from([isol for isol in nx.isolates(chemis) if isol not in food_list])
        
        if EnvironmentSituation is not None:
            for f in range(Constants.food):
                chemis.node[f]['Flowing'] = EnvironmentSituation[f]

        #chemis.remove_nodes_from([n for n in nx.isolates(chemis) if n not in food_list])????
        #Talvez tenha que verificar se food ou target molecules foram removidos?
        return chemis
    
    def change_environment_org(self, food_list):
        self.control.change_environment(food_list)
        #print 'compare a lista e o dicionario:'
        #print food_list
        #print self.control.food_dict
        self.chemistry.update_food(self.control.food_dict)

    def mutate(self, rate, MetNet, EnvironmentSituation):

        DNAp = self.control.export_code()
        DNAm = mutate_DNA(DNAp, rate)
        control_son = Control(DNA = DNAm, mother = self.control)
        
        return Organism(MetNet, False, control_son, EnvironmentSituation)