m_v*_*eek 7 javascript bit-manipulation genetic-algorithm
我目前正在尝试实现遗传算法的一个非常简单的例子.
有一次,你必须用两个数字(父母)做一个"交叉"(生物学)才能得到一个"孩子".
你可以在这里找到交叉的解释:
如何"交叉"两个字符串(1234&abcd - > 12cd&ab34)
(第二个例子,更容易的"一点"交叉是我正在尝试做的.)
染色体(父母和孩子)是数字,但"交叉"将是一个操作.
我找到了其中一条"染色体"的解决方案,具体如下:
>>>运算符)<<操作员)因此,这将保留一条染色体的末端,并以0开头填充开头.
但我真的不知道如何解决另一条染色体的问题,然后也做了交叉.
(一旦我保留染色体的开始/结束并用0填充其余部分,可能是异或.)
或者我应该从另一个角度处理这个问题?
如果交叉的分数是 p(例如,p = .25),那么这应该有效:
mask1 = ((0xffff >> 16*p) << 16*p)
mask2 = 0xffff ^ mask1
output1 = (input1 & mask1) ^ (input2 & mask2)
output2 = (input1 & mask2) ^ (input2 & mask1)
Run Code Online (Sandbox Code Playgroud)
一些注意事项: