Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 实数的染色体表示法?_Python_Genetic Algorithm - Fatal编程技术网

Python 实数的染色体表示法?

Python 实数的染色体表示法?,python,genetic-algorithm,Python,Genetic Algorithm,我试图用遗传算法解决一个问题 问题是找到优化函数的整数值和实数的集合 我需要用一个二进制字符串来表示这个问题(因为当应用于二进制字符串染色体时,我更了解交叉/变异等概念) 候选解决方案S将是集合{I1,I2,…IN,R1,R2,RM} 其中I变量为整数,R变量为浮点数 我希望能够将候选解决方案S转换为二进制字符串,但我不知道如何对浮点数进行编码 关于如何将集合S编码成染色体有什么想法吗 虽然解决方案应该是语言不可知的,但我更喜欢的语言选择(按此特定任务的优先顺序递减)是: 蟒,C++,C 顺便说

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

问题是找到优化函数的整数值和实数的集合

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

候选解决方案S将是集合{I1,I2,…IN,R1,R2,RM}

其中I变量为整数,R变量为浮点数

我希望能够将候选解决方案S转换为二进制字符串,但我不知道如何对浮点数进行编码

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

虽然解决方案应该是语言不可知的,但我更喜欢的语言选择(按此特定任务的优先顺序递减)是:

蟒,C++,C


顺便说一句,我正在使用

对问题进行编码。您可以使用结构模块中提供的功能将二进制数据打包到缓冲区中。请看这里:

也就是说,我个人喜欢Python,但是:如果你想重复有效地获取一组整数和浮点数,将其视为一个大的位,并对其应用按位变异,我不认为Python是语言的最佳选择。在低级语言中,这要简单得多(也快得多)——我选择C


祝算法好运

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


最简单的交叉:第一父代:ABCDE,其中A,B。。。是浮点数,第二个父项MNOPQ。随机选择D,第一个spring:ABCDQ,第二个:MNOPE。

浮点数使用IEEE754表示,整数使用2的补码表示。或者,使用整数和浮点数,在后台您的计算机已经在使用这些二进制表示的情况下是安全的。

如果我正确理解了这个问题,这完全是语言无关的。您应该能够在标准化IEEE表示法中表示浮点数。这是一个例子


一旦你有了这种表示法,你就不知道什么是什么,你只需要对你的位应用任何交叉(单点、双点等)。

我建议你重新考虑是否真的需要位字符串表示法。。从float到bit和back的转换可能有点多。如果您可以只使用浮点值,即单个候选解决方案是由N个浮点组成的数组,那么您可以轻松地将其传递给求值函数(目标函数)。然后使用交叉方法,如模拟二进制交叉(SBX),它模仿将浮点转换为二进制表示并在其上执行交叉后得到的效果。SBX的结果非常好,而且与处理位字符串的情况类似的情况在一段时间后变得非常清楚。。这张幻灯片看起来很像。。但这一切都归结为实现sbx交叉的几行。

问题(如我所述)在于我不知道如何对浮点变量进行交叉和变异。你能通过一个例子(甚至一个链接)来展示如何对这样一条染色体进行编码,以及如何将交叉和变异应用于这样一条染色体吗?你可以用任何你认为合适的方式来定义交叉。我也建议不要生成二进制字符串,因为这可能会产生更糟糕的结果,因为切片可能出现在整数或浮点变量的“内部”。