我正在尝试使用遗传算法解决问题。
问题是要找到优化函数的整数和实数值集。
我需要使用二进制字符串来表示问题(仅仅因为我在应用于二进制字符串染色体时更好地理解交叉/变异等概念)。
候选解决方案S将是集合{I1,I2,... IN,R1,R2,RM}
其中I变量是整数,R变量是浮点数。
我希望能够将候选解决方案S转换为二进制字符串,但我不知道如何编码浮点数。
关于如何将集合S编码到染色体中的任何想法?
虽然该解决方案应该是语言无关的,但我首选的语言选择(按此优先级顺序递减)是:
Python,C ++,C
BTW,我正在使用Pyevolve
对问题进行编码答案 0 :(得分:1)
不,我认为二进制表示对您的问题是错误的。你的基本数据不是二进制的,那么,为什么要使用二进制?对实数和整数进行变异和交叉,而不是二进制表示。
最简单的交叉:第一个父:ABCDE,其中A,B,...是浮点数,第二个父MNOPQ。随机选择D,第一个春天:ABCDQ,第二个:MNOPE。
答案 1 :(得分:1)
答案 2 :(得分:0)
您可以使用 struct 模块中提供的工具将二进制数据打包到缓冲区中。见这里:http://docs.python.org/library/struct.html
那就是说,我个人喜欢Python,但是:如果你想反复有效地获取一组整数和浮点数,把它当成一个大的比特,并对其应用按位变异,我不认为Python是语言的最佳选择。这在低级语言中更直接(也更快) - 我会选择C语言。
祝算法好运!
答案 3 :(得分:0)
对浮点数使用IEEE754表示,对整数使用二进制补码表示。或者,使用整数和浮点数,安全地知道您的计算机已经在使用这些二进制表示的幕后。
答案 4 :(得分:0)
如果我正确理解了这个问题,那么这完全是语言无关的。您应该能够在标准IEEE表示中表示浮点数。这是一个tutorial。
一旦你拥有了那个代表你什么都不是,你只需要对你的位应用任何交叉(单点,双点)。