无约束多变量寻优方法——简单遗传算法的实现

对于一个无约束多变量寻优问题:

minf(x),x\in R^n

简单来想可以认为就是在一堆x里面找到使得f(x)最小的那个x,我们把这些x用二进制进行编码,二进制的0和1就是基因,编码后的二进制串就是染色体,也就是一个个体,这一堆x就是一个种群。对这一个种群进行优胜劣汰的“自然选择”,经过好几代之后,这个种群整体就会变得非常“优异”。


第一步:编码并形成初始种群

编码的规则可以表述为下面的两点:

1、根据变量的范围和要求精度确定每一维的编码长度:

比如x_i的范围在[-10,10],要求精度为tol=1e-6,即将区间[-10,10]按照1e-6进行等分,可以分为\frac{10-(-10)}{1e-6}=20000000等分,只要二进制的长度足以表示2\times 10^7个不同的数即可,由于2^{24}<2\times10^7<2^{25},故25位可以达到所要求的精度。

2、将所有维度的编码合成一个长串。

同理将其他维度编为二进制码,之后按照维度次序将其连接在一起构成一个长二进制串,即:

\underbrace{1011\cdots}_{​{x_1}}\underbrace{0100\cdots}_{​{x_2}}\underbrace{1100\cdots}_{​{x_3}}\cdots

编码完成后就可以随机生成所需的个体数形成初始种群。

第二步:解码并计算适应度


由下面的示意图容易知道解码的公式:

\frac{x_i-l_i}{r_i-l_i}=\frac{x_{di}-0}{2^{25}-1-0} 

解码后,由于适应度要求越大越好,而此问题为求最小值问题,所以可以将适应度函数设置为目标函数值的相反数

第三步:将种群按照适应度进行排序

排序之后种群中适应度最高的即为种群最后一个个体(或者第一个个体)

第四步:按照轮盘赌进行选择


通过轮盘赌方法选出遗传到下一代的个体。所谓的轮盘赌方法是指,个体被选中的概率和其适应度值成比例,适应度越大,选中的概率越大,但并不是依据个体适应度在整体适应度总和中占的比例,而是根据“累积概率”:

第五步:单点交叉

即随机选择一个位置然后交叉(交换)两个“染色体”的后面部分。

第六步:基本位变异

即随机选择一个位置然后将其二进制位取反。

将上述步骤进行循环,经过相当数量的代数之后,最终可以选择出满足精度要求的个体。

此外,该算法有个明显的缺陷就是可能陷入局部最优解。


求函数

的最小值 

 其理论值应该为在[1,1]处取得最小值0,而此遗传算法求得的结果是

 种群的平均适应度随着代数增加的变化规律:

 本次编写的算法有些粗糙,计算结果不是很令人满意,有机会再改进一下。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值