2012-09-13 185 views
1

我的书(人工智能一种现代的方法)说遗传算法以一组随机产生的状态开始,称为总体。每个状态在有限字母表中表示为一个字符串 - 最常见的是一串0和1。例如,8皇后状态必须指定8个皇后的位置,每个皇后位于8个方格的列中,因此需要8 * log(2)8 = 24位。可替换地,状态可以表示为8位数字,每一个在范围从1到8关于遗传算法的困惑

[http://en.wikipedia.org/wiki/Eight_queens_puzzle]

我不理解的表达8 *日志(2)8 = 24个比特,为什么LOG2^8?这24位应该是为了什么?

+0

8皇后不能共享一行或一列。所以你知道他们的行(或列)是0-7:女王#0的行= 0等,所以你不必存储行。你必须存储0-7列,这需要3位/皇后。 [事实上,枚举更加紧密,因为你可以使用混合基数编码,这可以让你省掉几个位(我猜)。通过对称压缩也可以节省几位。但使用3位/皇后更简单算术。] – wildplasser

回答

1

如果我们在维基百科页面上拿第一个例子,解决方案可以编码为[2,4,6,8,3,1,7,5]:第一个数字给出列中女王的行号A,B列中女王的第二位,等等。现在,不是从1开始行编号,而是从0开始。然后解决方案使用[1,3,5,7,0,6,4]编码。任何位置都可以这样编码。
我们只有0和7之间的数字,如果我们在二进制位3写它们(= LOG2(8))是足够的:

000 -> 0 
001 -> 1 
... 
110 -> 6 
111 -> 7 

位置可以使用8次3位数进行编码,例如从[1,3,5,7,2,0,6,4]我们可以获得[001,011,101,111,010,000,110,100]或更多简要001011101111010000110100:24位。
另一方面,比特串000010001011100101111110解码为000.010.001.011.100.101.111.110,然后[0,2,1,3,4,5,7,6]并给出[1,3,2,4,5, 8,7]:列A中的皇后位于行1上,列B中的皇后位于第3行上,等等。

0

存储可能方块(8种可能性0-7)所需的位数是log(2 )8。请注意,二进制中的111是十进制的7。你必须指定8列的平方,所以你需要8位8位