首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python DEAP库,使用随机单词作为个体

Python DEAP库,使用随机单词作为个体
EN

Stack Overflow用户
提问于 2018-07-21 08:28:39
回答 1查看 641关注 0票数 0

我在试着更好的处理DEAP。我想做一个遗传算法,它将单词作为个体作为一个群体,它通过检查这些单词与给定的“最大单词”的距离(读:拼写)来最大化这一点。这是到目前为止我在文档中的示例中所做的工作

代码语言:javascript
复制
import random
from randomwordgenerator import randomwordgenerator

from deap import base
from deap import creator
from deap import tools

creator.create("FitnessMax", base.Fitness, weights=("hot",))
creator.create("Individual", str, fitness=creator.FitnessMax)

toolbox = base.Toolbox()
toolbox.register("attr_str", randomwordgenerator.generate_random_words)
toolbox.register("individual", tools.initRepeat, creator.Individual,
                 toolbox.attr_str, n=1)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)

ind = toolbox.individual()
print(ind)

我感到困惑的是,当我打印(Ind)时,我得到了以下输出

代码语言:javascript
复制
<generator object initRepeat.<locals>.<genexpr> at 0x10407d888>

但是,当我将代码更改为示例代码时(如下所示)

代码语言:javascript
复制
import random

from deap import base
from deap import creator
from deap import tools

IND_SIZE = 5

creator.create("FitnessMin", base.Fitness, weights=(-1.0, -1.0))
creator.create("Individual", list, fitness=creator.FitnessMin)

toolbox = base.Toolbox()
toolbox.register("attr_float", random.random)
toolbox.register("individual", tools.initRepeat, creator.Individual,
                 toolbox.attr_float, n=IND_SIZE)

ind1 = toolbox.individual()
print(ind1)

这是输出

代码语言:javascript
复制
[0.6047278872004169, 0.8976450330325899, 0.9795210255969901, 0.5752663675034192, 0.8511975930513275]

我真的很困惑,为什么我的示例不能只打印一个字符串,有人能对此有一些见解吗?不幸的是,他们没有单独使用字符串的示例,所以我正在尝试自己调试它,但我遇到了一段艰难的时期。任何帮助我们都将不胜感激

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-21 08:45:17

经过多次辩论,下面是关于为什么它不能工作的解释。Individual是使用基类str声明的,这对于您的意图和目的来说是很好的。但是,当您在工具箱中注册individual方法时,您将使用tools.initRepeat,它将生成器作为参数提供给容器。对于基于list类的个人来说,这是很好的,因为生成器随后会被评估并存储在列表中。但是,由于您的代码是基于str的,所以python执行的隐式转换只返回字符串"",而不会遍历生成器的内容来填充您的个人内容。由于DEAP提供的工具似乎不适合您的问题,我建议您编写自己的脚本来生成群体和/或个人。以下内容应能满足您的约束:

代码语言:javascript
复制
from randomwordgenerator.randomwordgenerator import generate_random_words

from deap import base
from deap import creator
from deap import tools

POP_SIZE = 10

creator.create("FitnessMax", base.Fitness, weights=(1,))
creator.create("Individual", str, fitness=creator.FitnessMax)

toolbox = base.Toolbox()
toolbox.register("attr_str", generate_random_words, n=1)

ind = creator.Individual(toolbox.attr_str())
pop = [creator.Individual(toolbox.attr_str()) for _ in range(POP_SIZE)]

print(ind)
print(pop)

这将作为随机单词的list生成一个群体,然后您可以对其进行评估。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51451815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档