问题介绍
- 问题1:遗传算法第一步就是要解决编码问题,常用二进制编码,用过matlab的都知道有自带的十进制转换二进制的API,但是生成的char类型变量却不方便完成后续计算适应度、交叉、变异等操作;
- 问题2:常见实现编码方式为先确定精度,根据目标精度反推最低需要的二进制编码位数然后编码,但是存在的问题是假如函数搜索范围是[-1,2],需要0.001的精度,那么就是3000个数,需要12位二进制编码,但是完整的12位二进制编码可以表示到4096,如果直接用12位编码,那么将会在交叉及变异过程中,生成超出3000的数字,即超出搜索范围;
解决思路
- 针对问题1,必须将二进制编码转化为数组形式,才能实现单点交叉 变异等操作;
- 针对问题2,只能以补满位数为前提,即12位编码,在[-1,2]上分4096个数,精度即为0.0007;
- 本文拿解决如下函数,编码为例,理论求得最大值3.850
具体实现
- 首先根据设定的编码位数,生成完整的二进制编码矩阵,利用matlab自带的d