遗传算法的二进制编码

您所在的位置:网站首页 0到20的二进制 遗传算法的二进制编码

遗传算法的二进制编码

2024-07-13 08:48| 来源: 网络整理| 查看: 265

假设我们要用遗传算法求解某个函数的最大值,x的取值范围是[-3.0,12.1],那么我们现在就是要从这个取值范围内取出一些x来作为种群的个体,要取出多少个x这取决于你想要种群有多少个体,即种群规模。

如果我们用十进制去表示种群中的个体,并且如果设定种群规模为10个个体,那么很简单,只要在-3.0到12.1这个区间随机选择10个非重复的实数即可。但是现在我们想用一个二进制去表示种群中的一个个体,该怎么做呢?

首先一个直观的想法是直接找到十进制对应的二进制,但是如果是那样做就涉及到有符号的二进制数了。

所以我们换个思路,使用无符号的二进制数,虽然无符号的二进制数只能表示正数,但是我们可以将这些正数转换到我们想要的区间。

前面说了,只要在-3.0到12.1这个区间随机选择10个非重复的实数即可,但是这里有个精度的问题,如果精度为1的话,那么-3到12大概只有15个数,从15个数中随机选择10个数,那也太不随机了吧,假设我的种群规模是100呢,怎么从15个数中随机选择100个数?因此要增加精度,比如说,如果精度为10000话,那么原先的一个单位长度就被切分成10000份,原先精度为1的区间只有15.1个数,而现在精度为10000的区间就有151000个数,即15.1*10^4。

那么我们使用二进制编码跟使用实数编码道理一样,如果我们需要精度为10000,那么也就需要151000个数来表示这个区间,实数编码你要根据你需要的精度将连续的区间离散化,然后再从离散的数据中随机抽取。二进制编码也是一样,也就是说现在你需要151000个二进制数来表示这个区间内离散的数,然后如果你种群规模是100,那就是从151000个二进制数里面随机抽取100个二进制数成为你的种群。

二进制的位数越多能表示的数越多,所以我们必要先计算一下使用多少位数的二进制。其实对于一个[L,U]的区间,如果精度设定为10^4,需要满足:

2^(n-1) < (U-L)*10^4 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3