人工智能大作业解读.docx
《人工智能大作业解读.docx》由会员分享,可在线阅读,更多相关《人工智能大作业解读.docx(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、人工智能大作业解读 实现遗传算法的0-1背包问题求解 书目 摘要.2 一问题描述.2 二遗传算法特点介绍.2 三运用基本遗传算法解决0- 1背包问题.3 四基本遗传算法解决0- 1背包问题存在的不足.4 五改进的遗传算法解决0- 1背包问题.6 六心得体会.9 七参考文献.10 八程序代码.10 摘要:探讨了遗传算法解决0-1背包问题中的几个问题: 1) 对于过程中不满意重量限制条件的个体的处理,通过代换上代最优解保持种群的进化性 2) 对于交换率和变异率的理解和处理方法,采纳逐个体和逐位推断的处理方法 3) 对于早熟性问题,引入相像度衡量值并通过重新生成个体替换最差个体方式保持种群多样性。
2、4) 一种最优解只向更好进化方法的尝试。 通过实际计算比较表明,本文改进遗传算法在背包问题求解中具有很好的收敛性、稳定性和计算效率。通过实例计算,表明本文改进遗传算法优于简洁遗传算法和一般改进的遗传算法。 关键词:遗传算法;背包问题 ;优化 一、问题描述 0-1背包问题属于组合优化问题的一个例子,求解0-1背包问题的过程可以被视作在许多可行解当中求解一个最优解。01背包问题的一般描述如下: 给定n个物品和一个背包,物品i的重量为Wi,其价值为Vi,背包的容量为C。选择合适的物品装入背包,使得背包中装入的物品的总价值最大。留意的一点是,背包内的物品的重量之和不能大于背包的容量C。在选择装入背包的
3、物品时,对每种物品i只有两种选择:装入背包或者不装入背包,即只能将物品i装入背包一次。称此类问题为0/1背包问题。 其数学模型为: 0-1背包问题传统的解决方法有动态规划法、分支界限法、回溯法等等。传统的方法不能有效地解决0-1背包问题。遗传算法(Genetic Algorithms)则是一种适合于在大量的可行解中搜寻最优(或次优)解的有效算法。 二、遗传算法特点介绍: 遗传算法(Genetic Algorithm, GA)是1962年Holland教授首次提出了GA算法的思想是近年来随着信息数据量激增,发展起来的一种崭新的全局优化算法,它借用了生物遗传学的观点,通过自然选择、遗传、变异等作用
4、机制,实现各个个体的适应性的提高。 基本遗传算法求解步骤: Step 1 参数设置:在论域空间U上定义一个适应度函数f(x),给定种群规模N,交叉率Pc和变异率Pm,代数T; Step 2 初始种群:随机产生U中的N个染色体s1, s2, , sN,组成初始种群S=s1, s2, , sN,置代数计数器t=1; Step 3 计算适应度:S中每个染色体的适应度f() ; Step 4 推断:若终止条件满意,则取S中适应度最大的染色体作为所求结果,算法结束。 Step 5 选择-复制:按选择概率P(xi)所确定的选中机会,每次从S中随机选定1个染色体并将其复制,共做N次,然后将复制所得的N个染色
5、体组成群体S1; Step 6 交叉:按交叉率Pc所确定的参与交叉的染色体数c,从S1中随机确定c个染色体,配对进行交叉操作,并用产生的新染色体代替原染色体,得群体S2; Step 7 变异:按变异率Pm所确定的变异次数m,从S2中随机确定m个染色体,分别进行变异操作,并用产生的新染色体代替原染色体,得群体S3; Step 8 更新:将群体S3作为新一代种群,即用S3代替S,t=t+1,转步3; 遗传算法是一种仿生算法, 即模拟生命演化的算法,它从一个代表问题初始解的初始种群动身, 不断重复执行选择, 杂交和变异的过程, 使种群进化越来越接近某一目标既最优解,假如视种群为超空间的一组点, 选择
6、、杂交和变异的过程即是在超空间中进行点集之间的某种变换, 通过信息交换使种群不断改变, 遗传算法通过模拟达尔文“优胜劣汰, 适者生存”的原理激励好的结构, 同时找寻更好的结构, 作为一种随机的优化与搜寻方法, 遗传算法有着其显明的特点。 遗传算法一般是干脆在解空间搜寻, 而不像图搜寻那样一般是在问题空间搜寻, 最终才找到解(假如搜寻胜利的话)。 遗传算法的搜寻随机地始于搜寻空间的一个点集, 而不像图搜寻那样固定地始于搜寻空间的初始节点或终止节点, 所以遗传算法是一种随机搜寻算法。 遗传算法总是在找寻优解(最优解或次优解), 而不像图搜寻那样并非总是要求优解, 而一般是设法尽快找到解(当然包括优
7、解), 所以遗传算法又是一种优化搜寻算法。 遗传算法的搜寻过程是从空间的一个点集(种群)到另一个点集(种群)的搜寻,而不像图搜寻那样一般是从空间的一个点到另一个点地搜寻。 因而它实际是一种并行搜寻, 适合大规模并行计算, 而且这种种群到种群的搜寻有实力跳出局部最优解。 遗传算法的适应性强, 除需知适应度函数外, 几乎不须要其他的先验学问。 遗传算法长于全局搜寻, 它不受搜寻空间的限制性假设的约束,不要求连续性, 能以很大的概率从离散的、多极值的、含有噪声的高维问题中找到全局最优解。 三、运用基本遗传算法解决0- 1背包问题: 1: 打开数据文件 2: 设置程序运行主界面 3: 调用初始化种群模
8、块 3- 1: 根据肯定的种群规模和染色体长度以基因为单位用随机产生的0- 1对个体赋值 3- 2: 调用计算适应度函数 4: 以最大进化代数为循环终止条件起先进行循环 4- 1: 调用产生新一代个体的函数 4- 1- 1: 调用选择函数 4- 1- 2: 调用交叉函数 4- 1- 3: 调用变异函数 4- 1- 4: 调用计算适应度函数 5: 调用计算新一代种群统计数据函数 6: 调用输出新一代统计数据函数 7: 返回到第四步, 直至循环结束 四、基本遗传算法解决0- 1背包问题存在的不足: 1.对于过程中不满意重量限制条件的个体的处理 在用基本遗传算法解决0- 1背包问题的时候,在初始化或
9、者交叉变异后可能会产生不满意重量约束条件的伪解,而对于这些伪解,基本遗传算法没有给出一个很好的处理方法,而只是又随机生成了一个满意约束条件的解作为新的个体从而替换掉原来的个体。依据遗传算 法的根本思想“优胜劣汰,适者生存”的原则,可以将不满意条件的个体用已有的最优个体来进行替换,这样,既使得种群中全部的个体均满意重量的约束条件,又保留了较优解,符合遗传算法的思想。 详细做法为: 在程序中加入一个变量保存每代的最优解,当前代在进行选择、复制、交叉、变异后假如有不满意约束条件的个体,则在种群更新时采纳这个最优值作为替代。 详细做法为:在每代遗传后通过函数FindBestandWorstIndivi
10、dual()找到当前最优值并保存bestindividual中,在计算适应度函数CalculateFitneValue()中加入: if(wKW) Xi=bestindividual; /假如不是解,找最好的一个解代之 其中w为当前个体的总重量,KW为背包最大承重量,Xi表示种群中第i个个体,bestindividual为保存的个体最优解。 2.对于交换率和变异率的理解和处理方法 依据遗传算法的基本步骤的交叉和变异操作 Step 6 交叉:按交叉率Pc所确定的参与交叉的染色体数c,从S1中随机确定c个染色体,配对进行交叉操作, 并用产生的新染色体代替原染色体,得群体S2; Step 7 变异:
11、按变异率Pm所确定的变异次数m,从S2中随机确定m个染色体,分别进行变异操作,并用产生的 新染色体代替原染色体,得群体S3; 可以有两种处理方法: 其一,采纳先确定数目在随机选取的方法,步骤如下: 对于交叉操作: 对于变异操作: 1,依据交叉率确定应当交叉的个体数目1,依据变异率确定应当变异的染色体数n 目n 2,在种群中进行n次循环 2,在种群中进行n次循环 2-1随机选中种群中的一个个体a 2-1随机选中种群中的一个个体的染2-2随机选中种群中异于a的一个个色体a 体b 2-2随机选中染色体a的某位基因 2-3随机确定交叉位数 2-4进行交叉 2-3对进行0-1互换变异 其二,采纳对每个操
12、作单元分别进行特定概率下处理的方法,步骤如下: 对于交叉操作: 1,在种群中进行S次循环,其中S代表种群中个体的数量 2,对于每一个个体Xi(X为种群数组)做如下操作 2-1生成随机数p0,1,推断p与的大小关系 2-2假如p说明Xi须要交换 对于变异操作: 1,在种群中进行S次循环,其中S代表种群中个体的数量 2,对每一个个体Xi做N次循环,其中N为染色体位数 2-1对染色体的每一位 3-1生成随机数q0,1,推断q与 的大小关系 说明须要进行0-1互换说明不须要变 2-2-1 随机在种群中找到异于Xi的另一个体进行交换 2-3假如p 说明Xi不须要交换 3-2假如q 变异2-3假如q分析这
13、两种处理方法可知:方法一没有很好地体现随机机会均等的思想,因为在步骤1中确 定的须要操作的数目n后,总体上是保证了交叉或者变异的数目,但不是对于每一个个体而言的,因而会出现有的个体被选择交叉或者变异多次而有的没有机会交叉或者变异的状况,而假如采纳方法二,就体现了机会的均等性,即要求对每一个单元操作目标进行概率的验证,以确定是否变异或者交叉。在程序中详细的实现方法体现在交叉和变异函数中: void CrooverOperator(void)/交叉操作 for(i=0; i q=rand()%S; while(p=q); int w=1+rand()%N;/1,N交换的位数 double p=(r
14、and()%1001)/1000.0; if(p for(j=0;j void MutationOperator(void)/变异操作 for (i=0; i for (j=0; j q=(rand()%1001)/1000.0;/产生q0,1 if (q if(Xi.chromsomej=1)Xi.chromsomej=0; else Xi.chromsomej=1;1.对于算法早熟性的分析及解决方法 遗传算法中种群中的个体由初始化时的具有多样性,可能会由于在进化过程中一些超常个体限制其它个体的进化这个个体的适应度大大优于种群内的其它值,由于适者生存原则这个个体被不断复制从而充溢了整个种群,
15、使得种群的多样应大大降低,进化停滞,从而出现算法收敛于局部最优解的现象,称为早熟现象。 早熟现象的可能解法: 1) 通过提高变异率来增加种群的多样性,以期更优解的出现,这也是最简洁基本遗传算法中不添加相关操作的状况下唯一的一种方法,然而这种方法有明显的弊端:在提高变异率获得多样性种群的同时,个体变异的机会增加,使得较优解发生变异,从而遗传算法丢失了其优于其它算法的优越性,所以这种方法不是很好地解决方法。 2) 引入多样性衡量和处理 基本思路:在出现进化停滞现象时要引入新的个体来增加种群的多样性。 做法:1,推断是否达到早熟现象 对于种群中S个个体,推断等位基因的相等程度,即引入一个参数值sam
16、e,假如same达到肯定的 理论值大小就可以认为达到了早熟现象。 2,早熟现象的处理,即引入新的个体。 处理过程中应当不违反适者生存的原则,所以应当保留较好的个体,所以首先选中适应度最小的 个体执行删除操作,然后随机生成一个新的符合重量限制且打破早熟现象的新个体。 详细实现见函数:void checkalike(void) /相像度校验 for( i=0;i for(j=0;j if(temp!=Xk.chromsomej) break; if(j=N)same+; if(sameN*0.5)/大于50%作为判定为早熟 /确定最小 int minindex=0; for(intn=0;n if
17、(Xn.fitne bool m=(rand()%10 Xminindex.fitne+=m*valuej; /个体的总价值 2.一种最优解只向更好进化方法的尝试 基本思路为:每一组的最优解是一个独特的个体,我们求解的问题最终的最优解或者近似解都产生于这个特别的个体,最优解只向更好进化方法中规定:每代中选出一个最优解并做好相应的记录或者标记,最优解参加交叉和变异,只是在交叉或者变异时对最优解进行前后适应度的比较,假如发觉交叉或者变异后适应度大于操作前适应度,则保存操作后的结果,假如发觉交叉或者变异后适应度小于操作前适应度,则禁止最优解的操作,而不禁止与最优解进行交叉的个体的改变。这样,每一代中
18、的最优解的特性可以通过交叉传递给同代中的其它个体,而保证种群肯定会向更好的方向进化。 做法在交叉后和变异后调用以下函数推断: int comp(individual bestindividual,individual temp)/比较函数 int fit=0,w=0;/第一种不变:操作后不满意重量函数,其次种:操作后适应度小于操作前 for(int i=0;iKW)return -1; return (bestindividual.fitnefit?-1:1);/假如小于原来值或者不满意重量函数,则返回-1 五、改进的遗传算法解决0- 1背包问题: 1、参数设置: #define S 500
19、#define Pc 0.8 #define Pm 0.01 #define KW 878 #define N 20 #define T 1000 /种群的规模 /交叉概率 /突变概率 /背包最大载重 /物体总数 /最大换代数 2个体的表示和染色体编码 用变量i代表物件, i = 1, 2, ,n 定义变量xi,其含义为: xi= 1表示:第i个物件被选入背包, xi = 0表示第i个物件没有被选入背包。考虑n 个物件的选择与否, 就可以得到一个长度为n的0, 1序列。 由此可见遗传算法应用于上述背包问题时,采纳简洁二进制编码较为相宜1 每一组编码即为某一个个体的基因表示, 称其为染色体, 染
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工智能 作业 解读
限制150内