1

我正在做一个遗传编程项目,我需要能够将遗传程序(类 deap.creator.Individual)转换为字符串,更改一些内容(同时保持问题 100% 在语法上与 DEAP 一致),然后将其放回个体群体中以进行进一步进化。

但是,我只能使用 from_string 方法将字符串转换回 gp.PrimitiveTree 类。我看到的 creator.Individual 的唯一构造函数是盲目地生成整个种群或从现有的个体构造个体。没有任何方法可以仅从现有gp.PrimitiveTree 创建一个个体。

那么,有人知道我该怎么做吗?

注意:个人是自定义的,但在所有 DEAP 示例中都是标准的,并且是使用创建的

creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", gp.PrimitiveTree, fitness=creator.FitnessMax)
4

2 回答 2

2

经过许多小时后,我相信我已经弄清楚了。

所以,我对两个 DEAP 模块感到困惑:“创造者”和“工具箱”。为了让我用给定的 PrimitiveTree 创建一个人,我只需要这样做:

creator.Individual(myPrimativeTree)

不做的是:

toolbox.individual(myPrimativeTree)

因为它通常被设置为初始化程序本身,因此不接受参数。

我希望这可以在将来的某个时候为某人节省大量时间。

于 2016-11-25T05:15:27.110 回答
0

个人转字符串: str(individual)

为了从字符串创建个体:原始树具有类方法 from_string: https ://deap.readthedocs.io/en/master/api/gp.html#deap.gp.PrimitiveTree.from_string

在你的 Deap 进化中,要从字符串创建一个个体,你可以尝试类似的东西(注意使用创建者 vs 工具箱):

creator.Individual.from_string("add(IN1, IN2)", pset)

但是作为字符串的单个表达式需要像您执行 str(individual) 时那样,也就是在创建字符串时坚持您的 pset。因此,在我上面的示例字符串中,我相信您需要一个类似于以下内容的 pset:

pset = gp.PrimitiveSetTyped("MAIN", [float]*2, float, "IN")
pset.addPrimitive(operator.add, [float,float], float)
于 2020-12-10T23:10:44.470 回答