javascript - 按位交叉两个整数

标签 javascript bit-manipulation genetic-algorithm

我目前正在尝试实现一个非常简单的遗传算法示例。

有一次,你必须用两个数字( parent )做一个“交叉”(生物学)来得到一个“ child ”。

您可以在此处找到对 Cross-Over 的解释:

How to "crossover" two strings (1234 & abcd -> 12cd & ab34)

(第二个例子,更简单的“一点”交叉是我正在尝试做的。)

染色体( parent 和 child )是数字,但“交叉”将是位操作。

我找到了一个“染色体”的解决方案,如下所示:

  • 向右移动 X 位(>>> 运算符)
  • 然后再次将位移动 X 个位置,但这次向左移动(<< 运算符)

所以这将保留其中一条染色体的末尾并用 0 填充开头。

但我真的不知道如何解决另一条染色体的问题,然后也做Cross-Over。

(一旦我保留了染色体的开头/结尾并用 0 填充其余部分,可能是 XOR。)

或者我是否应该从另一个 Angular 来解决这个问题?

最佳答案

如果交叉的分数是 p(例如,p = .25),那么这应该有效:

mask1 = ((0xffff >> 16*p) << 16*p)
mask2 = 0xffff ^ mask1
output1 = (input1 & mask1) ^ (input2 & mask2)
output2 = (input1 & mask2) ^ (input2 & mask1)

一些注意事项:

  • 这只是伪代码。您可能需要一些类型转换。
  • 这与您在上面的评论中对待 p 的方式不同。 (只需将 p 替换为 1-p 即可得到您对 p 的定义。)

关于javascript - 按位交叉两个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11705830/

相关文章:

javascript - 如何向 HighChart 图表中的 Y 轴值添加 % 符号?

javascript - 检测 SVG 路径中的孔

matlab - 检索特定排列而不在 Matlab 中存储所有可能的排列

java - 如何 "crossover"两个字符串 (1234 & abcd -> 12cd & ab34)

php - 如何阻止固定位置 div 重叠?

javascript - div 中的最后一个 span 改变了它的宽度

binary - x-y = x+¬y+1 问题

c++ - 生成前缀位掩码

bit-manipulation - 简化按位运算

java - 在 GUI 中使用 GA