标签: deap

如何使用Deap最小化函数?

我需要使用遗传算法和PSO最小化函数.

不同的帖子建议使用DEAP(我正在使用python),但我甚至不懂如何开始.

我们可以考虑例如区间i上的f

i=arange(-10,10,0.1)
def f(x):
    return x*sin(x)
Run Code Online (Sandbox Code Playgroud)

如何使用DEAP最小化此功能?

python mathematical-optimization genetic-algorithm deap

9
推荐指数
2
解决办法
8423
查看次数

python DEAP遗传算法多核速度

我正在使用Python的DEAP pacakge,我希望多核我的代码,我使用http://deap.gel.ulaval.ca/doc/dev/tutorials/distribution.html上的教程成功地使用多处理来完成它.

我的问题如下:使用8个核心,理论上我获得了多少加速?我问的原因是因为我想决定我可以在与单核版本相同的时间内运行多少个人和几代人.我的代码用来运行大约200秒,有8个内核,现在需要大约0.5秒(这是400倍的加速).我可以假设任何事情都会加速400倍吗?我知道这很复杂,但非常感谢你的帮助.

一般来说,如果有人可以提供帮助,我想了解多重化如何改变计算流程.它是否只是针对每一代在不同核心上对每个人的评估进行映射?还是它并行运行几代?如果您知道我可以阅读的任何文档,请告诉我.

我没有提供代码示例,因为它似乎没有必要,因为这是一个非常高级的问题.

python multiprocessing deap

7
推荐指数
1
解决办法
2434
查看次数

DEAP 中无效体能的重要性是什么?

我刚刚开始使用 DEAP。之前我用的是基于Matlab的GA,交叉变异后就是选择指定大小的较好个体,然后更新种群。但是我很难理解为什么在 DEAP 中,在交叉和变异过程之后需要评估具有无效适应度的个体:

invalid_ind = [ind for ind in offspring if not ind.fitness.valid]
fitnesses = map(toolbox.evaluate, invalid_ind)
for ind, fit in zip(invalid_ind, fitnesses):
    ind.fitness.values = fit
Run Code Online (Sandbox Code Playgroud)

我尝试删除这些代码,但似乎算法永远不会收敛。甚至我也没有看到那些可以更新人口/后代的东西,那么它们有什么用呢。提前致谢!!!

python genetic-algorithm deap

7
推荐指数
1
解决办法
1247
查看次数

Python:networkx:如何使节点大小自动扩展以适合标签

我正在使用 deap 符号回归示例问题中的这段代码,图形显示正常,但我希望节点扩展为圆角矩形以自动适应文本。(我不想只是通过反复试验来指定节点大小)。我该怎么做?

# show tree
import matplotlib.pyplot as plt
import networkx

nodes, edges, labels = gp.graph(bests[0])
graph = networkx.Graph()
graph.add_nodes_from(nodes)
graph.add_edges_from(edges)
pos = networkx.graphviz_layout(graph, prog="dot")

plt.figure(figsize=(7,7))
networkx.draw_networkx_nodes(graph, pos, node_size=900, node_color="w")
networkx.draw_networkx_edges(graph, pos)
networkx.draw_networkx_labels(graph, pos, labels)
plt.axis("off")
plt.show()
Run Code Online (Sandbox Code Playgroud)

networkx deap

6
推荐指数
2
解决办法
4606
查看次数

Python CMA-ES算法可解决用户定义的功能和约束

我正在努力用python 创建CMA-ES优化算法的简单示例。使用CMA-ES算法x**2 + 2*y**2 -4*x*y - 0.5*y,在约束-2<x<2和约束下最优化功能的最简便方法是什么-1<2*(x**2)*y<1

我查看了DEAP库,但无法进行凝聚力的尝试。我发现他们的文档不够直观。我也研究了cma软件包,但是我不清楚如何实现约束。

python algorithm optimization genetic deap

6
推荐指数
1
解决办法
1546
查看次数

Deap python 包:创建具有不同范围和整数和浮点数混合的个体

我正在尝试使用 DEAP 来最大化函数。

我了解如何使用基本示例进行操作:

toolbox.register("attr_bool", random.randint, 0, 1)
toolbox.register("individual", tools.initRepeat, creator.Individual, 
    toolbox.attr_bool, 100)
Run Code Online (Sandbox Code Playgroud)

它创建了 100 个随机值或 0 或 1。然后你继续创建一个种群并变异......

例如,当您有两个参数时,如何构建总体:

parameter 1 integer with range [0,1] 
parameter 2 float with range [0,2]
Run Code Online (Sandbox Code Playgroud)

然后创建一个结合两个随机采样参数的个体?或对于具有任意步长值的参数 2 样本,例如 0.25。

python deap

5
推荐指数
1
解决办法
1939
查看次数

DEAP工具箱:考虑突变和交叉算子中不同类型和范围的基因

我正在研究遗传算法的实现,并且正在使用 DEAP 工具箱。我编写了一个初始化染色体的代码,它们的第一个基因是 [0.01, 2048] 范围内的浮点数,第二个基因又是 [0.0001, 10] 范围内的浮点数,最后三个基因是布尔值。这是我的代码:

toolbox.register("attr_flt1", random.uniform, 0.01, 2048)
toolbox.register("attr_flt2", random.uniform, 0.0001, 10)
toolbox.register("attr_bool", random.randint, 0, 1)
enter ctoolbox.register("individual", tools.initCycle, creator.Individual,
             (toolbox.attr_flt1, toolbox.attr_flt2, toolbox.attr_bool, toolbox.attr_bool, toolbox.attr_bool),
             n=1)
Run Code Online (Sandbox Code Playgroud)

有一个创建人口的样本:

[1817.2852738610263, 6.184224906600851, 0, 0, 1], [1145.7253307024512, 8.618185266721435, 1, 0, 1], ...
Run Code Online (Sandbox Code Playgroud)

现在,我想通过考虑基因类型和范围的差异来对我的染色体进行突变和交叉。目前我有一个错误,因为在应用交叉和变异运算符后,染色体的第一个基因产生了 0 值,这与我的评估函数错误。任何人都可以帮助我使用 DEAP 工具箱来编码选择、突变和交叉,从而在最初定义的范围内产生新的群体吗?

python-2.7 deap

5
推荐指数
1
解决办法
1139
查看次数

如何为 python 中的 deap 包创建一个包含不同范围内的随机数的列表

我正在 Python 中使用 DEAP 包编写一个程序,用于使用进化算法(特别是遗传算法)进行优化。

我需要使用 python 中的列表类型创建染色体。该染色体应该有五个不同范围的浮动基因(等位基因)。

我的主要问题是创造这样的染色体。但是,如果我可以使用 deap 包的 tools.initRepeat 函数来实现这一点,那就更好了。

对于所有基因都在同一范围内的情况,我们可以使用以下代码:

import random

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

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

IND_SIZE=10

toolbox = base.Toolbox()
toolbox.register("attr_float", random.random)
toolbox.register("individual", tools.initRepeat, creator.Individual,
                 toolbox.attr_float, n=IND_SIZE)
Run Code Online (Sandbox Code Playgroud)

我从这里得到的。

python genetic-algorithm evolutionary-algorithm deap

3
推荐指数
1
解决办法
1554
查看次数

DEAP中具有多个权重的适应度函数

我正在学习使用 Python DEAP 模块,并且创建了一个最小化适应度函数和一个评估函数。我用于健身功能的代码如下:

ct.create("FitnessFunc", base.Fitness, weights=(-0.0001, -100000.0))
Run Code Online (Sandbox Code Playgroud)

请注意重量差异非常大。这是因为Fitness 的 DEAP 文档说:

权重还可用于改变每个目标相对于另一个目标的重要性。这意味着权重可以是任何实数,并且仅使用符号来确定是否进行最大化或最小化。

对我来说,这意味着你可以通过增大一个权重来优先考虑另一个权重。


我正在使用algorithms.eaSimple(通过名人堂)来进化,并且使用 来选择群体中最好的个体tools.selTournament

评估函数返回abs(sum(input)), len(input)。运行后,我从 HallOfFame 中获取值并对其进行评估,但是,输出类似于以下内容(行尾的数字是我添加的):

(154.2830144, 3)            1
(365.6353634, 4)            2
(390.50576340000003, 3)     3
(390.50576340000003, 14)    4
(417.37616340000005, 4)     5
Run Code Online (Sandbox Code Playgroud)

让我困惑的是,我认为文档指出较大的第二个权重意味着len(input)会产生更大的影响,并会产生如下输出:

(154.2830144, 3)            1
(365.6353634, 4)            2
(390.50576340000003, 3)     3
(417.37616340000005, 4)     5
(390.50576340000003, 14)    4
Run Code Online (Sandbox Code Playgroud)

请注意,第 4 行和第 5 行交换了位置。这是因为第 4 行的权重比第 5 行的权重大得多。

看来,适应度实际上是首先根据第一个元素进行评估的,然后仅当第一个元素之间存在平局时才考虑第二个元素。如果是这样的话,那么设置除-1或+1以外的权重的目的是什么?

python machine-learning deap

2
推荐指数
1
解决办法
1395
查看次数

如何在Python中使用DEAP绘制多目标帕累托边界

对于我正在研究的项目,我在DEAP中设置了3个不同的目标作为优化目标(这是一个基于Python的演化框架).

它可以使用像NSGA-II这样的算法来应对多目标问题.无论如何都要生成帕累托边界曲面以显示结果.

python visualization matplotlib genetic-programming deap

1
推荐指数
1
解决办法
2326
查看次数