首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DEAP突变函数接收无序参数

DEAP突变函数接收无序参数
EN

Stack Overflow用户
提问于 2021-08-31 19:43:26
回答 1查看 163关注 0票数 0

我很难让deap.tools.mutUniformInt变异函数起作用。为了解决这个问题,我将示例/ga/onemax.py的第62行改为

代码语言:javascript
复制
toolbox.register("mutate", tools.mutFlipBit, indpb=0.05)

代码语言:javascript
复制
toolbox.register("mutate", tools.mutUniformInt, 0, 1, indpb=0.05)

onemax.py示例现在失败了:

代码语言:javascript
复制
C:\Users\mshiv\DEAP>python onemax.py
Start of evolution
  Evaluated 300 individuals
-- Generation 1 --
Traceback (most recent call last):
  File "C:\Users\mshiv\DEAP\onemax.py", line 161, in <module>
    main()
  File "C:\Users\mshiv\DEAP\onemax.py", line 128, in main
    toolbox.mutate(mutant)
  File "C:\Users\mshiv\AppData\Local\Programs\Python\Python39\lib\site-packages\deap\tools\mutation.py", line 159, in mutUniformInt
    size = len(individual)
TypeError: object of type 'int' has no len()

这两个变异器都应该对一个个体进行操作,这在onemax.py中被定义为一个列表,那么为什么mutFlipBit要工作,但是mutUniformInt似乎接收单个参数为int,而不是list?

在DEAP代码中穿插时,我发现mutUniformInt接收参数的顺序是无序的,即它们被传入为(低、向上、个体、indpb),而函数本身被定义为

def mutUniformInt(个人、低、向上、索引):

我是不是把这个突变函数记错了?

我修改的onemax示例的来源:

https://github.com/DEAP/deap/blob/master/examples/ga/onemax.py

EN

回答 1

Stack Overflow用户

发布于 2021-09-01 15:47:26

NVM -在这里找到了答案:

https://groups.google.com/g/deap-users/c/4sw2_Al4YFI/m/EvUiq70IBAAJ

正确的语法应该是:

代码语言:javascript
复制
toolbox.register("mutate", tools.mutUniformInt, low=0, up=1, indpb=0.05)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69004533

复制
相关文章

相似问题

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