【Unity3D】AI实例之遗传算法解决背包问题

本文通过Unity3D介绍了遗传算法在解决背包问题中的应用,讲解了遗传算法的基本概念、物竞天择的实现,以及遗传算法的步骤,包括适应度函数、选择函数、遗传运算等。通过具体实例,展示了如何构建基因、环境,评估适应性,并通过轮盘赌选择法进行种群进化。最后,分析了遗传算法的优缺点。
摘要由CSDN通过智能技术生成

前言

为了做毕设内容,忙碌了整整一个月,前前后后查阅了很多资料,总算摸索出三个有关遗传算法的小demo,这里便通过一个最简单也最形象的背包问题来进行讲解,也方便以后我重新回来学习。

什么是遗传算法

遗传算法(Genetic Algorithm,以下简称GA算法或GA)的概念是在1975年由密根大学的J.Holland提出的。GA算法是模拟达尔文生物进化论的自然选择和遗传学机理的生物集暖过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。既然是模拟生物种群进化过程,学过生物的你们肯定知道达尔文在进化论中提出的一个非常重要的观点:物竞天择。在GA算法中是如何理解和实现物竞天择的呢?

遗传算法中的物竞天择

【物竞】

适应度函数
GA算法中以个体适应度的大小来评定各个个体的优劣程度,从而决定其基因遗传机会的大小。说白了就是让这个函数来当上帝,去评判这个生物个体适不适合在其目前所处的自然界中生存下去。

【天择】

选择函数
在自然界中,越是适应环境的个体存活率越高,也就越有可能繁殖后代。选择函数也便是在做上帝委托的这份“工作”——筛选适应环境的个体进行种群繁衍。
可有人会问,适应度越高的个体的后代就一定越多吗?答案是否定的。自然界存在很多不可控因素,如:种族瘟疫、干旱、洪水、暴雪等等,而一个简单的GA算法是无法实现所有的不可控因素的。因此这里所说的适应度越高后代越多,只是从概率上来说更多。
那么我们又该怎么来建立这种概率关系呢?那便是利用优秀的染色体产生子代,才能保证子代更加优秀,以达到全局优化的目的。选择优秀染色体的方法很多,如:轮盘赌选择法、竞赛(亦称竞争)选择法、分级选择法、稳定状态选择法等。目前常用的选择方法是轮盘赌选择法。它不仅可以选择优秀的染色体,还能维持生物的多样性。
轮盘赌选择法
图1
如上图1,一二三四等奖项的总概率为1,但所占轮盘面积不同,转动一次轮盘,指针落到所指区域就会得到该区域的奖项,即产生一次结果。(:边界线可由自己规定所属区域)图中很明显地表示出:奖项所占面积越大,被选中的几率越高。这就是轮盘赌选择法的思想。通过此种思想,就可以实现选择函数被委托的“工作”。
又有人会问:我知道了轮盘赌的思想,可代码又无法下手,该怎么办?这里提出一个在编程语言中稍微难以理解的概念:权重。在上述的图1中,假设在100次轮盘转中,一等奖出现了12次,那么可以有这样的定义:一等奖出现的概率=一等奖出现的次数/所有奖项出现的次数。一等奖出现的次数就可以认为是一等奖所占权重(即12次),那么所有奖项出现的次数就是总权重(即100次)。该公式就可以写为:一等奖出现的概率=一等奖所占权重/总权重(即一等奖出现概率=12/100=0.12)。在实际计算中,为了避免浮点数精度问题,一般写为:一等奖所占权重=一等奖出现的概率*总权重(即一等奖所占权重=0.12*100=12)。
如果看懂了上述描述,那

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值