当我的输出只包含2个状态时,遗传算法交叉如何工作?

问题描述 投票:0回答:1

我目前正在做一个项目,在这个项目中,我使用一个基本的细胞自动机和一个遗传算法来创建类似地牢的地图。目前,当我的输出只能是两种状态时,我很难理解交叉的具体工作原理。DEAD或ALIVE(1或0)。

我从概念上理解了交叉--你在种群中找到两个合适的成员,然后它们交换遗传物质,希望产生一个更合适的后代。我也明白这通常是通过在位串上执行k点交叉来完成的(但也可以用实数来完成)。

然而,即使我把我的DeadAlive细胞编码成比特,然后进行交叉。我的结果是什么?单元格只能是死或活。交叉会给我一些超出这个范围的随机值,对吗?而且即使我在浮点数上做文章,我最后不还是会得到一个1或0吗?在这种情况下,似乎还不如直接将死细胞随机突变成活细胞,或者反之。

我读了几篇关于这个主题的论文,但似乎没有一篇能解释这个特殊的问题(用我能理解的语言)。直觉上,我想也许我可以对NEIGHBOURHOODS的细胞进行交叉--所以我找到了2个合适的邻域,然后它们交换成员(比如邻域A把它的4个邻域给了邻域B)。然而,我在任何地方都没有看到这个想法,这使我相信它一定是根本性的错误。

如果有任何帮助,我将非常感激,我真的被这个问题所困扰。

genetic-algorithm cellular-automata crossover
1个回答
0
投票

一个地下城游戏和基因编程的爱好者在这里:)

我想你误解了交叉的概念。在你的细胞自动机上,你必须有遗传信息(染色体),以这样的方式你的系统决定匹配的细胞是死还是活。细胞的状态就是你系统的输出。

你通过混合双亲染色体的遗传信息,在双亲染色体之间进行交叉遗传运算。结果,你获得了一条新的染色体,它以与双亲相似的方式编码图谱。通过运行新的染色体来重新映射你的场景,从而获得你细胞的新状态。

交叉得到一个新的染色体来映射你的地下城,它不会给你细胞的新状态。要得到新的状态,只需要运行你的新染色体。

你的细胞的状态将是表型,是你的染色体的表现方式。你的染色体是决定你的细胞是死是活的模型。我不关心你使用的模型。例如,你使用的是一个有两个输入节点的神经网络。一个输入节点接收网格中细胞的X坐标,另一个节点接收Y坐标。输出节点是一个二进制值。DEAD或ALIVE。这个神经网络有一定数量的隐藏层和权重,这些隐藏层和权重在你的染色体中进行编码。通过执行交叉操作符,你创建了一种新的方式来连接神经元,这是在父母双方之间。但是为了知道每个细胞的新状态,你需要再次将坐标传递给神经网络。也许查查Stanley的NEAT算法可以明确交叉过程。http:/nn.cs.utexas.edudownloadspapersstanley.ec02.pdf。

在你没有任何模型对地图中每个细胞的状态进行编码的情况下,你的遗传信息直接就是每个细胞的状态。在这种情况下,你可以将你的父格分割成更小的格子,比如10x10的格子。然后以10x10的瓦片在地图中运行,如果你从parent1或parent2中选取匹配的瓦片,则随机选择。

我希望这能帮到你

阿尔贝托

© www.soinside.com 2019 - 2024. All rights reserved.