我一直在阅读增强拓扑的NeuronEvolution,而这件事让我很困扰。在阅读肯尼思·斯坦利的《关于NEAT的论文》时,我想到了这个数字:
在第一个突变时,创新数从1,2,3,4,5,6变为1,2,3,4,5,6,7。
在第二个上,它从1,2,3,4,5,6变为1,2,3,4,5,6,8,9。
我的问题是为什么它跳过数字7而直接上升到8?我没有发现与删除创新数字有关的任何信息。
在第二个图上也是一样,父母1如何失去6,7,而父母2中的第8个基因又去了哪里?
machine-learning neural-network genetic-algorithm evolutionary-algorithm es-hyperneat
我遇到了几个帖子和文章,建议使用模拟退火之类的东西来避免局部最小/最大问题.
我不明白为什么如果你从一个足够大的随机人口开始这是必要的.
是否只是另一项检查,以确保最初的人口实际上足够大和随机?或者这些技术只是产生"好"初始人口的替代方案?
我们知道遗传算法(或进化计算)与我们的解空间Ω中的点的编码一起工作,而不是直接对这些点进行编码.在文献中,我们经常发现GAs具有以下缺点:(1)由于许多染色体被编码成相似的Ω点或相似的染色体具有非常不同的点,因此效率相当低.你认为这真的是一个缺点吗?因为这些算法在每次迭代中使用变异算子来使候选解决方案多样化.为了增加更多的多样性,我们只需增加交叉的概率.我们不能忘记,我们的初始种群(染色体)是随机产生的(另一种更多样化).问题是,如果你认为(1)是GA的缺点,你能提供更多细节吗?谢谢.
algorithm heuristics genetic-algorithm evolutionary-algorithm
所以我正在阅读进化算法并且很困惑。
我相信在现代,进化编程、进化策略和遗传算法之间的“传统”差异是什么?
我的理解是遗传算法会改变“基因”以产生结果,进化策略会改变参数,从而以某种方式改变个体。完全numerical parameters按照(http://en.wikipedia.org/wiki/Evolutionary_algorithm)是什么意思 ?那么进化规划主要因实数的变异而变化?
进化编程和遗传编程是寻找解决问题的程序的方法,而遗传算法和进化策略是使用候选人寻找问题解决方案的方法吗?我看不到这种区别,我在进化策略与遗传算法中看到的唯一区别是参数列表与染色体以及实数与整数?
谢谢。
我正在尝试使用DEAP遗传算法来解决一个与背包问题不同的优化问题.染色体由整数向量表示,约束条件是向量之和必须等于某个数字X.在适应性评估中处理这个问题似乎效率低,因为相对较少的交叉/突变会导致有一个总和恰好等于X的向量.
相反,似乎我应该将交叉和突变重新映射到有限的可能解决方案中.我应该在DEAP中使用装饰器来实现这个,还是有人知道更好的方法来解决这个问题?有没有人有这种情况的示例代码的链接?
在进化计算的背景下,什么是"健身共享"和"利基计数"?
artificial-intelligence terminology definition genetic-algorithm evolutionary-algorithm
我正在 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)
我从这里得到的。
我正在尝试在 C# 中实现增强拓扑的神经进化。我遇到了经常性连接的问题。我知道,对于循环连接,输出基本上是暂时移位的。
http://i.imgur.com/FQYjCLZ.png
在链接的图像中,我展示了一个非常简单的神经网络,它有2 个输入、3 个隐藏节点和一个输出。如果没有激活函数或传递函数,我认为它会被评估为:
n3[t] = (i1[t]*a + n6[t-1]*e)*d + i2[t]*b*c) * f
Run Code Online (Sandbox Code Playgroud)
但是,我很难弄清楚如何识别链接 e 是循环连接的事实。我读到的关于 NEAT 的论文展示了 XOR 问题和双极无速度问题的最小解是如何具有循环连接的。
如果您有固定的拓扑结构,这似乎相当简单,因为您可以自己分析拓扑结构,并确定需要延迟哪些连接。
您将如何准确识别这些联系?
我正在尝试实现简单的 NEAT。我从各种来源了解到,有 4 种类型的“节点”:输入神经元、隐藏神经元、输出神经元和所谓的偏置神经元。我不知道哪个过程可能会产生偏置神经元,这在本文第 16 页中有描述。
我知道在突变时可能会创建新的神经元,但它需要两个神经元之间存在现有的连接,该连接将被这个新的神经元分裂(基于已经提到的论文,第 10 页)。然而,偏置神经元没有“输入”连接,因此显然不能以上述方式创建。那么,具体来说,NEAT 是如何创建偏置神经元的呢?
neat neural-network mutation evolutionary-algorithm bias-neuron
我知道协方差矩阵适应进化策略所需的基本组件,但我似乎找不到任何明确说明所选子代(lambda)是否替换父种群(mu)或添加到其中的地方。
我知道这种区别在进化计算中产生了巨大的差异,即您的种群是否停留在局部最优解并收敛,或者它是否能够脱离局部最优解并找到全局最优解。非常感谢解决这个困境的任何帮助。
python ×2
algorithm ×1
bias-neuron ×1
covariance ×1
deap ×1
definition ×1
es-hyperneat ×1
heuristics ×1
matrix ×1
mutation ×1
neat ×1
optimization ×1
pyevolve ×1
terminology ×1