进化算法再现限制的机会

时间:2014-05-14 22:44:05

标签: python-2.7 evolutionary-algorithm

应该发生什么:

  1. 使用包含随机整数的属性创建一个随机的对象群体,所有对象都将以10的再现速度开始。(第16行)

  2. 对于所有具有"数字"的对象如果属性大于4,则将10添加到与该对象相关的chance_of_rep属性。(第21行)

  3. 基于" chance_of_rep"属性,决定是否重现后代。 (第36行)

  4. 每一代,每个成员年龄为1,如果年龄大于1,就杀死该成员。(第47行)

  5. 真正发生的事情:

    " chance_of_rep"属性将在50时达到最高,并且不会高于此值。为什么是这样? 除此之外,其他一切都是应有的(至少我是这么认为的,请提出任何看似错误的内容)。

    import random as r
    import os
    import sys
    import time
    from subprocess import call
    #call('color a', shell=True)
    class Entity(object):
        def __init__(self, number):
            self.number = number
            self.chance = 10
            self.age = 0
    class Fitness(object):
        def __init__(self, population):
            self.population = population
    
        def StartPopulation(self, pop, entities):
            for x in range(pop):
                entity = Entity(r.randint(3, 5))
                entities.append(entity)
    
        def FitnessMethod(self, entities):
    
            for x in entities:
                if x.number >= 5:
                    x.chance += 10
                else: 
                    x.chance += 0
    
                if x.chance > 100:
                    x.chance = 100
    
                else: 
                    x.chance += 0
    
    
        def Reproduce(self,entities):
    
            for x in entities:
                if r.randint(0, 100) < x.chance:    
                    random_children = r.randint(1, 3)
                    for a in range(random_children):    
                        entity = Entity(x.number)
                        entity.chance = x.chance
                        entities.append(entity)
                    x.age += 1
    
        def Aging(self, entities):
            for x in entities:
                if x.age >= 2:
                    entities.remove(x)          
    
    pop = r.randint(3, 5)
    entities = []
    Fitness = Fitness(pop)
    Fitness.StartPopulation(pop, entities)
    for x in entities:
        print x.number, x.chance
    print "~~~~~~~~~~~~~\n"
    raw_input()
    
    
    for x in range(30):
        Fitness.FitnessMethod(entities)
        Fitness.Reproduce(entities)
        Fitness.Aging(entities)
        for x in entities:
            print x.number, x.age, x.chance
        print "Generation_Mutation_Complete"
    raw_input()
    

    顺便说一句,这不是一个家庭作业,它是一个个人项目。

1 个答案:

答案 0 :(得分:0)

好吧,不用感谢oli CharlesWorth,我纠正了这个问题。 这是更正后的代码:

import random as r
import os
import sys
import time
from subprocess import call
#call('color a', shell=True)
class Entity(object):
    def __init__(self, number):
        self.number = number
        self.chance = 10
        self.age = 0
class Fitness(object):
    def __init__(self, population):
        self.population = population

    def StartPopulation(self, pop, entities):
        for x in range(pop):
            entity = Entity(r.randint(3, 5))
            entities.append(entity)

    def FitnessMethod(self, entities):

        for x in entities:
            if x.number >= 5:
                x.chance += 10
            else: 
                x.chance += 0

            if x.chance > 100:
                x.chance = 100

            else: 
                x.chance += 0


    def Reproduce(self,entities):
        x = entities[r.randint(0, (len(entities) - 1))]
        if r.randint(0, 100) < x.chance:    
            random_children = r.randint(1, 3)
            for a in range(random_children):    
                entity = Entity(x.number)
                entity.chance = x.chance
                entities.append(entity)
            x.age += 1

    def Aging(self, entities):
        for x in entities:
            if x.age >= 2:
                entities.remove(x)          

pop = r.randint(3, 5)
entities = []
Fitness = Fitness(pop)
Fitness.StartPopulation(pop, entities)
for x in entities:
    print x.number, x.chance
print "~~~~~~~~~~~~~\n"
raw_input()


for x in range(30):
    Fitness.FitnessMethod(entities)
    Fitness.Reproduce(entities)
    Fitness.Aging(entities)
    for x in entities:
        print x.number, x.age, x.chance
    print "Generation_Mutation_Complete"
print "Generation_Mutation_Complete"    
raw_input()