问题标签 [crossover]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2479 浏览

optimization - 使用交叉遗传算子的优缺点是什么?

例如,我们有这个问题:

最大化函数 f(X) = X^2 ,其中 0 ≤ X ≤ 31

使用二进制编码,我们可以使用 5 位来表示个体。在经历了选择方法之后,我们得到了遗传算子。

对于这个问题(或任何优化问题),以下的优点和缺点是什么:

  • 高或低交叉率
  • 使用 1 点交叉
  • 使用多点交叉
  • 使用统一交叉

到目前为止,这是我想出的:

  • 高交叉率和多点交叉会降低适应性良好的父母的质量,并产生更差的后代
  • 低交叉率意味着解决方案需要更长的时间才能收敛到某个最优值
0 投票
1 回答
88 浏览

matlab - 单点交叉

我有两个数组(一行矩阵)temp1temp2如下所示:

我有一个索引pn=3。我需要如下输出:

即我如何创建tempNew索引上的所有值pn都来自于temp1并且索引之外的所有值pn都来自于temp2

0 投票
1 回答
170 浏览

java - 我应该使用什么交叉方法来交叉遗传算法中的后缀表达式?

我正在构建一个项目,其主要目标是使用 6 个给定数字和主要运算符(+、-、*、/)找到给定数字(如果可能,否则最接近)。想法是使用给定的数字和运算符以反向抛光(后缀)表示法随机生成表达式,因为我发现它最容易在以后生成和计算。这些表达式是我的遗传算法中的个体。这些表达式在 Java 中具有字符串数组列表的形式,其中字符串既是运算符又是操作数(给定的数字)。

这里的主要问题是,交叉这些个体(实际上是后缀表达式)的最佳方法是什么?现在我正在考虑交叉表达式,这些表达式由给定的所有六个操作数(以及它们的 5 个运算符)组成。稍后我可能还会交叉由较少操作数(5、4、3、2 和也只有 1)组成的表达式,但我想我应该首先弄清楚这一点,作为最复杂的情​​况(如果你认为以不同的方式开始可能是一个更好的主意,我愿意接受任何建议)。所以,问题是每个表达式都是由给定的所有操作数组成的,子表达式也应该包含所有操作数。我知道这需要某种有序的交叉(通常用于 TSP 等问题),其中描述了多种方法),但我不太清楚哪种方法最适合我的情况(我也知道在遗传算法中有很多“试错”过程,但我在说关于这里的其他事情)。

我所说的困扰我的是运营商。如果我只有一个操作数列表,那么跨越 2 个这样的列表不会有问题,例如,从 1 个父项中获取半个元素的随机子数组,然后用父项 2 中的剩余元素填充其余部分,保持顺序如下它是。但是在这里,如果我说,从第一个父表达式中获取表达式的前半部分,我肯定必须用剩余的操作数填充子表达式,但是我应该如何处理运算符呢?像其余的操作数一样从父级 2 中获取它们(但是我必须小心,因为为了在后缀表达式中使用运算符,我需要至少有 1 个操作数,并检查所有时间可能很耗时,或不是?),或者我可以为子表达式的其余部分生成随机运算符(但这不会

当谈到交叉时,也有突变,但我想我已经解决了。我可以采用一个表达式并执行一个突变,我只需切换 2 个操作数,或者采用一个表达式并随机更改 1 个或多个运算符。为此,我有一些想法,但真正困扰我的是跨界。

所以,这几乎概括了我的问题。就像我说的,主要问题是如何交叉,但是如果您对程序有任何其他建议或问题(也许更容易表示表达式 - 除了字符串列表 - 交叉可能更容易/更快,也许是我没有'这里不提,没关系,甚至是解决问题的全新方法?),我很想听听他们的意见。我在这里没有给出任何代码,因为我认为不需要回答这个问题,但如果你认为它会有所帮助,我一定会编辑以解决这个问题。再一次,主要问题是回答如何交叉,这个问题的特定部分(想法或伪代码预期,虽然代码本身也很棒:D),但如果你认为我需要做更多的改变,

提前致谢!

0 投票
0 回答
182 浏览

algorithm - 遗传算法中的非均匀变异和混合阿尔法交叉

我在遗传算法中使用了混合阿尔法交叉和非均匀变异。染色体的形式为:[parent1 parent2 parent3 parent4 parent5 parent6 parent7]。每个染色体允许的值应该在[0,1]范围内,并且它们的总和应该等于1。我有代码交叉和突变来做这个约束。但它不起作用。结果中的染色体不是在 [0,1] 中并且总和不等于 1。我的交叉代码:

和我的突变代码:

我该如何解决?感谢您抽出宝贵时间。

0 投票
0 回答
364 浏览

python - GA中的有序交叉

我正在使用 Python 为 12 个部门的二次分配问题编写一个简单的 GA 代码。我的解决方案(染色体)是一个列表,其中值代表部门编号,索引代表位置。在交叉期间,我使用 (item in list) 来查看某个部门是否已经存在于后代中,以避免重复。该代码需要很长时间才能运行,我猜这是因为(列表中的项目)查找时间。我怎样才能加快这个过程?我知道我无法将列表转换为集合,因为我需要保留部门的顺序!有任何想法吗?

0 投票
0 回答
422 浏览

algorithm - 一维毛坯切削的遗传算法

我正在尝试为一维库存切割问题实现遗传算法。问题是我们有无限量的金属库存,具有 m 个不同的长度和 n 个不同的订单长度(小于库存长度),必须从库存金属中切割出不同数量的金属。

我的问题是:

如何编码染色体?(它们有以下限制:总切割长度必须小于库存尺寸..)

在这种情况下,交叉和变异算子如何工作?

我发现它们与我们用于 TSP 问题的普通运算符完全不同,因为当你想重新调整人口时有很多限制(例如,碎片不能比库存长,...)

0 投票
1 回答
450 浏览

python - 如何改进 TSP 的这种遗传算法?

这是我的遗传算法,一步一步:

  1. 随机生成两个初始种群,并从两者中选择最合适的游览。

  2. 执行一个有序的交叉,它选择第一个适合的游览的随机部分,并从第二个开始按顺序填充其余部分。

  3. 如果这次巡演的效果仅为初始人群中前 10% 巡演的 1.3 倍,则通过随机交换两个城市来改变这次巡演(我实际上只是通过归纳来完成的,挑选出制作不佳的巡演) - 我很乐意改变这一点,但想不出更好的方法。

    • 该突变选自若干突变的群体。
  4. 返回产生的游览。

然而,突变几乎总是更糟,如果与交叉不同的话。

我非常感谢一些帮助。谢谢!

0 投票
1 回答
608 浏览

neural-network - 为什么在神经网络训练中使用 Crossover?

为什么具体使用它?

我知道它会增加变化,这可能有助于探索问题空间,但它会增加多少及时找到最佳解决方案/配置的概率?它还有其他好处吗?

它是否一定总是有帮助,或者是否存在会增加找到最佳解决方案所需时间的情况?

0 投票
0 回答
62 浏览

algorithm - 如何使用最近邻随机点细分空间?

我正在尝试为我正在构建的遗传算法创建一种有效的交叉方法。我只有 2 或 3 个变量需要优化,因此我可以将每一代视为平面或球体上的点。

为了生成孩子,我想将空间划分为三角形或四边形,然后将每个的质心作为孩子。我的问题是细分空间。如何对分数进行分组并确保每个父母为相同数量的孩子做出贡献?

一种解决方案可能是形成 N(3 或 4)个最近邻点的集群,然后将这些点的质心作为子点。然后可以通过对 N 个集群进行分组并再次获取质心来生成更多的孩子。我对最近邻聚类不是很熟悉,尽管我一直在研究它,但我还没有找到任何看起来特别有效的解决方案。

0 投票
3 回答
1474 浏览

neural-network - NEAT 算法:如何交叉不相交和多余的基因?

我目前正在实现 Kenneth Stanley 开发的 NEAT 算法,以原论文作为参考。

在描述交叉方法的部分中,有一件事让我有点困惑。

在此处输入图像描述

因此,上图说明了 NEAT 的交叉方法。为了决定一个基因是从哪个父母那里继承来的,这篇论文说:

匹配的基因是随机遗传的,而不相交的基因(中间不匹配的)和多余的基因(最后不匹配的)是从更合适的父母那里继承的。

对于匹配的基因(1 - 5)很容易理解。您只是从 Parent1 或 Parent2 随机继承(两者都有 50% 的机会)。但是对于不相交的 (6-8) 和多余的 (9-10) 基因,您不能从更合适的父母那里继承,因为您在 Parent1 或 Parent2 中只有这些基因。

例如:

Parent1 的适应度高于 Parent2。不相交的基因 6 只存在于 Parent2 中(当然,因为不相交和多余的基因只出现在一个亲本中)所以,你不能决定从更合适的亲本那里继承这个基因。所有其他不相交和多余的基因也是如此。您只能从它们所在的父级继承它们。

所以我的问题是:你是否可能从更合适的父母那里继承所有匹配的基因,然后接管不相交和多余的基因?或者我在这里误解了什么?

提前致谢。