人工智能大作业解读.docx

上传人:b****3 文档编号:908414 上传时间:2022-10-13 格式:DOCX 页数:23 大小:282.54KB
下载 相关 举报
人工智能大作业解读.docx_第1页
第1页 / 共23页
人工智能大作业解读.docx_第2页
第2页 / 共23页
人工智能大作业解读.docx_第3页
第3页 / 共23页
人工智能大作业解读.docx_第4页
第4页 / 共23页
人工智能大作业解读.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

人工智能大作业解读.docx

《人工智能大作业解读.docx》由会员分享,可在线阅读,更多相关《人工智能大作业解读.docx(23页珍藏版)》请在冰豆网上搜索。

人工智能大作业解读.docx

人工智能大作业解读

实现遗传算法的0-1背包问题求解

 

目录

摘要.........................................................................................................2

一.问题描述..........................................................................................2

二.遗传算法特点介绍...........................................................................2

三.使用基本遗传算法解决0-1背包问题..............................................3

四.基本遗传算法解决0-1背包问题存在的不足...................................4

五.改进的遗传算法解决0-1背包问题..................................................6

六.心得体会..........................................................................................9

七.参考文献.........................................................................................10

八.程序代码.........................................................................................10

 

摘要:

研究了遗传算法解决0-1背包问题中的几个问题:

1)对于过程中不满足重量限制条件的个体的处理,通过代换上代最优解保持种群的进化性

2)对于交换率和变异率的理解和处理方法,采用逐个体和逐位判断的处理方法

3)对于早熟性问题,引入相似度衡量值并通过重新生成个体替换最差个体方式保持种群多样性。

4)一种最优解只向更好进化方法的尝试。

通过实际计算比较表明,本文改进遗传算法在背包问题求解中具有很好的收敛性、稳定性和计算效率。

通过实例计算,表明本文改进遗传算法优于简单遗传算法和普通改进的遗传算法。

关键词:

遗传算法;背包问题;优化

一、问题描述

0-1背包问题属于组合优化问题的一个例子,求解0-1背包问题的过程可以被视作在很多可行解当中求解一个最优解。

01背包问题的一般描述如下:

给定n个物品和一个背包,物品i的重量为Wi,其价值为Vi,背包的容量为C。

选择合适的物品装入背包,使得背包中装入的物品的总价值最大。

注意的一点是,背包内的物品的重量之和不能大于背包的容量C。

在选择装入背包的物品时,对每种物品i只有两种选择:

装入背包或者不装入背包,即只能将物品i装入背包一次。

称此类问题为0/1背包问题。

其数学模型为:

0-1背包问题传统的解决方法有动态规划法、分支界限法、回溯法等等。

传统的方法不能有效地解决0-1背包问题。

遗传算法(GeneticAlgorithms)则是一种适合于在大量的可行解中搜索最优(或次优)解的有效算法。

 

二、遗传算法特点介绍:

遗传算法(GeneticAlgorithm,GA)是1962年Holland教授首次提出了GA算法的思想是近年来随着信息数据量激增,发展起来的一种崭新的全局优化算法,它借用了生物遗传学的观点,通过自然选择、遗传、变异等作用机制,实现各个个体的适应性的提高。

基本遗传算法求解步骤:

Step1参数设置:

在论域空间U上定义一个适应度函数f(x),给定种群规模N,交叉率Pc和变异率Pm,代数T;

Step2初始种群:

随机产生U中的N个染色体s1,s2,…,sN,组成初始种群S={s1,s2,…,sN},置代数计数器t=1;

Step3计算适应度:

S中每个染色体的适应度f();

Step4判断:

若终止条件满足,则取S中适应度最大的染色体作为所求结果,算法结束。

Step5选择-复制:

按选择概率P(xi)所决定的选中机会,每次从S中随机选定1个染色体并将其复制,共做N次,然后将复制所得的N个染色体组成群体S1;

Step6交叉:

按交叉率Pc所决定的参加交叉的染色体数c,从S1中随机确定c个染色体,配对进行交叉操作,并用产生的新染色体代替原染色体,得群体S2;

Step7变异:

按变异率Pm所决定的变异次数m,从S2中随机确定m个染色体,分别进行变异操作,并用产生的新染色体代替原染色体,得群体S3;

Step8更新:

将群体S3作为新一代种群,即用S3代替S,t=t+1,转步3;

遗传算法是一种仿生算法,即模拟生命演化的算法,它从一个代表问题初始解的初始种群出发,不断重复执行选择,杂交和变异的过程,使种群进化越来越接近某一目标既最优解,如果视种群为超空间的一组点,选择、杂交和变异的过程即是在超空间中进行点集之间的某种变换,通过信息交换使种群不断变化,遗传算法通过模拟达尔文“优胜劣汰,适者生存”的原理激励好的结构,同时寻找更好的结构,作为一种随机的优化与搜索方法,遗传算法有着其鲜明的特点。

  —遗传算法一般是直接在解空间搜索,而不像图搜索那样一般是在问题空间搜索,最后才找到解(如果搜索成功的话)。

  —遗传算法的搜索随机地始于搜索空间的一个点集,而不像图搜索那样固定地始于搜索空间的初始节点或终止节点,所以遗传算法是一种随机搜索算法。

  —遗传算法总是在寻找优解(最优解或次优解),而不像图搜索那样并非总是要求优解,而一般是设法尽快找到解(当然包括优解),所以遗传算法又是一种优化搜索算法。

  —遗传算法的搜索过程是从空间的一个点集(种群)到另一个点集(种群)的搜索,而不像图搜索那样一般是从空间的一个点到另一个点地搜索。

因而它实际是一种并行搜索,适合大规模并行计算,而且这种种群到种群的搜索有能力跳出局部最优解。

  —遗传算法的适应性强,除需知适应度函数外,几乎不需要其他的先验知识。

  —遗传算法长于全局搜索,它不受搜索空间的限制性假设的约束,不要求连续性,能以很大的概率从离散的、多极值的、含有噪声的高维问题中找到全局最优解。

 

三、使用基本遗传算法解决0-1背包问题:

1:

打开数据文件

2:

设置程序运行主界面

3:

调用初始化种群模块

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背包问题的时候,在初始化或者交叉变异后可能会产生不满足重量约束条件的伪解,而对于这些伪解,基本遗传算法没有给出一个很好的处理方法,而只是又随机生成了一个满足约束条件的解作为新的个体从而替换掉原来的个体。

根据遗传算法的根本思想“优胜劣汰,适者生存”的原则,可以将不满足条件的个体用已有的最优个体来进行替换,这样,既使得种群中所有的个体均满足重量的约束条件,又保留了较优解,符合遗传算法的思想。

具体做法为:

在程序中加入一个变量保存每代的最优解,当前代在进行选择、复制、交叉、变异后如果有不满足约束条件的个体,则在种群更新时采用这个最优值作为替代。

具体做法为:

在每代遗传后通过函数FindBestandWorstIndividual()找到当前最优值并保存bestindividual中,在计算适应度函数CalculateFitnessValue()中加入:

if(w>KW)X[i]=bestindividual;//如果不是解,找最好的一个解代之

其中w为当前个体的总重量,KW为背包最大承重量,X[i]表示种群中第i个个体,bestindividual为保存的个体最优解。

2.对于交换率和变异率的理解和处理方法

根据遗传算法的基本步骤的交叉和变异操作

Step6交叉:

按交叉率Pc所决定的参加交叉的染色体数c,从S1中随机确定c个染色体,配对进行交叉操作,并用产生的新染色体代替原染色体,得群体S2;

Step7变异:

按变异率Pm所决定的变异次数m,从S2中随机确定m个染色体,分别进行变异操作,并用产生的新染色体代替原染色体,得群体S3;

可以有两种处理方法:

其一,采用先确定数目在随机选取的方法,步骤如下:

对于交叉操作:

1,根据交叉率确定应该交叉的个体数目n

2,在种群中进行n次循环

2-1随机选中种群中的一个个体a

2-2随机选中种群中异于a的一个个体b

2-3随机确定交叉位数

2-4进行交叉

对于变异操作:

1,根据变异率确定应该变异的染色体数目n

2,在种群中进行n次循环

2-1随机选中种群中的一个个体的染色体a

2-2随机选中染色体a的某位基因

2-3对进行0-1互换变异

其二,采用对每个操作单元分别进行特定概率下处理的方法,步骤如下:

对于交叉操作:

1,在种群中进行S次循环,其中S代表种群中个体的数量

2,对于每一个个体X[i](X为种群数组)做如下操作

2-1生成随机数p[0,1],判断p与的大小关系

2-2如果p说明X[i]需要交换

2-2-1随机在种群中找到异于X[i]的另一个体进行交换

2-3如果p说明X[i]不需要交换

对于变异操作:

1,在种群中进行S次循环,其中S代表种群中个体的数量

2,对每一个个体X[i]做N次循环,其中N为染色体位数

2-1对染色体的每一位

3-1生成随机数q[0,1],判断q与的大小关系

3-2如果q说明需要进行0-1互换变异2-3如果q说明不需要变

分析这两种处理方法可知:

方法一没有很好地体现随机机会均等的思想,因为在步骤1中确定的需要操作的数目n后,总体上是保证了交叉或者变异的数目,但不是对于每一个个体而言的,因而会出现有的个体被选择交叉或者变异多次而有的没有机会交叉或者变异的情况,而如果采用方法二,就体现了机会的均等性,即要求对每一个单元操作目标进行概率的验证,以确定是否变异或者交叉。

在程序中具体的实现方法体现在交叉和变异函数中:

voidCrossoverOperator(void)//交叉操作

for(i=0;i

do{p=rand()%S;//两个[0,S]的随机数

q=rand()%S;

}while(p==q);

intw=1+rand()%N;//[1,N]交换的位数

doublep=(rand()%1001)/1000.0;if(p<=Pc)

for(j=0;j

voidMutationOperator(void)//变异操作

for(i=0;i

for(j=0;j

q=(rand()%1001)/1000.0;//产生q[0,1]

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1