遗传算法二进制表示

时间:2016-06-26 22:44:59

标签: parameters genetic-algorithm

我似乎无法找到一个很好的网站来解释GA(我完全不熟悉),但我正在读一本书并且它说:

如果我们将截距的可能值约束到范围[-5,1.5]并将范围线性转换为二进制范围[0,2 ^ 8 - 1],则值0.74将转换为10011110,并且参数值[.74,-.11]可能由10011110110010表示。

有人可以向我解释 1)范围的线性变换如何工作,以及
2)如何用0.74代表10011110

我对二进制的粗略了解会将其翻译为

2^8 0 0 2^5 2^4 2^3 2^2 2^1

这是318。

如果你知道有任何网站可以解释这是一个很好的介绍,那将有所帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

线性变换范围非常简单。开始使用整数可能更容易。

假设您有[0,10]的范围,并且您希望将其转换为范围[0,20]。每个值只是乘以2,所以0 => 0,1 => 2,2 => 4,3 => 6,等等。

现在让我们再举一个例子,你想将[1,10]翻译成[2,11]。为此,您只需减去1(对于第一个范围的底部)然后再加2(对于第二个范围的最小值)。所以只需为每个数字加1,所以1 => 2,2 => 3,3 => 4,等等。

现在如果要将它们组合起来会发生什么。让我们说你想将10,110翻译成30,230。首先,减去第一个数字的最小值10,因此最小值为0.然后乘以比例因子。在这种情况下110-10 = 100和230-30 = 200,所以缩放因子是200/100 = 2.然后你添加第二个范围的最小值,即30。所以要将i1转换为i2,你有i2 =(i1 - 10)* 2 + 30,然后你可以简化。

如果要将[-5,1.5]范围转换为[0,255],则减去-5(即加5),乘以256,除以6.5(从1.5 - -5 = 6.5),并且然后加0.然后因为你处理整数值,你需要将结果四舍五入到最接近的整数。

此外,二进制计算中存在轻微错误,最低位为2 ^ 0,而不是2 ^ 1。因此,您需要将318除以2才能得到正确的答案。

答案 1 :(得分:1)

我已经为C ++中的函数优化编写了一些简单的遗传算法。这是源代码:

https://github.com/mihaioltean/genetic-algorithms

有两种实现:一种用于实际编码,一种用于二进制表示,还显示如何从二进制字符串转换为实际间隔。

代码中有很多评论,你需要更多,请告诉我什么不清楚,我会添加更多。

的问候, 米哈伊