遗传算法解决tsp问题

本文主要介绍遗传算法的一些基本思想,主要是代码思想方面的,并不用于考试....在我的资源中可以找到一份课件(并不是我们学校的,是老师给的,我们貌似并不开这门课)

另外会在下一篇附上用遗传算法解决tsp问题的代码。

遗传算法的思想其实和生物学有密切的联系(话说我高中选的是生物,已经忘光了哈),遗传算法相比与动态规划,贪心之类的算法,区别主要在于,贪心之类的一开始给出一种计算方式,而我们从已知条件,通过这种计算方式最终得到解,并且解一定是正确的(如果贪心策略经过验证)。而遗传算法一开始会给出一个种群(其实质就是解的集合),当然这些解不一定是正确的,所以我们通过一步步演变,就像是优胜劣汰,最终得到尽可能正确的解。

先介绍一些遗传算法的名词(后面会举例子方便理解)。

基因:染色体内部的某个表现,如何将问题表示成基因需要一定的技巧。

染色体:其实质就是一个解,也就是一个个体,遗传算法优胜劣汰直接作用的对象

适应性:就是一个评估函数,给出一条染色体,看看他是不是我们需要的,如果不需要,那么被淘汰的可能性好高(注意并不是一定被淘汰,就算适应性很低,也有可能存活)

选择:即染色体的选择

交叉:两个染色体的某一处断裂,各自交换断裂的部分(这个地方交换的方法其实也很多,但大概意思都差不多,按照程序书写方便与最终效果选择)

变异:某一个染色体的某一个基因(或多个,也是根据情况选择)发生改变。

简单来说现在有一个汉堡店,他有三个选择,汉堡包价格50美分还是1美元,餐馆大还是小,服务快还是慢,最终考虑汉堡包为了尽可能的盈利,应该怎样选择。

对于这个问题,汉堡店就是一个染色体,它里面有三个基因,分别是汉堡包价格,餐馆大小,服务快慢。

适应性就是我们设计函数,比如当汉堡包价格低,餐馆服务快,大餐馆会怎样(以此类推,应该共有8种情况吧)

那么如何表现基因呢,常用的方法就是二进制,比如50美分就是1,1美元就是0,大餐馆就是1,小餐馆就是0,服务快就是1,服务慢就是0,

那么低价格,服务快,大餐馆就是111,这就是一个解

下面附一个



生成初始群,这个你随机生成即可,适应度这里不太好表示(对于大多数情况适应性函数也只能取个大概)

选择常用的方法是轮盘赌选择法。

终止就是你设计一下最多迭代次数,超过这个次数停止。

步骤: 1、求群体中所有个体的适应值的总和 S ;
             2、产生一个在 0 与 S 之间的随机数 m ; 

             3、从群体中编号为 1 的个体开始,将其适应
             值与后继个体的适应值相加,直到累加和等
             于或大于 m ,   则停止.  其中那个最后加进去
              的个体即为选择的个体 .

这样能达到可能存活性为80%它被选择的可能性就为80%

交叉    比如111,001那么我们交叉第二位(含之后的)就能得到101,011)

          交叉方式的有很多,你可以自己选择在哪个点断开,也可以选择几个点断裂,比如两个点断裂,就两边交换,中间保留(tsp的代码采用的是这种方法)

 变异   这个比较好理解,就是你随机一个位置这个位置上的基因发生变化,有时是引入新的基因,有时是随机两个位置,这两个位置交换(比如tsp问题,因为那个要求染色体是全排列,你肯定不能随便修改里面的基因)

以上就是一个轮回。






下面讨论tsp问题,对于tsp问题,显然用二进制来表示是不合适的,一般对于区间在[a,b]

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值