- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
让我从我正在实现的遗传算法版本开始。对于我在这里犯的任何术语错误,我提前道歉。请随时纠正我。
我的问题的染色体是二维的。三行三十二列。本质上,等位基因(值)是该染色体包含的索引。
指数是如何制定的
染色体的每一行和每一列(一起)指的是一个基因。每个基因包含一个整数值 (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/
如何将 solr 与 heritrix 集成? 我想使用 heritrix 归档一个站点,然后使用 solr 在本地索引和搜索该文件。 谢谢 最佳答案 使用 Solr 进行索引的问题在于它是一个纯文本
我的任务: 创建一个程序来仅使用基元(如三角形或其他东西)复制图片(作为输入给出)。该程序应使用进化算法来创建输出图片。 我的问题: 我需要发明一种算法来创建种群并检查它们(它们与输入图片的匹配程度
我看过几篇文章和文章,建议使用模拟退火等方法来避免局部最小值/最大值问题。 我不明白为什么如果您从足够大的随机人口开始,这将是必要的。 这只是确保初始人口实际上足够大和随机的另一项检查吗?或者这些技术
我是一名优秀的程序员,十分优秀!