javascript – 按位交叉两个整数

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

有一次,你必须用两个数字(父母)做一个“交叉”(生物学)才能得到一个“孩子”.

你可以在这里找到交叉的解释:

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

(第二个例子,更容易的“一点”交叉是我正在尝试做的.)

染色体(父母和孩子)是数字,但“交叉”将是一点点操作.

我找到了其中一条“染色体”的解决方案,其中包括

>将位X移动到右侧(>>>运算符)
>然后再次移动位X位,但这次是向左移动(<< operator)
因此,这将保留一条染色体的末端并以0开头填充开头.

但我真的不知道如何解决另一条染色体的问题,然后也做了交叉.

(一旦我保留染色体的开始/结束并用0填充其余部分,可能是异或.)

或者我应该从另一个角度处理这个问题?

解决方法

如果交叉的分数是p(例如,p = .25),那么这应该有效:
mask1 = ((0xffff >> 16*p) << 16*p)
mask2 = 0xffff ^ mask1
output1 = (input1 & mask1) ^ (input2 & mask2)
output2 = (input1 & mask2) ^ (input2 & mask1)

几个笔记:

>这只是伪代码.你可能想要一些演员阵容.>这与你在上面的评论中对待p的方式不同. (只需用1-p替换p即​​可得到p的定义.)

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...