实数的染色体表示法?

2024-03-29 05:36:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用遗传算法解决一个问题。在

问题是找到一组优化函数的积分和实数。在

我需要用一个二进制字符串来表示这个问题(因为当应用于二进制字符串染色体时,我更了解交叉/变异等概念)。在

候选的解决方案是集合{I1,I2。。。在,R1,R2,RM}

其中I变量是整数,R变量是浮点数。在

我希望能够将候选解S转换成二进制字符串,但我不知道如何编码浮点数。在

关于如何将集合S编码成染色体有什么想法吗?在

虽然解决方案应该是语言不可知论的,但我更喜欢的语言选择(按照对这个特定任务的偏好降序排列)是:

蟒,C++,C

顺便说一句,我正在用Pyevolve对这个问题进行编码


Tags: 函数字符串概念编码二进制解决方案交叉遗传算法
3条回答

如果你真的需要位串表示法,我建议你重新考虑一下。。从浮点数到位和回位的转换可能有点大。如果你可以只使用浮点值,也就是说,一个候选方案是一个N个浮点数组,那么你可以很容易地将其传递给你的求值函数(目标函数)。然后使用像模拟二进制交叉(SBX,http://www.slideshare.net/paskorn/self-adaptive-simulated-binary-crossover-presentation)这样的交叉方法来模拟将浮点数转换为二进制表示并在其上执行交叉操作后得到的效果。SBX的结果非常好,而且,如果处理位字符串,很快就会发现类似的情况。。在这个幻灯片中看起来很像。。但归根结底,只有几行实现sbx交叉。在

您可以使用struct模块中提供的工具将二进制数据打包到缓冲区中。请看这里:http://docs.python.org/library/struct.html

也就是说,我个人喜欢Python,但是:如果你想反复高效地获取一组整数和浮点数,把它当作一个大的比特,并对其进行位变异,我认为Python不是语言的最佳选择。在较低级别的语言中,这要简单得多(而且速度也快得多)——我会选择C语言

祝你的算法好运!在

不,我认为二进制表示法不适合你的问题。你的基本数据不是二进制的,那么,为什么要用二进制呢?对实数和整数进行变异和交叉,而不是对它们的二进制表示。在

最简单的交叉:第一个父对象:ABCDE其中A,B。。。是浮点数,第二个父级MNOPQ。随机选择D,第一个弹簧:ABCDQ,第二个:MNOPE。在

相关问题 更多 >