gpt4 book ai didi

javascript - 按位交叉两个整数

转载 作者:数据小太阳 更新时间:2023-10-29 04:44:40 25 4
gpt4 key购买 nike

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

有一次,你必须用两个数字( 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com