1

我正在按照遗传算法方法解决背包问题,如此处所示。我知道他们使用了直接值编码方案而不是二进制表示。交叉函数如下:

def cxSet(ind1, ind2):
"""Apply a crossover operation on input sets. The first child is the
intersection of the two sets, the second child is the difference of the
two sets.
"""
temp = set(ind1)                # Used in order to keep type
ind1 &= ind2                    # Intersection (inplace)
ind2 ^= temp                    # Symmetric Difference (inplace)
return ind1, ind2

如果我要将背包问题的染色体编码为二进制表示,则相交将是 AND 操作。设置差异的类似操作是什么?

另外,我只是想知道这种分频器背后的基本原理是什么,以及这种分频器是否比其他常见的分频器技术(如单点分频器或两点分频器)有优势。

4

1 回答 1

1

解决此类问题的最简单方法是做一个小例子:

s1 = {1, 2, 3, 4} => 11110000
s2 = {3, 4, 5, 6} => 00111100
s1 intersect s2 = {3, 4} => 00110000
s1 difference s2 = {1, 2, 5, 6} => 11001100

对此,我们提出了以下按位运算符:

  1. 相交:s1 AND s2(通常&

  2. 区别:s1 XOR s2(通常^

于 2016-11-03T23:30:37.427 回答