规划与优化-遗传规划

1.LISP:遗传规划的语言

对于一般的语言,在交叉变异的时候大多数情况下都会出现问题,但是Lisp语言就不会出现这个问题。

对于lisp语言来说,它像一个表达式,这种表达式叫做s-表达式。

几个例子:

例1:

表示x+3
(+ x 3)

例2:

表示(x+3)的余玄
(cos(+ x 3))

例3:

表示cos(x+3)和z/14的最小值
(min (cos(+ x 3))(/ z 14))

例4:

表示xy+|z|
(+(* x y)(abs z))

上面的例4可以用语法树来表示

 

注:该图为函数xy+|z|的语法树,它由s-表达式(+(* x y)(abs z))表示,节点“A”表示绝对值算子

例5:

t>5时返回(x+y),否者返回(x+2+z)
(if (> t 5)(+ x y)(+ x 2 z))

2.lisp程序交叉

了解该算法后,我们就能发现s-表达式和子树之间一一对应,那么就可以直接对LIsp计算机程序进行交叉和变异。

例1:

以上这种交叉叫做基于树的交叉

基于树的交叉:随机选择每个父代的一个交叉点并交换在哪些点下面子树,生成两个子代函数。

基于树的变异:用随机生成的一个s-表达式替换随机选出的s-表达式。

例2:

2.遗传规划的基础

2.1遗传规划算法伪代码

2.2适应度的度量

如何度量适应度呢,所有进化算法都需要确定这一点,不过,对于遗传规划而言更复杂,计算机程序需要在不同的输入,不用的初始条件以及不同的环境下都管用,所以,在确定一个计算机程序的适应度时,必须用到许多不同的条件,这个需要根据具体问题来定。

2.3终止准则

在遗传规划中,适应度的度量对计算的要求通常比其他进化算法更高,终止准则能决定遗传规划是否成功,与其他进化算法一样,遗传规划的终止准则可以包括像迭代次数、适应度评价次数、运行时间、最佳适应度值、在几代中最佳适应度值的变化、或整个种群的适应度值的标准差等因素。

2.4终止集合

这个集合描述在语法树的叶子上可以出现的符号。终止集合是演化中的计算机程序的所有可能输入的集合,这个集合包括输入计算机程序的变量,以及我们认为重要的常数。

在遗传规划定义终止集合时,需要掌握一个平衡。如果所用集合过小,遗传规划就不能有效解决问题,若过大,则遗传规划很难在合理时间内找到一个好的解。

2.5函数集合

函数集合是用于计算机程序演化的。需要在函数集合和终止集合的定义之间找到一个恰当的平衡,这两个集合需要足够大才能表示问题的解。

函数有时候会遇到一些不合法的函数自变量,这时候就需要函数做一点修正,比如x/0,显然不合法,所以普通的除法函数不适用,必须重新定义这些函数。

2.6初始化

初始化一共有三种:完全法、生长法、半生长法。

完全法:每一个终端节点到顶层节点的节点个数为用户指定的常数D,D为语法树的深度。所以它生成的是一个完全语法树。

生长法:每个终点到顶层节点的节点个数小于或等于D。所以它生成的不一定是一个完全语法树。

半生长法:一半用完全法生成,另一半用生长法生成。

2.7遗传规划的参数

1.需要知名用哪些选择方法选出参与交叉的父代。例如与适应度成正比的选择、锦标赛选择等

2.需要指定种群规模。由于计算机程序中的自由度太大,遗传规划的种群规模通常比其他算法的大,一般至少为500,有时候也会到几千。

3.需要指定变异方法

(1)随机选择一个节点,并把那个节点之下的全部用一个随机生成的语法子树替换。我们称之为子树变异。

(2)扩张变异用随机生成的子树替换一个终端。如果在子树变异中被替换的点是一个终端,子树变异就等价于扩张变异。

(3)可以用新的随机生成的节点或终端替换随机选出的节点或终端。,我们称之为点变异或点替换变异。

(4)提升变异生成一个新的程序,它是随机选出的父代程序的子树。

(5)收缩变异用随机选出的终端一环随机选出的语法子树。

(6)置换变异随机地置换随机选出的函数自变量。

(7)随机变异程序中的常数。

4.指定变异概率pm

通常用如下办法:

对于每一个候选计算机程序xi,i∈[1,N]
   生成在[0,1]上均匀分布的随机数r
   if r<pm then
       在计算机程序xi中随机地选择节点k
       用一个随机生成的子树替换所选的由节点k开始的子树
    end id
    下一个计算机程序

5.需要指定交叉的概率pc,

通常用如下办法:

 生成在[0,1]上均匀分布的随机数r
   if r<pc then
       p1和p2交配生成子代c1和c2
    else
       c1⬅p1
       c2⬅p2
    End if 

大量经验表明,交叉对于遗传规划很重要,并且应该采用pc>=0.9的交叉概率。

6.需不需要使用精英,在遗传规划中,从一代到下一代可以保留最好的m个计算机程序。我们称参数m为精英参数。

7.需要指定初始种群中最大程序规模Di,程序的最大规模可以用它d深度来量化。

8.需要指定子代程序的最大深度D。

9.需要指定是否允许子树在交叉节时替换语法树上的终端节点。

10.需要决定是否处理在种群中出现的重复个体,重复个体会浪费计算机资源。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值