gpt4 book ai didi

algorithm - 遗传算法 : 2D chromosome; crossover and mutation probabilities

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:33:50 24 4
gpt4 key购买 nike

让我从我正在实现的遗传算法版本开始。对于我在这里犯的任何术语错误,我提前道歉。请随时纠正我。

我的问题的染色体是二维的。三行三十二列。本质上,等位基因(值)是该染色体包含的索引。

指数是如何制定的
染色体的每一行和每一列(一起)指的是一个基因。每个基因包含一个整数值 (0 - 30)。因此,单个列(我相信称为 gnome)指的是四维数组的索引,其中包含适应度函数在其上运行的用户数据。

This is how a chromosome would look like

11 22 33 14 27 15 16 ...
3 29 1 7 18 24 22 ...
29 9 16 10 14 21 3 ...

e.g. column 0 ==> data[11][3][29]
where
11 -> (0, 0); 0th row, 0th column
3 -> (1, 0); 1st row, 0th column
29 -> (2, 0); 2nd row, 0th column

为了完整起见,适应度函数的工作原理如下:(对于单个染色体)

for first 10 iterations: (user 0 to 9)
for each column (genome)
consider gene value for first row as the first index of data array
consider gene value for the second row as the second index of data array
consider gene value for the third row as the third index of data array

so if the first column contains [11][3][29] user = 0
it refers to data[0][11][3][29]

SUM the data array value for all columns and save it
Do the same for all iterations (users)

for second 10 iterations: (user 10 to 19)
for each column (genome)
consider gene value for the SECOND row as the FIRST index of data array
consider gene value for the THIRD row as the SECOND index of data array
consider gene value for FIRST row as the THIRD index of data array

SUM the data array value for all columns and save it
Do the same for all iterations (users)


for third 10 iterations: (user 20 to 29)
for each column (genome)
consider gene value for the THIRD row as the FIRST index of data array
consider gene value for FIRST row as the SECOND index of data array
consider gene value for the SECOND row as the THIRD index of data array

SUM the data array value for all columns and save it
Do the same for all iterations (users)

Out of the 30 (sum) values calculated so far, assign the minimum value as fitness value
to this chromosome.

这里解释适应度函数的重点是解释我正在处理的优化问题。对不起,我无法用数学符号来表达它。任何可以做到的人,他/她的评论都非常受欢迎。本质上它是最大化最小 X。其中 X 指的是数据数组中包含的数据。 (最大化是在为下一代选择最高适应性染色体的世代中完成的)

Q1) 我正在使用单个随机数生成器来计算交叉和变异概率。一般来说,用单个生成器实现它是否正确?我问这个问题是因为我选择的交叉率是0.7,变异是0.01。我的随机数生成器生成一个均匀分布的整数。数字介于 0 到 (2^31 - 1) 之间。如果随机函数生成的一个数位于满足变异的边界之下,则同一个数也满足交叉。这会影响进化过程吗?

注意:随机数产生的最高数是2147483647。这个值的1%是21474836。所以每当一个数字小于21474836时,就表明这个基因可以被突变。这个数字也表明必须进行交叉。不应该有不同的生成器吗?

Q2)虽然我在计算适应度时看到基因之间存在关系是一列。但是在进行突变时,所有的基因都应该被认为是相互独立的,或者基因组的所有行(列)都应该受到突变的影响。

解释正如我在二进制字符串中了解到的那样1000 位,其中每一位对应一个基因,突变率为 1% 意味着 100 位中有 1 位可能会被翻转。然而,在我的例子中,我的染色体是二维的(3 行,32 列)。我应该考虑所有 96 个基因相互独立还是只考虑 32 个基因。每当我需要翻转时,将所有列一起翻转。突变如何在二维染色体中发挥作用?

Q3) 我这里的行之间真的有相关性吗?我有一点困惑?

解释我有 2D 染色体,其列值完全指向我必须用来计算该染色体适应性的数据。遗传算法操纵染色体,其中适应度由与该染色体相关的数据分配。我的问题是遗传算法应该如何处理二维染色体。列中的基因之间是否应该存在关系。我可以引用一些操作 2D 染色体的论文/代码吗?

最佳答案

我不确定我是否理解染色体结构,但没关系,概念是一样的:

1 - You have a chromosome object, which you can access the individual genes

2 - You have a fitness function, which takes a chromosome and outputs a value

3 - You have a selection function, which selects chromosomes to mate

4 - You have a crossover function, which generally takes 2 chromosomes, exchange genes between them and outputs two new chromosomes

5 - You have a mutation operator, which acts randomly on the genes of a chromosome

所以

Q1) 您可以使用单个随机生成器,完全没有问题。但是你为什么要用整数?在 [0, 1] 之间生成随机数要容易得多。

Q2)这取决于你,但通常基因是随机突变的,彼此独立(突变发生在交叉之后,但我想你已经知道了)。

编辑:是的,您应该考虑所有 96 个相互独立的基因。对于每个突变,您将选择一个“行”和一个“列”,并用一些概率 p 修改(突变)该基因,因此:

for row in chromosome.row
for col in row
val = random_between_0_and_1
if val < p
chromosome[row][col] = noise

Q4) 适应度函数的作用由您决定。如果此染色体在解决您的问题时“好”或“坏”,那么您应该返回一个反射(reflect)该情况的值。

关于algorithm - 遗传算法 : 2D chromosome; crossover and mutation probabilities,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21198214/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com