- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
TLDR:
如何使用DEAP进化基因型而不仅仅是基因,例如(Gene1, Gene2, ...)
或{'gene1':。 .., 'gene2':...}
一个最小的例子是创建 DEAP 的 OneMax 的演变例如,使用 (np.ndarray(10), np.ndarray(42))
的 Genotype,其中 Genotype[0]
仅与 Genotype[0 配合]
、...[1]
与 ...[1]
,整个 Genotype 可用于评估适应度。
在 Python 中 DEAP ,常见的用例是拥有一个“基因”,例如单个列表,可以对其进行交配、突变和评估适应性。
我的一般问题是,我想使用基因的异构列表/元组/字典,每个基因都有自己的类型,并且交配等功能仅由类型定义。
具体来说,我有一个“神经网络”,我想用它来表示
神经元参数的一个基因
以及一个网络结构+参数的基因。
类型(借用类型化语言的语法)可能是
NeuronGene :: np.ndarray(n)
NetworkGene :: np.ndarray((n, n))
这些数组是 structured numpy arrays ,具有各种键,例如: np.dtype([('a', int), ('b', float), ...])
,因此在 中的每个索引处NeuronGene
,我有一个类似于字典的参数,其键为 {'a':..., 'b':..., ...}
。如果这使问题变得过于复杂,我仍然很想看看如何拥有通用 np.ndarray
s 的基因型。
“基因型”可能类似于Individual::(NeuronGene, NetworkGene)
,以及
正确的mate
函数可能定义如下:
mate :: NeuronGene -> NeuronGene -> NeuronGene
mate :: NetworkGene -> NetworkGene -> NetworkGene
作为一个最小的例子,我尝试复制 DEAP 的 OneMax问题,但使用 2 个基因的基因型。因此,有 2 个不同大小的 np.ndarray,每个 np.ndarray 都试图分别最大化它们的总和。甚至通读DEAP's docs和 codebase ,我的代码不值得发布。
对于像这个最小示例这样的简单问题,当然您可以使用一个长度为 n + m
的基因,但在我的实际情况中,我有一个基因 (1D array, 2D array)
,而突变/交配对于该基因型中的每个个体基因来说意味着不同的东西。
我应该提到,我的 eval
函数只是解析为一个健身函数,尽管我认为正确的通用答案可以针对多个进行优化。
eval :: Genotype -> Float
# or
eval :: Genotype -> (Float, Float, ...)
最佳答案
我不确定我完全理解您的需要,但这可能会有所帮助:
1) 使用 dict 作为单独的容器,创建自定义的 initDict 函数
2)编写您的自定义字典版本的交配和个人评估函数,这些函数对个人的不同键执行不同的操作
下面是创建类似字典的随机数组个体并对其进行评估的示例。然后,您可以修改用于交配、突变等的 DEAP 基本算法,以便它们可以按照您想要的方式处理字典。
from deap import base
from deap import creator
from deap import tools
import numpy as np
def initDict(container, func, dim):
return container(zip(dim.keys(), map(lambda val: func(val), dim.values())))
def evalIndividual(individual):
return [individual[key].sum() for key in individual.keys()]
toolbox = base.Toolbox()
creator.create("FitnessMax", base.Fitness, weights=(1.0,1.0)) # fitness
creator.create("Individual", dict, fitness=creator.FitnessMax)
#function for generation arrays of random values and random size in each dimension (min 2, max 10) but fixed number of dimensions by the dim argument
toolbox.register("attr_random", lambda dim: np.random.rand(*np.random.randint(2,10,dim)))
toolbox.register("individual", initDict, creator.Individual, toolbox.attr_random, dim = dict(neuron = 2, network = 3))
ind = toolbox.individual()
ind.fitness.values = evalIndividual(ind)
print(ind.fitness)
关于python - 在Python的DEAP中,我怎样才能拥有一个具有多个基因的个体,例如 "Genotype"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49183439/
我正在运行一个遗传算法程序,可以在运行结束时找到最好的个体(hof[0]),但我想知道是哪一代产生的。是否有任何 hof[0] 属性可以帮助打印个人和创建它的一代。 我试着查看手册和谷歌寻找答案,但在
我正在使用通过 Python 的 DEAP 库实现的遗传算法。为了避免过早收敛,并强制探索特征空间,我希望第一代的变异概率很高。但是为了防止一旦它们被识别就偏离极值,我希望最后几代的突变概率更低。我如
我刚刚开始使用 DEAP。之前我用的是基于Matlab的GA,交叉变异后就是选择指定大小的较好个体,然后更新种群。但是我很难理解为什么在 DEAP 中,在交叉和变异过程之后需要评估具有无效适应度的个体
有没有什么方法可以使用 DEAP 来实现适应度共享/生态位选择? ?具体来说,我正在寻找定义的方法的实现 here (Goldberg 的健身分享)在 pdf 的第 98 页。如果您知道 DEAP 中
我想在适应度没有增加时停止遗传算法。 我在 python 中使用 DEAP 库。 通常,我有以下日志文件: gen nevals mean max 0
我正在与 DEAP 合作开发遗传算法。我在日志中得到了一些结果。日志的形状类似于字典的附录,如下所示。 {"gen": 0, "nevals": 200, "avg": 5678.1246563625
我正在尝试使用带有 DEAP 的遗传算法来解决与背包问题没有太大区别的优化问题。染色体由整数向量表示,约束是向量的总和必须等于某个数字 X。在适应度评估中处理这个问题似乎效率低下,因为交叉/突变相对较
我正在使用 DEAP 对数据表进行符号回归,即找到最适合数据的函数。不幸的是,我找不到以人类可读格式获取结果的方法。例如,如果我这样做 best_ind = tools.selBest(pop, 1)
我正在尝试将个人(gp 程序)转换为 python 代码。但是,当我调用 evaluate() 时出现错误,我不确定如何修复。我正在解决 symbolic regression问题,这些是我的原语。
我正在使用 DEAP 库来最大化一个指标,我注意到每当我重新启动算法(它应该创建一个随机的二进制值列表 - 1 和 0)时,它都会产生相同的初始值。 我开始怀疑并复制了他们的 basic DEAP e
我需要使用遗传算法和 PSO 最小化函数。 不同帖子建议使用DEAP (我正在使用 python)但我什至不知道如何开始。 我们可以考虑例如区间 i 上的 f i=arange(-10,10,0.1)
我有一个人具有以下基因: genes = [8, 2, 300, 2, 25, 10, -64, -61] 然后我应用以下高斯突变: toolbox.register("mutate", tools.
我在Python中使用DEAP并在那里使用遗传算法。以下是大小为100的属性(染色体)的定义。 toolbox.register("attr_bool", random.randint, 0, 1)
我在 python 中使用 DEAP 库来解决多目标优化问题。我想为此任务使用多个处理器;但是,我遇到了一些麻烦。 为了提供一些背景信息,我将 networkx 与 DEAP 结合使用我还定义了适应度
在 DEAP 算法 ( see documentation here ) 中,我注意到我们需要指定代数 (NGEN)。有人告诉我,如果帕累托曲线是平滑的,就可以实现收敛。 可以通过在统计数据中指定“平
我正在使用 DEAP 编写我的第一个进化算法。一切正常,但 MultiFlipBit 变异运算符除外。当我尝试改变树(个体)时,出现以下错误: File "Genetic_Programming.py
我有一个包含 2 个属性的列表,即成本和评级。我需要找到成本较低且评级较高的最佳航类。这是一个具有最小化和最大化目标的多对象优化问题。我如何在 DEAP 中实现这一点? 由于我对 DEAP 很陌生,所
使用了一段时间的遗传算法DEAP包。 我知道套路并得到了一些有效的结果。 但我想知道群体间适应度函数的变化。 使用stats 函数,我可以打印均值、标准差等作为输出。 手册上说logbook是用来保存
对于我正在从事的项目,我在 DEAP 中设置了 3 个不同的目标作为优化目标,an evolution framework based on Python . 它可以使用像NSGA-II这样的算法来处
我正在使用 Python 中的 DEAP 包编写一个程序,用于使用进化算法(特别是遗传算法)进行优化。 我需要在 python 中使用列表类型来创建染色体。这条染色体应该有五个不同范围的 float
我是一名优秀的程序员,十分优秀!