4

我正在尝试使用遗传算法解决问题。

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

我需要使用二进制字符串来表示问题(仅仅是因为我在应用于二进制字符串染色体时更好地理解了交叉/突变等概念)。

候选解 S 将是集合 {I1, I2, ... IN, R1, R2, RM }

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

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

关于如何将集合 S 编码为染色体的任何想法?

尽管该解决方案应该与语言无关,但我更喜欢的语言选择(按此特定任务的优先顺序递减)是:

Python、C++、C

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

4

5 回答 5

1

如果您真的需要位字符串表示,我建议您重新考虑一下。从浮点数到位再返回的转换可能有点多。如果您可以只保留浮点值,即单个解决方案候选者是 N 个浮点数组,您可以轻松地将其传递给您的评估函数(目标函数)。然后使用交叉方法,如模拟二进制交叉(SBX,http ://www.slideshare.net/paskorn/self-adaptive-simulated-binary-crossover-presentation) 它模仿了将浮点数转换为二进制表示并对其执行交叉后获得的效果。SBX 的结果非常好,而且如果你处理位字符串会发生什么的类比会在一段时间后变得非常清楚.. 在这张幻灯片中看起来很像.. 但一切都归结为几行实现 sbx 交叉。

于 2010-10-11T11:49:45.327 回答
1

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

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

于 2010-10-07T21:17:41.673 回答
0

对浮点数使用 IEEE754 表示,对整数使用二进制补码表示。或者,使用整数和浮点数,知道您的计算机在幕后已经在使用这些二进制表示是安全的。

于 2010-10-07T22:43:04.797 回答
0

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

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

祝算法好运!

于 2010-10-07T21:05:46.470 回答
0

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

一旦你有了那个表示你就不知道什么是什么,你只需将任何交叉(单点,双点)应用到你的位上。

于 2010-10-08T10:50:04.190 回答