genetics.py 文件源码

python
阅读 20 收藏 0 点赞 0 评论 0

项目:HTM_experiments 作者: ctrl-z-9000-times 项目源码 文件源码
def mutate_standard(self, percent, population):
        """
        Randomly change some parameters.  The change in value uses the populations
        standard deviation.
        """
        def mutate_value(value, pop_values):
            if random.random() > percent:
                return value

            pop_values = [v for v in pop_values if v is not None]
            if len(np.unique(pop_values)) < 3:
                # Use alternative method when diversity is very low.
                return value * 1.5 ** (random.random()*2-1)
            else:
                std = np.std(pop_values)
                return float(random.gauss(value, std))

        for param in self.parameters:
            value      = getattr(self, param)
            pop_values = [getattr(indiv, param) for indiv in population]

            if value is None:
                continue # cant mutate.

            elif isinstance(value, Parameters):
                value.mutate_standard(percent, pop_values)

            elif isinstance(value, tuple):
                new_tup = []
                for index, value_indexed in enumerate(value):
                    pop_values_indexed = [v[index] for v in pop_values]
                    new_value = mutate_value(value_indexed, pop_values_indexed)
                    new_tup.append(new_value)
                setattr(self, param, tuple(new_tup))

            else:   # Mutate a floating point or boolean number.
                setattr(self, param, mutate_value(value, pop_values))
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号