【问题标题】:Confusion regarding genetic algorithms关于遗传算法的困惑
【发布时间】:2012-09-14 02:19:33
【问题描述】:

我的书(人工智能一种现代方法)说遗传算法从一组 k 随机生成的状态开始,称为种群。每个状态都表示为一个有限字母表上的字符串——最常见的是一个由 0 和 1 组成的字符串。例如,一个 8 皇后状态必须指定 8 个皇后的位置,每个皇后在一列 8 个方格中,因此需要 8 * log(2)8 = 24 位。或者,状态可以表示为 8 位数字,每个数字的范围从 1 到 8。

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

我不明白表达式 8 * log(2)8 = 24 bits ,为什么是 log2 ^ 8?这 24 位应该是干什么用的?

【问题讨论】:

  • 8 个皇后不能共享一行或一列。所以你知道他们的行(或列)是 0-7:queen#0 有 row=0,等等。所以你不必存储这些行。您必须存储 0-7 列,这需要 3bit/queen。 [实际上有一个更严格的枚举,因为您可以使用混合基数编码,这样可以节省一些位(我猜是 3)通过对称压缩也可以节省一些位。但是使用 3bits/queen 算术更简单。]

标签: algorithm genetic-algorithm


【解决方案1】:

如果我们在维基百科页面上举第一个例子,解决方案可以编码为 [2,4,6,8,3,1,7,5] :第一个数字给出 A 列中女王的行号,第二个为 B 列中的女王,依此类推。现在,我们将从 0 开始,而不是从 1 开始行编号。然后使用 [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 行,依此类推。

【讨论】:

    【解决方案2】:

    存储可能的正方形(8 种可能性 0-7)所需的位数是 log(2)8。请注意,二进制的 111 是十进制的 7。您必须为 8 列指定正方形,因此您需要 3 位 8 次

    【讨论】:

      猜你喜欢
      • 2013-08-11
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多