【发布时间】:2026-01-29 14:00:02
【问题描述】:
我目前正在尝试实现一个非常简单的遗传算法示例。
在某一时刻,你必须用两个数字(父母)做一个“交叉”(生物学)才能得到一个“孩子”。
你可以在这里找到 CrossOver 的解释:
How to "crossover" two strings (1234 & abcd -> 12cd & ab34)
(第二个插图,更简单的“单点”交叉是我正在尝试做的。)
染色体(父母和孩子)是数字,但“交叉”将是一个位操作。
我找到了一个“染色体”的解决方案,如下所示:
- 将位 X 向右移动(
>>>运算符) - 然后将位再次移动 X 个位置,但这次向左移动(
<<运算符)
所以这将保留其中一条染色体的末端并用 0 填充开头。
但我真的不知道如何解决另一条染色体的问题,然后也做交叉。
(当我保留染色体的开头/结尾并用 0 填充其余部分时,可能是 XOR。)
或者我什至应该从另一个角度解决这个问题?
【问题讨论】:
-
您是否总是知道您的两个输入作为数字有多大(例如,16 位整数)?
-
是的,它们总是 16 位整数。可以修改的一件事是交叉百分比。例如,75% 将保留父 A 的前 4 (25%) 位,然后在这 4 位之后使用来自父 B 的 12 (75%) 位。
标签: javascript bit-manipulation genetic-algorithm