旅行商问题遗传算法python_使用遗传算法解决TSP问题(莫烦python 学习笔记)

相信很多人都了解过遗传算法,属于启发式算法。

遗传算法的资料很多,这里不多赘述,简单说一下建模流程:编码(coding and decoding),将问题的可行解转换成计算机理解的语言,也就是数字。

建立种群(population),也就是可行解的集合,比喻成一堆蚂蚁。

挑选合适的评价函数(fitness),怎么认为一个蚂蚁优秀,评价结果为数字y,那y越大越优秀。

进化(evolution),挑选出比较优秀的蚂蚁,进行交叉组合和变异,生成新的蚂蚁,挑选出新的种群,进化多轮次后找出最优解。

重点与难点有三点:如何建立种群,也就是建构最初始的可行解的集合。

比如我们求 y = sin(10*x)*x 在 [0,1]上的最大值,那我们需要将一堆[0,1]区间内的小数转换成所谓的“蚂蚁”。编码规则有几种,编码方式有很多,一般采用二进制编码,具体的方式可以参照下面的链接进行细致的学习。遗传算法_百度百科​baike.baidu.com

我们把[0,1]分成1000等份,那就是0,0.001,···到1。1001个点, 2 * 9 < 1001 < 2 ** 10,所以需要10位的编码,比如0101010101,如何将它与[0,1]的数字一一对应,保证我们的集合包括了所有的可行解呢?由等比数列公式易得:

这样,我们的编码解码过程确立。

2. 挑选合适的评价机制。怎么认为它优秀呢,y = sin(10*x)*x ,y越大越优秀;求邮递员送信的最短距离,那距离越小越优秀,但适应度(fitness)是单向的,一般我们认为越大越好,所以求解最小化的问题,需要求解倒数变成求解最大化问题。

3. 进化,这里的进化指的是两个个体拿出各自的基因,进行交叉配对,比如

A —— [0,1,1,0] B——[1,0,0,0] 拿出A的前两位,B的后两位,组合成C ——[0,1,0,0]这样就组成了一个新的个体,当然很多问题需要特殊的进化方法,比如tsp问题。

变异,比如C的某一位变化了,这时采用二进制编码的好处也出来了,变异操作简单,0-1转换,变异概率很低,但有可能达到好的效果,所以变异的操作不能少。

挑选新种群的时候,一般是有放回的拿,谁的适应度高,谁被抽中的概率大,按照这样的方式建立新的种群,接着进化,直到达到终止条件。

接下来我们介绍tsp问题——TSP问题(Traveling Salesman Problem)又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。——百度百科

我们用遗传算法怎么解决这个问题呢?

按照之前的流程来,如何编码解码呢?每一个解法是一条路径,有起点,终点和途径的每一个点,二进制编码很困难,很难表示,这里我们采用直接编码的方式,用点的顺序表示一条路径,比如共三个点,那[0,1,2],就是从0点出发,途径1点,最终到达2点。

总解法只有6个,种群个数不重要,那评价函数呢,总路程是我们想评价的指标,那取倒数可以将问题转化为最大化问题,可是取倒数后,适应度的差异可能很小,可以采用指数,求e的幂次方,来增大适应度的差异。

如何进化,两个路径如何交叉配对,莫烦的解法是随机选取一些下标,把他们作为一个新数组,另外的数字从另一个路径中取,顺序按照此路径的方法,这样就使得每一个点都走了一遍。我在想更好的进化操作,应该会有。

变异,随机交换两个点。

值得一说的是,这里交叉的概率设置的比较低,只有0.1;变异的概率和一般问题相似,0.003。

具体的讲解视频可见哔哩哔哩的莫烦python

具体代码如下:https://github.com/MorvanZhou/Evolutionary-Algorithm/blob/master/tutorial-contents/Genetic%20Algorithm/Travel%20Sales%20Person.py​github.com

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值