Python实现轮盘赌算法

最近在学Python和演化算法,写写轮盘赌算法。
算法本身的话,我看书上写挺好的就拍了一张:
在这里插入图片描述
代码:
里面的数组是30城市TSP问题得到的数据。

import numpy as np

def roulette(probability):
    probabilityTotal = np.zeros(len(probability))
    probabilityTmp = 0
    for i in range(len(probability)):
        probabilityTmp += probability[i]
        probabilityTotal[i] = probabilityTmp
    randomNumber=np.random.rand()
    result=0
    for i in range(1, len(probabilityTotal)):
        if randomNumber<probabilityTotal[0]:
            result=0
            print("random number:",randomNumber,"<index 0:",probabilityTotal[0])
            break
        elif probabilityTotal[i - 1] < randomNumber <= probabilityTotal[i]:
            result=i
            print("index ",i-1,":",probabilityTotal[i-1],"<random number:",randomNumber,"<index ",i,":",probabilityTotal[i])
    return result

probability=[0.39897898,0.05301439,0.03615747,0.02251049,0.02993633,0.02285509,0.01361222,0.03879427,0.01937278,0.0274668,0.02173864,0.03050861,0.01137698,0.00821177,0.01364433,0.01546327,0.05063628,0.03238738,0.03441008,0.01896785,0.01343442,0.01250853,0.00500341,0.01080083,0.01227628,0.00865885,0.01000899,0.01326119,0.0140035]
result=np.zeros(100).astype(int)
count=np.zeros(100).astype(int)
for i in range(100):
    print("loop",i)
    result[i]=roulette(probability)
    count[result[i]]+=1
print("result:",result)
print("count:",count)

运算结果(运行100次)
[p0,p0+p1,…,p0+p1+…+p29]的结果
在这里插入图片描述
随机数的位置(以运行的第100次为例)
在这里插入图片描述
运行100次后的结果
在这里插入图片描述
统计了一下每个位置出现的概率,发现其实出现概率和原始概率(p0,p1…,pn)的占比分布是相近的
在这里插入图片描述
Over.

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
课程设计-遗传算法解决旅行商问题python源码+项目说明+实验报告 【项目介绍】 该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶, 或者实际项目借鉴参考! 当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 1. 项目描述 一个旅行者需要到国内的10个城市旅行,各城市的坐标见cities.csv文档。请设计一个合理的线路使旅行者所行的路程之和最小。注意:每个城市只能访问一次,且最后要回到原来出来的城市。 2. 算法思路 **遗传算法**是一种模仿自然界生物进化机制的全局搜索和优化方法。其具有以下几个基本的特征,接下来是对各个特征详细的说明。 - **表现型:** 旅行依次经过的城市,即旅行的路径。例如“重庆—>北京—>上海—>天津—>成都—>… —>重庆”这是一种旅行路径,这里需要注意的是最终需要回到起点。 - **基因型:** 我根据cities.csv文件中的城市出现的顺序,对城市进行1.2.3….编码。然后旅行经过的城市依次以序号进行编码。同时因为最后要回到起点,因此起点和终点的序号应该相同。 - 这里我们根据cities.csv文件中城市的次序进行编码,即:北京-0、天津-1、上海-2、重庆-3、拉萨-4、乌鲁木齐-5、银川-6、呼和浩特-7、南宁-8、哈尔滨-9。 - **编码:** 这里我选择的编码方式为:对城市进行1.2.3…次序编码,然后一条旅行路线为一个个体,编码方式为起点到终点依次经过城市的序号编码。 - **进化:** 种群逐渐适应生存环境,即总的路径长度不断得到缩小。旅行线路的进化是以种群的形式进行的。 - **适应度:** 度量某个旅行线路对于生存环境的适应程度。这里我使用旅行线路总的路径长度倒数作为种群的适应度 - **选择:** 以一定的概率从种群中选择若干个个体。我使用轮盘的方式对种群中的个体进行选择。 - **交叉:** 两个旅行线路的某一相同位置处城市编码,前后两串分别交叉组合形成两个新的旅行线路。也称基因重组或杂交; - **变异:** 以一定的概率对种群中的个体进行基因突变,即随机选择个体基因中两个城市的编号进行交换。 3. 遗传算法步骤 开始循环直至找到满意的解。 1. 评估每条染色体所对应个体的适应度。 2. 遵照适应度越高,选择概率越大的原则,从种群中选择两个个体作为父方和母方。 3. 抽取父母双方的染色体,进行交叉,产生子代。 4. 对子代的染色体进行变异。 5. 重复2,3,4步骤,直到新种群的产生。 结束循环。 4. 程序代码 这里一共有三个模块分别是Life.py、GA.py、TSP.py,每个模块的作用如下: - Life.py为种群中的旅游线路个体类,里面包含旅行路线的基因型以及适应值 - GA.py为遗传算法内,里面主要包含了遗传算法的一些函数,例如基因交叉、基因突变、轮盘选择个体、生成个体、生成新一代种群等函数。 - TSP.py为旅行商问题的主要运行模块,包含对城市数据的读取,计算适应值、绘制适应度函数的进化曲线和最终选择的线路图等功能。 具体代码请查看目录“lab3” 5. 运行结果 这里设置一个种群中包含20个体,迭代200次后计算得出最优路径。gen表示迭代到第i代种群,dis表示该种群中最优个体的总旅行距离。 6. 结果分析 由适应度函数的进化曲线可得知,刚开始种群进化速度很快,当适应值接近最优值时进化速度放缓。由图像可知在接近100代种群时适应值收敛。说明遗传的收敛效果良好。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值