遗传算法matlab程序简单实例:遗传算法(rastrigin function)

关于遗传算法matlab程序简单实例的问题,在rastrigin function中经常遇到, 我正在尝试实现一种遗传算法,该算法将计算Rastrigin functon的最小值,并且我遇到了一些问题。我需要将染色体表示为二进制字符串,并且由于 Rastrigin 的函数将数字列表作为参数,如何将染色体解码为数字列表?

我正在尝试实现一种遗传算法,该算法将计算Rastrigin functon的最小值,并且我遇到了一些问题。
我需要将染色体表示为二进制字符串,并且由于 Rastrigin 的函数将数字列表作为参数,如何将染色体解码为数字列表?

7

您正在寻求实现遗传算法。您的实现应该适用于任何通用的最小化 (或最大化) 问题,而不仅仅是Rastrigin函数。您可以决定实现二进制编码的 GA 或实数编码的 GA。两者都有自己的用途和利基应用。但对你来说,我建议实现一个实数编码的 GA。根据你的问题,如果生成的二进制 5.12:

在你开始实现你自己的版本之前,有一个参考代码总是好的。如果你正在寻找一个 C 实现,实验室的source section有一个 Real Coded GA 实现,它被我们和其他人广泛用于我们的研究工作。我建议你玩它,并尝试一些简单的优化问题。

Pyevolve是一个用于遗传算法和遗传编程的 Python 库。

现在,我们已经讨论了实现内容,您对 GA 的理解是否清楚?如果没有,请参考此tutorial,它从优化的角度介绍了 GA。请注意,二进制编码 GA 的交叉和变异的解释不会自动转移到真实编码的 GA。真实编码的 GA 有其自身的复杂性,您将需要时间来阅读一些论文并理解它们。不着急,但是

3

为什么需要将染色体表示为二进制字符串?您可以编写使用其他类型的进化算法。您可以使用数字列表。

至于限制值,当您生成种群的初始成员时,请确保随机数在所需的范围内。限制您的变异运算符以避免产生此范围之外的值(您可以截断此范围之外的值,也可以让它们环绕)。

如果您真的必须使用二进制字符串,请查看Gray Code,这是一种以二进制编码数值的方法,使它们更容易发生突变。

1

将实值问题的解决方案编码为位字符串并不是真正的方法。当您将数字作为位字符串时,您将使用定点数来表示数字。一旦您的算法接近最佳,达到定点编码的精度,它将不会取得进一步的进步。您可以使用更多的位,但是收敛速度会更慢。实际上,在严重的问题上,这种方法在浮点值上的工作速度要比有效的算法慢几个数量级。

在使用典型的 64 位数字时,使用浮点数将使您更接近最优值,例如 1e-10。此外,现代进化算法在优化过程中使用自适应方案来调整变异步骤。与固定的变异步骤相比,这种机制允许更快的收敛速度。检查这个以查看典型的进化优化器在 Rastrigin 函数上实现了什么:http://coco.gforge.inria.fr/doku.php?id=bbob-2010

0

我假设你在 C.Integers(C语言的 int)可以打包为 4 字节 / char(32 位)的数组。所以如果你的数组是

char* chrom_as_bytes=(...)

您可以通过强制转换为 int * 来获取第 i 个值

int ith=3;
value=((int*)chrom_as_bytes)[ith];

如果一个值不在-5.12 & lt;x & lt;5.12 的范围内,你的拟合函数应该返回一个非常糟糕的值,进化中的这一步应该在下一代被丢弃。

另请参阅Wikipedia中的文章。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(583)
Cma与cpa有什么差别:ARMA与ARIMA的差别在d= 0
上一篇
Cvan领克:算术转换克到千克(grams to kilograms equation)
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(38条)