第一篇:人工智能大作业解读
实现遗传算法的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背包问题。遗传算法(Genetic Algorithms)则是一种适合于在大量的可行解中搜索最优(或次优)解的有效算法。
二、遗传算法特点介绍:
遗传算法(Genetic Algorithm, GA)是1962年Holland教授首次提出了GA算法的思想是近年来随着信息数据量激增,发展起来的一种崭新的全局优化算法,它借用了生物遗传学的观点,通过自然选择、遗传、变异等作用机制,实现各个个体的适应性的提高。基本遗传算法求解步骤:
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个染色体组成群体S1;
Step 6 交叉:按交叉率Pc所决定的参加交叉的染色体数c,从S1中随机确定c个染色体,配对进行交叉操作,并用产生的新染色体代替原染色体,得群体S2;
Step 7 变异:按变异率Pm所决定的变异次数m,从S2中随机确定m个染色体,分别进行变异操作,并用产生的新染色体代替原染色体,得群体S3;
Step 8 更新:将群体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.对于交换率和变异率的理解和处理方法
根据遗传算法的基本步骤的交叉和变异操作
Step 6 交叉:按交叉率Pc所决定的参加交叉的染色体数c,从S1中随机确定c个染色体,配对进行交叉操作,并用产生的新染色体代替原染色体,得群体S2;
Step 7 变异:按变异率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互换变异
其二,采用对每个操作单元分别进行特定概率下处理的方法,步骤如下:
对于交叉操作:
1,在种群中进行S次循环,其中S代表种群中个体的数量
2,对于每一个个体X[i](X为种群数组)做如下操作
2-1生成随机数p[0,1],判断p与的大小关系 2-2如果p说明X[i]需要交换
对于变异操作:
1,在种群中进行S次循环,其中S代表种群中个体的数量
2,对每一个个体X[i]做N次循环,其中N为染色体位数
2-1对染色体的每一位
3-1生成随机数q[0,1],判断q与 的大小关系
说明需要进行0-1互换说明不需要变
2-2-1 随机在种群中找到异于X[i]的另一个体进行交换 2-3如果p 说明X[i]不需要交换
3-2如果q
变异2-3如果q分析这两种处理方法可知:方法一没有很好地体现随机机会均等的思想,因为在步骤1中确
定的需要操作的数目n后,总体上是保证了交叉或者变异的数目,但不是对于每一个个体而言的,因而会出现有的个体被选择交叉或者变异多次而有的没有机会交叉或者变异的情况,而如果采用方法二,就体现了机会的均等性,即要求对每一个单元操作目标进行概率的验证,以确定是否变异或者交叉。在程序中具体的实现方法体现在交叉和变异函数中:
void CrossoverOperator(void)//交叉操作 for(i=0;i
q=rand()%S;}while(p==q);
int w=1+rand()%N;//[1,N]交换的位数
double p=(rand()%1001)/1000.0;if(p<=Pc)
for(j=0;j void MutationOperator(void)//变异操作 for(i=0;i for(j=0;j q=(rand()%1001)/1000.0;//产生q[0,1] if(q if(X[i].chromsome[j]==1)X[i].chromsome[j]=0;else X[i].chromsome[j]=1;1.对于算法早熟性的分析及解决方法 遗传算法中种群中的个体由初始化时的具有多样性,可能会由于在进化过程中一些超常个体限制其它个体的进化——这个个体的适应度大大优于种群内的其它值,由于适者生存原则这个个体被不断复制从而充满了整个种群,使得种群的多样应大大降低,进化停滞,从而出现算法收敛于局部最优解的现象,称为早熟现象。早熟现象的可能解法: 1)通过提高变异率来增加种群的多样性,以期更优解的出现,这也是最简单基本遗传算法中不添加相关操作的情况下唯一的一种方法,然而这种方法有明显的弊端:在提高变异率获得多样性种群的同时,个体变异的机会增加,使得较优解发生变异,从而遗传算法丧失了其优于其它算法的优越性,所以这种方法不是很好地解决方法。2)引入多样性衡量和处理 基本思路:在出现进化停滞现象时要引入新的个体来增强种群的多样性。做法:1,判断是否达到早熟现象 对于种群中S个个体,判断等位基因的相等程度,即引入一个参数值same,如果same达到一定的 理论值大小就可以认为达到了早熟现象。 2,早熟现象的处理,即引入新的个体。 处理过程中应该不违反适者生存的原则,所以应该保留较好的个体,所以首先选中适应度最小的 个体执行删除操作,然后随机生成一个新的符合重量限制且打破早熟现象的新个体。 具体实现见函数:void checkalike(void) //相似度校验 for(i=0;i for(j=0;j if(temp!=X[k].chromsome[j]) break;if(j==N)same++;if(same>N*0.5)//大于50%作为判定为早熟 //确定最小 int minindex=0;for(intn=0;n if(X[n].fitness bool m=(rand()%10<5)?0:1;X[minindex].chromsome[j]=m;X[minindex].weight+=m*weight[j];//个体的总重量 X[minindex].fitness+=m*value[j]; //个体的总价值 2.一种最优解只向更好进化方法的尝试 基本思路为:每一组的最优解是一个独特的个体,我们求解的问题最终的最优解或者近似解都产生于这个特殊的个体,最优解只向更好进化方法中规定:每代中选出一个最优解并做好相应的记录或者标记,最优解参与交叉和变异,只是在交叉或者变异时对最优解进行前后适应度的比较,如果发现交叉或者变异后适应度大于操作前适应度,则保存操作后的结果,如果发现交叉或者变异后适应度小于操作前适应度,则禁止最优解的操作,而不禁止与最优解进行交叉的个体的变化。这样,每一代中的最优解的特性可以通过交叉传递给同代中的其它个体,而保证种群一定会向更好的方向进化。做法在交叉后和变异后调用以下函数判断: int comp(individual bestindividual,individual temp)//比较函数 { } int fit=0,w=0;//第一种不变:操作后不满足重量函数,第二种:操作后适应度小于操作前 for(int i=0;i 五、改进的遗传算法解决0-1背包问题: 1、参数设置: #define S 500 #define Pc 0.8 #define Pm 0.01 #define KW 878 #define N #define T 1000 //种群的规模 //交叉概率 //突变概率 //背包最大载重 //物体总数 //最大换代数 2个体的表示和染色体编码 用变量i代表物件, i = 1, 2, ,n 定义变量xi,其含义为: xi= 1表示:第i个物件被选入背包, xi = 0表示第i个物件没有被选入背包。考虑n 个物件的选择与否, 就可以得到一个长度为n的0, 1序列。由此可见遗传算法应用于上述背包问题时,采用简单二进制编码较为适宜1 每一组编码即为某一个个体的基因表示, 称其为染色体, 染色体长度取决于待分配的物件的个数n.在编码形式的表示方法中,形如二进制编码 10010101 表示为一个待分配的物件的个数为8(编码长度)的一个背包问题的一个解, 则该个体对应于选择了物件1, 4, 6, 8,即第1, 4, 6, 8个物品被放入了背包。用数据格式表示为: struct individual { bool chromsome[N];double fitness; double weight;}; //个体结构体 //染色体编码 //适应度//即本问题中的个体所得价值 //总重量 2产生初始种群 n个待分配的物件随机产生S个长度为n的二进制串, 即种群中个体的染色体编码的每一位按等概率在0与1中选择S 指的是种群规模, 即种群中的个体数目.void GenerateInitialPopulation(void);//初始种群 3适应度函数 背包内物件的总重量为a1x1 + a2x2 + ,anxn, 物件的总价值为c1x1 + c2x2 + , + cn xn 0-1背包问题中采用每个个体的总价值作为适应度,在满足背包容量的条件下,价值越大,适应度越高。所以适应度求解方法为: f i = c1x1 + c2x2 + , + cnxn(当t a1x1 + a2x 2 + , + anxn < = c,xj = 0, 1)考虑到会有不不满足容量条件的个体则: f i = 0(当a1x1 + a2x2 + , + anxn > c,xj = 0, 1) 上述适应度函数基于一个考虑违背约束条件的惩罚处理,根据上述具体问题适应度函数值不可能为零, 所以当随机产生的某个个体违背约束条件时, 通过把其适应度函数值罚为0而达到淘汰该个体的目的。4选择-复制操作 参照适应度函数值和约束条件用赌轮选择法进行模拟,具体为: (1)根据适应度函数值和约束条件, 罚掉部分个体(前述不满足容量条件的个体) (2)对于满足约束条件的个体, 根据适应度函数值计算个体被选中的概率,称为选择概率: 公式为: P = p()称为染色体xi(i=1, 2, …, n)的选择概率 (3)根据轮盘赌累计公式为: iqP(xj) i j1 称为染色体xi(i=1, 2, …, n)的积累概率 (4)对已得到的累计概率作如下处理,完成选择操作: 1)在[0, 1]区间内产生一个均匀分布的伪随机数r。2)若r≤q1,则染色体x1被选中。 3)若qk-1 (1)随机产生一个交叉点的位置 (2)随机选取当前代中的两个个体作为父个体 (3)根据交叉点的位置, 做单点交叉 6变异操作: 根据变异率Pm (1)随机产生变异点的位置 (2)在变异点位置作0-1翻转 8、算法终止 程序中定义了一个最优值,stop= 一般情况下这个最优值达不到,一旦程序在执行过程中达到此最优值,也就没有必要在执行下去,因为这必定是最好的解,所以保存最优值和最优解,结束。 如果程序的最优值达不到理想情况下的stop,那么根据最大换代次数来结束程序,在结束后的种群中找到一个最好的解作为本问题的最优解,程序结束。 4算例 1.小规模问题的算例: 算例1-1:设定物品价值value={50,30,60,80,20}重量weight{35,40,40,20,15}背包的最大承重量为100 遗传算法中参数:群体大小S=5,交叉率Pc=0.8,变异率Pm=0.05,最大换代次数T=20, 通过多次试验比较本文改进后遗传算法和其他得到结果如下表所示: 本文改进的遗传算法: 实验总次数:30 达到全局最优解次数:27 未达到全局最优解:3 由实验结果可知在小规模算例中,本文改进的遗传算法优于前两者。2.较大规模问题求解算例: 遗传算法中参数: 群体大小S=5,交叉率Pc=0.8,变异率Pm=0.05,最大换代次数T=800,相似度取5% 实例1: 价值value:{ 92,4,43,83,84,68,92,82,6,44,32,18,56,83,25,96,70,48,14,58} 重量weight:{ {44,46,90,72,91,40,75,35,8,54,78,40,77,15,61,17,75,29,75,63}} 背包的最大承重量:878 实例2: 价值value: {220,208,198,192,180,180,165,162,160,158,155,130,125,122,120,118,115,110,105,101,100,100,98,96,95,90,88, 82,80,77,75,73,72,70,69,66,65,63,60,58,56,50,30,20,15,10,8,5,3,1}; 重量weight: {80,82,85,70,72,70,66,50,55,25,50,55,40,48,50,32,22,60,30,32,40,38,35,32,25,28,30,22,25,30,45,30,60,50,20,65, 20,25,30,10,20,25,15,10,10,10,4,4,2,1}; 背包最大承重量:1000 本文改进遗传算法实验结果: 实例1: 实例2: 由此得出结论:遗传算法优于前两种。 六.心得体会: 遗传算法是一种模拟生物进化在解中求解最优值的方法,实现起来方便,适于处理大宗数据,然而基于简单基本遗传算法在求解不同问题时应该具体问题具体分析,找的结合所解问题的优化方法,例如本文分析的遗传算法解决0-1背包问题,虽然简单基本遗传算法可以求出一个比较好的解出来,但是分析可知,结果并不令人满意,在对问题进行细致的分析、查阅相关资料和深入思考后,我提出了自己认为比较好的改进方法并通过实践结合具体的算例把改进后的遗传算法和与原来的简单遗传算法和参考文献中的一种改进方法进行了比较,结果显示本文改进的遗传算法无论在小规模数据处理还是较大规模数据处理方面均优于前两者,这一点很令人高兴。通过本次实践,我也深刻体会到对于算法分析和改进的重要性,往往一个算法经过认真地分析和合理的改进后会获得性能上的提高时间复杂度或者空间复杂度的降低,而且能够获得更好的解。 七.参考文献: 《用基本遗传算法解决0-1背包问题》 八.程序实现: 已通过vc6.0编译后运行 #include //种群的规模 #define N //物体总数 #define Pc 0.8 //交叉概率 #define Pm 0.05 //突变概率 #define KW //背包最大载重 #define T //最大换代数 #define ALIKE 0.05 //判定相似度 int stop=0; //初始化函数中初始化为所有价值之和 int t=0; //目前的代数 int weight[]={35,40,40,20,15}; //物体重量 int value[]={50,30,60,80,20}; //物体价值 /*实例1*********************************************************************** #define S //种群的规模 #define N //物体总数 #define Pc 0.8 //交叉概率 #define Pm 0.05 //突变概率 #define KW 878 //背包最大载重 #define T 800 //最大换代数 #define ALIKE 0.05 //判定相似度 int stop=0; //初始化函数中初始化为所有价值之和 int t=0; //目前的代数 int weight[]={44,46,90,72,91,40,75,35,8,54,78,40,77,15,61,17,75,29,75,63};//物体重量 int value[]={92,4,43,83,84,68,92,82,6,44,32,18,56,83,25,96,70,48,14,58};//物体价值 /*实例2*********************************************************************** #define S //种群的规模 #define Pc 0.8 //交叉概率 #define Pm 0.05 //突变概率 #define KW 1000 //背包最大载重1000 #define N //物体总数 #define T 800 //最大换代数 #define ALIKE 0.05 //判定相似度 int stop=0; //初始化函数中初始化为所有价值之和 int t=0; //目前的代数 int vaue[]={ 220,208,198,192,180,180,165,162,160,158,155,130,125,122,120,118,115,110,105,101,100,100,98,96,95,90,88,82,80,77,75,73,72,70,69,66,65,63,60,58,56,50,30,20,15,10,8,5,3,1};int weight[]={ 80,82,85,70,72,70,66,50,55,25,50,55,40,48,50,32,22,60,30,32,40,38,35,32,25,28,30,22,25,30,45,30,60,50,20,65,20,25,30,10,20,25,15,10,10,10,4,4,2,1};/*实例3***********************************************************************/ #define S //种群的规模 #define Pc 0.8 //交叉概率 #define Pm 0.05 //突变概率 #define KW 6718 //背包最大载重1000 #define N //物体总数 #define T 800 //最大换代数 #define ALIKE 0.05 //判定相似度 int stop=0; //初始化函数中初始化为所有价值之和 int t=0; //目前的代数 int vaue[]={ 597,596,593,586,581,568,567,560,549,548,547,529,529,527,520,491,482,478,475,475,466,462,459,458,454,451,449,443,442,421,410,409,395,394,390,377,375,366,361,347,334,322,315,313,311,309,296,295,294,289,285,279,277,276,272,248,246,245,238,237,232,231,230,225,192,184,183,176,171,169,165,165,154,153,150,149,147,143,140,138,134,132,127,124,123,114,111,104,89,74,63,62,58,55,48,27,22,12,6,250};Int weight[]={ 54,183,106,82,30,58,71,166,117,190,90,191,205,128,110,89,63,6,140,86,30,91,156,31,70,199,142,98,178,16,140,31,24,197,101,73,16,73,2,159,71,102,144,151,27,131,209,164,177,177,129,146,17,53,64,146,43,170,180,171,130,183,5,113,207,57,13,163,20,63,12,24,9,42,6,109,170,108,46,69,43,175,81,5,34,146,148,114,160,174,156,82,47,126,102,83,58,34,21,14};/************************************************************************/ struct individual { //个体结构体 bool chromsome[N];//染色体编码 double fitness; //适应度//即本问题中的个体所得价值 double weight; //总重量 };int best=0;int same=0;individual X[S],Y[S],bestindividual;// /************************************************************************/ int comp(individual bestindividual,individual temp);//比较函数 void checkalike(void); //检查相似度函数 void GenerateInitialPopulation(void); //初始种群 void CalculateFitnessValue(void); //适应度 void SelectionOperator(void); //选择 void CrossoverOperator(void); //交叉 void MutationOperator(void); //变异 void FindBestandWorstIndividual(void); //寻找最优解 void srand(unsigned int seed); //随机生成 /************************************************************************/ int comp(individual bestindividual,individual temp)//比较函数 { int fit=0,w=0;//第一种不变:操作后不满足重量函数,第二种:操作后适应度小于操作前 for(int i=0;i void Checkalike(void){ int i=0,j=0; for(i=0;i if(temp!=X[k].chromsome[j]) break;} } if(j==N)same++;} if(same>N*ALIKE)//大于ALIKE作为判定为早熟 { int minindex=0;for(int n=0;n if(X[n].fitness X[minindex].weight+=m*weight[j];//个体的总重量 X[minindex].fitness+=m*value[j];//个体的总价值 } } } /************************************************************************/ void GenerateInitialPopulation(void)//初始种群,保证每个值都在符合条件的解 { int i=0,j=0;bool k; for(i=0;i k=(rand()%10<5)?0:1; X[i].chromsome[j]=k; w+=k*weight[j];//个体的总重量 v+=k*value[j];//个体的总价值 } if(w>KW)i--; //如果不是解,重新生成else { X[i].fitness=v;X[i].weight=w; if(v==stop){bestindividual=X[i];return;}//这种情况一般不会发生 } } } /************************************************************************/ void CalculateFitnessValue(){ int i=0,j=0; for(i=0;i int w=0,v=0; for(j=0;j { w+=X[i].chromsome[j]*weight[j];//个体的总重量 v+=X[i].chromsome[j]*value[j];//个体的总价值 } X[i].fitness=v; X[i].weight=w; if(v==stop){bestindividual=X[i];return;}//符合条件情况下最优解这种情况一般不会发生 if(w>KW)X[i]=bestindividual; //如果不是解,找最好的一个解代之 } } /************************************************************************/ void SelectionOperator(void){ int i, index;double p, sum=0.0;double cfitness[S];//选择、累积概率 individual newX[S];for(i=0;i for(i=0;i for(i=1;i for(i=0;i p=(rand()%1001)/1000.0;//产生一个[0,1]之间的随机数 index=0; while(p>cfitness[index])//轮盘赌进行选择 { index++; } newX[i]=X[index];} for(i=0;i void CrossoverOperator(void)//交叉操作 { int i=0, j=0,k=0;individual temp; for(i=0;i int p=0,q=0; do { p=rand()%S;//产生两个[0,S]的随机数 q=rand()%S; }while(p==q); int w=1+rand()%N;//[1,N]表示交换的位数 double r=(rand()%1001)/1000.0;//[0,1] if(r<=Pc) { for(j=0;j { temp.chromsome[j]=X[p].chromsome[j];//将要交换的位先放入临时空间 X[p].chromsome[j]=X[q].chromsome[j]; X[q].chromsome[j]=temp.chromsome[j]; } } if(p==best) if(-1==comp(bestindividual,X[p]))//如果变异后适应度变小 X[p]=bestindividual; if(q==best) if(-1==comp(bestindividual,X[q]))//如果变异后适应度变小 X[q]=bestindividual;} } /************************************************************************/ void MutationOperator(void){ int i=0, j=0,k=0,q=0;double p=0;for(i=0;i { for(j=0;j { p=(rand()%1001)/1000.0; if(p { if(X[i].chromsome[j]==1)X[i].chromsome[j]=0; else X[i].chromsome[j]=1; } } if(i==best) if(-1==comp(bestindividual,X[i]))//如果变异后适应度变小 X[i]=bestindividual;} } /************************************************************************/ void FindBestandWorstIndividual(void){ int i;bestindividual=X[0];for(i=1;i if(X[i].fitness>bestindividual.fitness) { bestindividual=X[i]; best=i; } } } /*主函数*****************************************************************/ void main(void){ srand((unsigned)time(0)); t=0; GenerateInitialPopulation();//初始群体包括产生个体和计算个体的初始值 while(t<=T) { FindBestandWorstIndividual();//保存当前最优解 SelectionOperator(); //选择 CrossoverOperator(); //交叉 MutationOperator(); //变异 Checkalike(); //检查相似度 CalculateFitnessValue();//计算新种群适应度 t++; } FindBestandWorstIndividual(); //找到最优解 cout< < for(int k=0;k cout< 读书的好处 1、行万里路,读万卷书。 2、书山有路勤为径,学海无涯苦作舟。 3、读书破万卷,下笔如有神。 4、我所学到的任何有价值的知识都是由自学中得来的。——达尔文 5、少壮不努力,老大徒悲伤。 6、黑发不知勤学早,白首方悔读书迟。——颜真卿 7、宝剑锋从磨砺出,梅花香自苦寒来。 8、读书要三到:心到、眼到、口到 9、玉不琢、不成器,人不学、不知义。 10、一日无书,百事荒废。——陈寿 11、书是人类进步的阶梯。 12、一日不读口生,一日不写手生。 13、我扑在书上,就像饥饿的人扑在面包上。——高尔基 14、书到用时方恨少、事非经过不知难。——陆游 15、读一本好书,就如同和一个高尚的人在交谈——歌德 16、读一切好书,就是和许多高尚的人谈话。——笛卡儿 17、学习永远不晚。——高尔基 18、少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。——刘向 19、学而不思则惘,思而不学则殆。——孔子 20、读书给人以快乐、给人以光彩、给人以才干。——培根 人工智能学科诞生于20世纪50年代中期,当时由于计算机的产生与发展,人们开始了具有真正意义的人工智能的研究。(虽然计算机为AI提供了必要的技术基础,但直到50年代早期人们才注意到人类智能与机器之间的联系.Norbert Wiener是最早研究反馈理论的美国人之一.最熟悉的反馈控制的例子是自动调温器.它将收集到的房间温度与希望的温度比较,并做出反应将加热器开大或关小,从而控制环境温度.这项对反馈 回路的研究重要性在于: Wiener从理论上指出,所有的智能活动都是反馈机制的结果.而反馈机制是有可 能用机器模拟的.这项发现对早期AI的发展影响很大。) 1956年夏,美国达特莫斯大学助教麦卡锡、哈佛大学明斯基、贝尔实验室申龙、IBM公司信息研究中心罗彻斯特、卡内基——梅隆大学纽厄尔和赫伯特.西蒙、麻省理工学院塞夫里奇和索罗门夫,以及IBM公司塞缪尔和莫尔在美国达特莫斯大学举行了以此为其两个月的学术讨论会,从不同学科的角度探讨人类各种学习和其他职能特征的基础,并研究如何在远离上进行精确的描述,探讨用机器模拟人类智能等问题,并首次提出了人工智能的术语。从此,人工智能这门新兴的学科诞生了。这些青年的研究专业包括数学、心理学、神经生理学、信息论和电脑科学,分别从不同角度共同探讨人工智能的可能性。他们的名字人们并不陌生,例如申龙是《信息论》的创始人,塞缪尔编写了第一个电脑跳棋程序,麦卡锡、明斯基、纽厄尔和西蒙都是“图灵奖”的获奖者。 这次会议之后,在美国很快形成了3个从事人工智能研究的中心,即以西蒙和纽威尔为首的卡内基—梅隆大学研究组,以麦卡锡、明斯基为首的麻省理工学院研究组,以塞缪尔为首的IBM公司研究组。随后,这几个研究组相继在思维模型、数理逻辑和启发式程序方面取得了一批显著的成果: (1)1956年,纽威尔和西蒙研制了一个“逻辑理论家“(简称LT)程序,它将每个问题都表示成一个树形模型,然后选择最可能得到正确结论的那一枝来求解问题,证明了怀特黑德与罗素的数学名著《数学原理》的第2章中52个定理中的38个定理。1963年对程序进行了修改,证明了全部定理。这一工作受到了人们的高度评价,被认为是计算机模拟人的高级思维活动的一个重大成果,是人工智能的真正开端。 (2)1956年,塞缪尔利用对策论和启发式搜索技术编制出西洋跳棋程序Checkers。该程序具有自学习和自适应能力,能在下棋过程中不断积累所获得的经验,并能根据对方的走步,从许多可能的步数中选出一个较好的走法。这是模拟人类学习过程第一次卓有成效的探索。这台机器不仅在1959年击败了塞缪尔本人,而且在1962年击败了美国一个州的跳棋冠军,在世界上引起了大轰动。这是人工智能的一个重大突破。 (3)1958年,麦卡锡研制出表处理程序设计语言LISP,它不仅可以处理数据,而且可以方便的处理各种符号,成为了人工智能程序语言的重要里程碑。目前,LISP语言仍然是研究人工智能何开发智能系统的重要工具。 (4)1960年纽威尔、肖和西蒙等人通过心理学实验,发现人在解题时的思维过程大致可以分为3个阶段:1。首先想出大致的解题计划;2。根据记忆中的公理、定理和解题规划、按计划实施解题过程;3.在实施解题过程中,不断进行方法和目标分析,修改计划。这是一个具有普遍意义的思维活动过程,其中主要是方法和目的的分析。(也就是人们在求解数学问题通常使用试凑的办法进行的试凑是不一定列出所有的可能性,而是用逻辑推理来迅速缩小搜索范围的办法进行的),基于这一发现,他们研制了“通用问题求解程序GPS”,用它来解决不定积分、三角函数、代数方程等11种不同类型的问题,并首次提出启发式搜索概念,从而使启发式程序具有较普遍的意义。 (5)1961年,明斯基发表了一篇名为《迈向人工智能的步骤》的论文,对当时人工智能的研究起了推动作用。 正是由于人工智能在20世纪50年代到60年代的迅速发展和取得的一系列的研究成果,使科学家们欢欣鼓舞,并对这一领域给予了过高的希望。纽威尔和西蒙在1958年曾作出以下预言: ①不出十年,计算机将成为世界象棋冠军,除非规定不让它参加比赛; ②.不出十年,计算机将发现并证明那时还没有被证明的数学定理; ③.不出十年,计算机将谱写出具有较高美学价值并得到评论家认可的乐曲; ④不出十年,大多数心理学家的理论将采用计算机程序来形成。 非常遗憾的是,到目前为止,这样的预言还没有一个得到完全的实现,人工智能的研究状况比纽威尔和西蒙等科学家的设想要复杂和艰难的多。事实上,到了20世纪70年代初,人工智能在经历一段比较快速的发展时期后,很快就遇到了许多问题。这些问题主要表现在: (1)1965年鲁宾逊发明了归结(消解)原理,曾被认为是一个重大的突破,可是很快这种归结法能力有限,证明两个连续函数之和还是连续函数,推证了十万步竟还没有得证。 (2)塞缪尔的下棋程序,赢得了周冠军后,没能赢全国冠军。 (3)机器翻译出了荒谬的结论。如从英语→俄语→英语的翻译中,又一句话:“The spirit is willing but the flesh is weak”(心有余而力不足),结果变成了”The wine is good but the meat is spoiled”(酒是好的,肉变质了),闹出了笑话。 (4)大脑约有10的15次方以上的记忆容量,此容量相当于存放几亿本书的容量,现有的技术条件下在机器的结构上模拟人脑是不大可能的。 (5)来自心理学、神经生理学、应用数学、哲学等各界的科学家们对人工智能的本质、基本原理、方法及机理等方面产生了质疑和批评。 由于人工智能研究遇到了困难,使得人工智能在20世纪70年代初走向低落。但是,人工智能的科学家没有被一时的困难所吓倒,他们在认真总结经验教训的基础上,努力探索使人工智能走出实验室,走向实用化的新路子,并取得了令人鼓舞的进展。特别是专家系统的出现,实现了人工智能从理论研究走向实际应用,从一般思维规律探索走向专门知识应用的重大突破,是人工智能发展史上的重大转折,将人工智能的研究推向了新高潮。下面是几个又代表性的专家系统: (1)1968年斯坦福大学费根鲍姆教授和几位遗传学家及物理学家合作研制了一个化学质谱分析系统(DENDARL),该系统能根据质谱仪的数据和核磁谐振的数据,以及有关化学知识推断有机化合物的分子结构,达到了帮助化学家推断分子结构的作用。这是第一个专家系统,标志着人工之能从实验室走了出来,开始进入实际应用时代。 (2)继DENDARAL系统之后,费根鲍姆领导的研究小组又研制了诊断和治疗细菌感染性血液病的专家咨询系统MYCIN。经专家小组对医学专家、实习医师以及MYCIN行为进行正式测试评价,认为MYCIN的行为超过了其他所有人,尤其在诊断和治疗菌血症和脑膜炎方面,显示了该系统作为临床医生实际助手的前途。从技术的角度来看,该系统的特点是:1。使用了经验性知识,用可信度表示,进行不精确推理。2.对推理结果具有解释功能,时系统是透明的。3.第一次使用了知识库的概念。正是由于MYCIN基本解决了知识表示、知识获取、搜索策略、不精确推理以及专家系统的基本结构等重大问题(是怎样解决的呢?),对以后的专家系统产生了很大的影响。 (3)1976年,斯坦福大学国际人工智能中心的杜达等人开始研制矿藏勘探专家系统PROSPECTOR,它能帮助地质学家解释地质矿藏数据,提供硬岩石矿物勘探方面的咨询,包括勘探测评,区域资源估值,钻井井位选择等。该系统用语义网络表示地质知识,拥有15中矿藏知识,采用贝叶斯概率推理处理不确定的数据和知识。PROSPECTOR系统于1981年开始投入实际使用,取得了巨大的经济效益。例如1982年,美国利用该系统在华盛顿发现一处矿藏,据说实用价值可能超过1亿美元。 (4)美国卡内基—梅隆大学于20世纪70年代先后研制了语音理解系统HEARSAY-I加入HEARSAY-II,它完成从输入的声音信号转换成字,组成单词,合成句子,形成数据库查询语句,再到情报数据库中去查询资料。该系统的特点是采用“黑板结构”这种新结构形式,能组合协调专家的知识,进行不同抽象级的问题求解。 在这一时期,人工智能在新方法、程序设计语言、知识表示、推理方法等方面也取得了重大进展。例如70年代许多新方法被用于AI开发,著名的如Minsky的构造理论.另外David Marr提出了机器视觉方面的新理论,例如,如何通过一副图像的阴影,形状,颜色,边界和纹理等基本信息辨别图像.通过分析这些信息,可以推断出图像可能是什么,法国马赛大学的柯尔麦伦和他领导的研究小组于1972年研制成功的第一个PROLOG系统,成为了继LISP语言之后的另一种重要的人工智能程序语言;明斯基1974年提出的框架理论;绍特里夫于1975年提出并在MYCIN中应用的不精确推理;杜达于1976年提出并在PROSPECTOR中应用的贝叶斯方法;等等 人工智能的科学家们从各种不同类型的专家系统和知识处理系统中抽取共性,总结出一般原理与技术,使人工智能又从实际应用逐渐回到一般研究。围绕知识这一核心问题,人们重新对人工智能的原理和方法进行了探索,并在知识获取、知识表示以及知识在推理过程中的利用等方面开始出现一组新的原理、工具和技术。1977年,在第五届国际人工智能联合会(IJCAI)的会议上,费根鲍姆教授在一篇题为《人工智能的艺术:知识工程课题及实例研究》的特约文章中,系统的阐述了专家系统的思想,并提出了知识工程(KnowledgeEngineering)的概念。费根鲍姆认为,知识工程是研究知识信息处理的学科,它应用人工智能的原理和方法,对那些需要专家知识才能解决的应用难题提供了求解的途径。恰当的运用专家知识的获取、表示、推理过程的构成与解释,是设计基于知识的系统的重要技术问题。至此,围绕着开发专家系统而开展的相关理论、方法、技术的研究形成了知识工程学科。知识工程的研究使人工智能的研究从理论转向应用,从基于推理的模型转向基于知识的模型。 为了适应人工智能和知识工程发展的需要,在政府的大力支持下,日本于1982年开始了为期10年的“第五代计算机的研制计划”,即“知识信息处理计算机系统KIPS”,总共投资4.5亿美元。它的目的是使逻辑推理达到数值运算那样快。日本的这一计划形成了一股热潮,推动了世界各国的追赶浪潮。美国、英国、欧共体、苏联等都先后制订了相应的发展计划。随着第五代计算机的研究开发和应用,人工智能进入一个兴盛时期,人工智能界一派乐观情绪。 然而,随着专家系统应用的不断深入,专家系统自身存在的知识获取难、知识领域窄、推理能力弱、只能水平低、没有分布式功能、实用性差等等问题逐步暴露出来。日本、美国、英国和欧洲所制订对那些针对人工智能的大型计划多数执行到20世纪80年代中期就开始面临重重困难,已经看出达不到预想的目标。进一步分析便发现,这些困难不只是个别项目的制订又问题,而是涉及人工智能研究的根本性问题。总的来讲是两个问题:一是所谓的交互(Interaction)问题,即传统方法只能模拟人类深思熟虑的行为,而不包括人与环境的交互行为。另一个问题是扩展(Scaling up)问题,即所谓的大规模的问题,传统人工智能方法只适合于建造领域狭窄的专家系统,不能把这种方法简单的推广到规模更大、领域更宽的复杂系统中去。这些计划的失败,对人工智能的发展是一个挫折。 尽管经历了这些受挫的事件,AI仍在慢慢恢复发展.新的技术在日本被开发出来,如在美国首创的模糊逻辑,它可以从不确定的条件作出决策;还有神经网络,被视为实现人工智能的可能途径.1982年后,人工神经网络像雨后春笋一样迅速发展起来,给人们带来了新的希望。人工神经网络的主要特点是信息的分布存储和信息处理的并行化,并具有自组织自学习能力,这使人们利用机器加工处理信息有了新的途径和方法,解决了一些符号方法难以解决的问题,使人工智能的学术界兴起了神经网络的热潮。1987年美国召开了第一次神经网络国际会议,宣布新学科的诞生。1988年以后,日本和欧洲各国在神经网络方面的投资逐步增加,促进了该领域的研究。但是随着应用的深入,人们又发现人工神经元网络模型和算法也存在问题。 20世纪80年代末,以美国麻省理工学院布鲁克斯(R.A.Brooks)教授为代表的行为主义学派提出了“无须表示和推理”的智能,认为智能只在与环境的交互中表现出来,并认为研制可适应环境的“机器虫”比空想智能机器人要好。以后,人工智能学术界充分认识到已有的人工智能方法仅限于在模拟人类智能活动中使用成功的经验知识处理简单的问题,开始在符号机理与神经网机理的结合及引入Agent系统等方面进一步开展研究工作。20世纪90年代,所谓的符号主义、连接主义和行动主义3种方法并存。对此,中国学者认为这3种方法各有优缺点,他们提出了综合集成的方法,即不同的问题用不同的方法来解决,或用联合(混合、融合)的方法来解决,再加上人工智能系统引入交互机制,系统的智能水平将会大为提高。 总而言之,尽管人工智能的发展经历了曲折的过程,但它在自动推理、认知建模、机器学习、神经元网络、自然语言处理、专家系统、智能机器人等方面的理论和应用上都取得了称得上具有“智能”的成果。许多领域将知识和智能思想引入到自己的领域,使一些问题得以较好的解决。应该说,人工智能的成就是巨大的,影响是深远的。 读书的好处 1、行万里路,读万卷书。 2、书山有路勤为径,学海无涯苦作舟。 3、读书破万卷,下笔如有神。 4、我所学到的任何有价值的知识都是由自学中得来的。——达尔文 5、少壮不努力,老大徒悲伤。 6、黑发不知勤学早,白首方悔读书迟。——颜真卿 7、宝剑锋从磨砺出,梅花香自苦寒来。 8、读书要三到:心到、眼到、口到 9、玉不琢、不成器,人不学、不知义。 10、一日无书,百事荒废。——陈寿 11、书是人类进步的阶梯。 12、一日不读口生,一日不写手生。 13、我扑在书上,就像饥饿的人扑在面包上。——高尔基 14、书到用时方恨少、事非经过不知难。——陆游 15、读一本好书,就如同和一个高尚的人在交谈——歌德 16、读一切好书,就是和许多高尚的人谈话。——笛卡儿 17、学习永远不晚。——高尔基 18、少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。——刘向 19、学而不思则惘,思而不学则殆。——孔子 20、读书给人以快乐、给人以光彩、给人以才干。——培根 人工智能结课论文 系别:计算机科学与技术系 班级:姓名:于静学号: 13计算机专接本一班 知识处理 ***0 摘要:进入2l 世纪,计算机硬件和软件更新的速度越来越快,计算机这个以往总给人以冷冰冰的机器的形象也得到了彻底的改变。人机交互的情形越来越普遍,计算机被人类赋予了越来越多的智能因素。伴随着人类把最新的计算机技术应用于各个学科,对这些学科的认知也进入了日新月异的发展阶段,促使大量的新的研究成果不断涌现。例如:“人机大战”中深蓝计算机轻松的获胜、人类基因组排序工作的基本完成、人类大脑结构性解密、单纯器官性克隆的成功实现等等。随着计算机这个人类有史以来最重要的工具的不断发展,伴随着不断有新理论的出现,人类必须重新对它们进行分析和审视。知识处理是人工智能这一科学领域的关键问题。本文对知识处理的核心问题之——识的表示进行了全面的综述目前流行的知识表达方式不下十种,在此只介绍一阶谓词逻辑、产生式、语义网络、框架、混合等目前最常用的知识表示方法。并对其进行了优缺点分析及简单对比。最后对知识表示的发展趋向作出了展望。 关键词:知识 人工智能(AI) 知识表达式 一阶谓词逻辑 产生式 语义网络 框架 一、知识和知识的表示 1、知识的概念 知识是人类世界特有的概念,他是人类对客观世界的一种比较准确、全面的认识和理解的结晶。(1)知识只有相对正确的特性。常言道:实践出真理。只是源于人们生活、学习与工作的实践,知识是人们在信息社会中各种实践经验的汇集、智慧的概括与积累。只是爱源于人们对客观世界运动规律的正确认识,是从感知认识上升成为理性认识的高级思维劳动过程的结晶,故相应于一定的客观环境与条件下,只是无疑是正确的。然而当客观环境与条件发生改变时,知识的正确性就接受检验,必要时就要对原来的认识加以修改和补充,一至全部更新而取而代之。例如知道1543年哥白尼学说问世之前,人们一直都以为地球是宇宙的核心;再有:人们都知道一个关于“瞎子摸象”的故事,它通俗地说明了完整的只是形式是一个复杂的智能过程。通常人们获取知识的重要手段是:利用信息,把各种信息提炼、概括并关联在一起,就形成了知识。而利用信息关联构成知识的形式有多种多样。 (2)知识的确定与不确定性如前说述,知识有若干信息关联的结构组成,但是,其中有的信息是精确的,有的信息却是不精确的。这样,则由该信息结构形成的知识也有了确定与不确定的特征。例如,在我国中南地区,根据天上出现彩虹的方向及其位置,可以预示天气的变化。有谚语曰:“东边日(晴天),西边雨。”但是,这只是一种常识性经验,并不能完全肯定或否定。再如:家有一头秀发,一时两鬓如霜。我们则认为家一定是年轻人,乙就是老年人嘛?不能完全肯定,因为相反的事例是很多的。比如,当年的白毛女就不是老人,而现在六十多岁的演员有一头黑发也不足为奇。 2、知识表达及其映像原理 智能机器系统如同智能生物一样,在运用知识进行信息交流或只能问题求解时,都需要预先进行知识表示。进而实现知识调用,达到利用知识求解问题的目的。因而只是表示是知识信息处理系统必不可少的关键环节。对智能机器系统而言只是表示,实际上就是对知识的一种描述或约定。其本质,就是采用某种技术模式,八所要求解决的问题的相关知识,映射为一种便于找到该问题解的数据结构。对知识进行表示的过程,实质上就是把相关只是映射(或称为变换:Transformation;或称为映像:Mapping;或称为编码:Coded)为该数据结构的过程。如图1。 图1 只是表达及其映射原理 如图,其目标是要对复杂的智能性问题实现机器求解,但机器直接对原始问题求解难度很大,可采用知识表达的映射原理,把原始问题映射为它的一种同构或同态问题,然后在对同构或同态问题求出它的解答,则相对容易而方便。顺便指出:同构解答与原始问题有相同的形式解,然而对于同态问题,如果得到原始解,只需对同台解答再施行反运算即可。在自然科学实际应用研究中,利用映射(称之为变换)原理迂回求解的思想,是一种非常有效而广为使用的重要手段。目前比较常见的知识表达方法主要有:常用的知识表示方法:一阶谓词逻辑表示法,产生式表示法,框架表示法,语义网络表示法,脚本表示法,过程表示法,面向对象表示法,神经网络表示法。如图2 二、常用知识表示法: 2.1一阶谓词逻辑表示法: 一阶谓词逻辑表示法是目前应用最广的方法之一,在AI系统上已经得到了应用。它是通过分析命题内容和谓词逻辑,尽可能正确地表述它的各种意境的过程。知识的谓词逻辑表示符合人的思维习惯,可读性好,逻辑关系表达简便。使用谓词逻辑既便于表达概念、状态、属性等事实性知识,又能方便地采用谓词公式的表达形式,进行各种智能行为的过程性描述与演绎推理。一阶谓词的一般形式为P(x1,x2,„,xn)其中P是谓词名,xi为个体常量、变元,或函数。例如:STUDENT(zhangsan):zhangsan是学生 STUDENT(x):x是学生Greater(x,5):x>5TEACHER(father(Wanghong)):王宏的父亲是教师。在一阶谓词表示法中连接词是非常重要的其中: 连接词:¬、∨、∧、→、↔ 量词:∀、∃ (∀x)P(x)为真、为假的定义 (∃x)P(x)为真、为假的定义 结合具体事例可以看到一阶谓词逻辑在知识表示法中的优越性: 李明是计算机系的学生,但他不喜欢编程。定义谓词: COMPUTER(x):x是计算机系的 学生 LIKE(x,y):x喜欢y 谓词公式为: LIKE(liming,programming)COMPUTER(liming)∧ 谓词逻辑是一种传统经典也是最基本的形式化方法。谓词逻辑知识表示规范性严,逻辑性强,自然性好,推理过程严密,易于实现。这些优良特性使得谓词逻辑最早用于人工智能机器定理证明,并获得了成功。但是必须看到,谓词逻辑属于标准的二值(T与F)逻辑,难以直接进行不确定性问题的处理。对于复杂系统的求解问题,容易陷入冗长演绎推理中,常常不可避免地带来求解效率低,甚至产生“组合爆炸”问题。因此,针对谓词逻辑,尚待人们不断加以改进,以寻求自然性好而效率更高的技术方法。 2.2产生式表示法 目前,产生式表示方法是专家系统的第一选择的知识表达方式。是美国数学家Post在1943年提出了一种计算形式体系里所使用的术语。产生式表示的基本形式为:(1)确定性知识的表示: 产生式形式:P→Q或者IF P THEN Q 它的含义:如果前提P满足,则可以推出结论Q或执行Q操作。例如:IF CLEAR(B)AND HANDEMPTYTHEN Pickup(B)如果积木B上是空的,且机械手空,则机械手从桌面上抓起积木B。(2)不确定知识的表示: 产生式形式:P→Q(置信度)或者IF P THEN Q(置信度)在不确定推理中,当已知事实与前提P不能精确匹配时,只要按照“置信度”的要求达到一定的相似度,就认为已知事实与前提条件相匹配,再按照一定的算法将这种可能性(不确定性)传递到结论Q。 产生式表示法其优点在于模块性。规则与规则之间相互独立灵活性。知识库易于增加、修改、删除自然性。方便地表示专家的启发性知识与经验透明性。易于保留动作所产生的变化、轨迹,但仍有不少缺点:知识库维护难。效率低。为了模块一致性理解难。由于规则一致性彼此之间不能调用。 2.3 语义网络表达式 语义网络是人工智能常用的知识表示法之一。是一种使用概念及其语义关系来表达知识的有向图。它作为人类联想记忆的一个显示心理学模型,是由J.R.Quillian于1968年在他的博士论文中首先提出,并用于自然语言处理。语义网络结构共使用了三种图形符号:框、带箭头及文字标识的线条和文字标识线。分别称为:(1)节(结)点;弧(又叫做边或支路);指针。 (2)节点(Node):也称为结点。用圆形、椭圆、菱形或长方形的框图来表示,用来表示事物的名称、概念、属性、情况、动作、状态等。 (3)弧(Arc):这是一种有向弧,又称之为支路(Branch)。节点之间用带箭头及文字标识的有向线条来联结,用以表示事物之间的结构,即语义关系。 (4)指针(Pointer):也叫指示器。是在节点或者弧线的旁边,另外附加必要的线条及文字标识,用来对节点、弧线和语义关系作出相宜的补充、解释与说明。 语义网络是一种结构化知识表示方法,具有表达直观,方法灵活,容易掌握和理解的特点。概括起来,主要优点在于采用语义关系的有向图来连接,语义、语法、词语应用兼顾,具有描述生动,表达自然,易于理解等。 虽然语义网络知识表示和推理具有较大的灵活性和多样性,但是没有公认严密的形式表达体系,却不可避免地带来了非一致性和程序设计与处理上的复杂性,这也是语义网络知识表示尚待深入研究解决的一个课题。 2.4.框架表式式 框架表示法诞生于1975年,这也是一种结构化的知识表示方法,并已在多种系统中得到成功的应用。框架理论是由人工智能科学创始人之一,美国著名的人工智能学者M.L.Minsky(明斯基)提出来的。 自然界各种事物都可用框架(Frame)组织构成。每个被定义的框架对象分别代表着不同的特殊知识结构,从而可在大脑或计算机中表示、存储并予以认识、理解和处理。框架是一种被用来描述某个对象(诸如一个事物、一个事件或一个概念)属性知识的数据结构。下面是一个关于“大学教师”的框架设计模式。 n 框架名: 〈大学教师〉 n 姓名: 单位(姓,名)n 年龄: 单位(岁) n 性别: 范围((男,女)缺省:男)n 学历: 范围(学士,硕士,博士) n 职称: 范围((教授,副教授,讲师,助教)缺省:讲师)n 部门: 范围(学院(或系、处)n 住址: 〈住址框架〉 n 工资: 〈工资框架〉 n 参加工作时间: 单位(年,月) n 健康状况: 范围(健康,一般,较差)n 其它: 范围(〈个人家庭框架〉,〈个人经济状况框架〉) 上述框架共有十一个槽,分别描述了关于“大学教师”的十一个方面的知识及其属性。在每个槽里都指定了一些说明性的信息,表明了相关槽的值的填写要有某些限制。框架表示法支持上层框架概念抽象和下层框架信息继承共享的思想,不仅减少了框架信息和属性知识表达的冗余,而且保证了上、下层框架知识表达的一致性。 主要缺点:框架表示法过于死板,难以描述诸如机器人纠纷等类问题的动态交互过程生动性。 三、各知识表达式的比较与展望 以上若知识表达方法,绝大多数在应用中得到了很好的应用。但实际工作中,如果要建立一个人工智能系统、专家系统时,还是要根据具体情况提出一个混合性的知识表达方式。每一种知识表示方法各有特点,而且适用的领域也不同: (1)谓词逻辑方法只适用于确定性、陈述性、静态性知识,而对动态的、变化性、模糊性知识则很难表示。 (2)产生式规则方法推理方法太单一,如果前提条件太多,或规则条数太多,则推理的速度将慢得惊人。 (3)语义网络方法表达的知识面比较窄。(4)框架方法表示的知识横向关系不太明确。(纵向从属继承关系很明确) 因此,对于复杂的、深层次的知识,应根据需要表示知识的特征,来决定用二种或三种方法联合表示,例如: (1)逻辑与框架:框架里的槽值可以对应于谓词项。 (2)语义网络与框架:结点对应与框架,结点的参数就是框架的槽值。 (3)产生式与框架:框架的槽值对应于一条产生式规则。与神经网络结合。 参考文献: [1] 蔡之华;模糊Petri网及知识表示 [J];计算机应用与软件;1994年03期 [2].张科杰,袁国华,彭颖红; 知识表示及其在机械工程设计中的应用探讨[J]; 机械设计;2004年06期。 [3].刘晓霞。新的知识表示方法——概念图[J]。航空计算技术。1997(4)。[4].王永庆人工智能原理与方法[M]。西安交通大学出版社。1998。 读书的好处 1、行万里路,读万卷书。 2、书山有路勤为径,学海无涯苦作舟。 3、读书破万卷,下笔如有神。 4、我所学到的任何有价值的知识都是由自学中得来的。——达尔文 5、少壮不努力,老大徒悲伤。 6、黑发不知勤学早,白首方悔读书迟。——颜真卿 7、宝剑锋从磨砺出,梅花香自苦寒来。 8、读书要三到:心到、眼到、口到 9、玉不琢、不成器,人不学、不知义。 10、一日无书,百事荒废。——陈寿 11、书是人类进步的阶梯。 12、一日不读口生,一日不写手生。 13、我扑在书上,就像饥饿的人扑在面包上。——高尔基 14、书到用时方恨少、事非经过不知难。——陆游 15、读一本好书,就如同和一个高尚的人在交谈——歌德 16、读一切好书,就是和许多高尚的人谈话。——笛卡儿 17、学习永远不晚。——高尔基 18、少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。——刘向 19、学而不思则惘,思而不学则殆。——孔子 20、读书给人以快乐、给人以光彩、给人以才干。——培根 我眼中的人工智能 人,没有熊一样的力量,却能把熊关进笼子,这笼子的钥匙,叫智慧。人类一直在思考如何让自然界的其它事物为自己所用,而不是只想着如何获取食物来填饱肚子,人类之所以会凌驾于食物链顶端,就在于对于资源的使用。为了减轻胃的消化负担,人类开始学会使用火,让蛋白质在进入胃之前就变质而变得更好消化易于吸收。经历了漫长的手工制造业历程,为了提高生产效率,也为了减轻工人手工劳作的负担,人们开始了工业革命,无数的机器流水线取代了效率低下的廉价劳动力,也正是从此刻起,人类使用资源的能力有了质的发展,由使用已有资源,到创造新的资源。第一台计算机应运而生,人类开启了无限创造的时代。时至今日,计算机技术几乎延伸到了生活的每个领域,甚至成了人们的生活必需品。计算机能帮助人们完成人类不可能完成的计算,但一直致力于创造的人们当然不会停止对计算机的要求。人们不光需要计算机做人类做不了的计算,还渐渐开始要求计算机做人类能做的事,这便催生了人工智能。人类就是这样一步步用自己的智慧让自己过上傻瓜一样的生活。 人工智能目前还没有在人们生活中普及,但是已经出现萌芽。最典型是的一些语音识别系统,如苹果公司的Siri可能是目前人们接触最多的基于人工智能和云计算技术的产品,相信这种人机交互系统的雏形经过时间的磨练会在未来形成一套完善的从界面到内核的智能体系。在社会生活方面,与数字图像处理技术紧密结合的人工智能已经开始应用于摄像头的图像捕捉和识别,而模式识别技术的发展则使得人工智能在更广阔的领域得以实现成为了可能。一些大公司在人工智能领域的投入和研究对于推动人工智能的发展起到了很大的作用,最值得一提的就是谷歌。谷歌的免费搜索表面上是为了方便人们的查询,但这款搜索引擎推出的初衷,就是为了帮助人工智能的深度学习,通过上亿的用户一次又一次地查询,来锻炼人工智能的学习能力,由于我的水平还很低,对于深度学习还不敢妄自拽测。但是,近年来谷歌公司在人工智能方面的突破一项接着一项,为人们熟知的便是智能汽车。不得不说,人工智能想要进一步发展,必须依靠这些大公司的研究和不断推广,由经济促创新。 纵览时间长河,很多新生的技术在一开始都是举步维艰的,人工智能也不例外,但幸运的是,人们接受和学会使用新技术所需要的时间越来越短,对于人工智能产品的投入市场是有益的。因此,在我看来,将已开发出来但还需完善的人工智能产品投放市场,使其进入人们的生活只是时间的问题,但要想真正掌握人工智能,开发出完全符合研发人想法的智能产品还需各方面的努力。至于现在讨论热烈的“人工智能统治人类”的问题,我的看法是,人工智能的开发和应用是需要监管的,但并不能阻止人工智能即将影响世界的趋势。 由于我对于人工智能的理解还只是皮毛,对于文中出现的纰漏和错误还希望老师指正! 通过学习《高中信息技术“人工智能初步”模块教学研究》课程,分析您教学中学生的专家系统作品(或课程学习的参考资料的学生作品),就学生作品中存在的问题,谈谈自己在教学中如何更好地开展人工智能的教学。 通过学习《高中信息技术“人工智能初步”模块教学研究》课程,谈谈您在实施该模块教学过程中遇到的问题及解决方法,未实施过该模块教学的教师可谈谈开展人工智能模块教学的设想。 按教材的顺序,应该先讲人工智能的基本概念,然后讲解知识及其表示的理论知识,再讲解推理与专家系统和人工智能语言。但是这种传统教学方法对于中学生来说太晦涩难懂了,教师还没把理论知识讲完,学生已对人工智能彻底失去兴趣了。所以我们在讲理论知识的过程中,要加入有趣的实例。所以我们要打破常规的教学顺序,对教材进行重组。尽量减少概念和纯理论知识的讲解时间,通过让学生制作一个有实用价值的个性化的简易专家系统来带动人工智能的理论知识学习。在“做”的过程中,掌握知识的表达及推理机制等理论知识。让学生在完成一个简单专家系统作品的过程中,不知不觉中学习了相应的理论知识。我们要做到通过人工智能教学,能够吸引更多的学生能投身于人工智能的研究中。 通过对学生作品—疾病诊断治疗专家系统的分析,我觉得在以后的人工智能教学中,要做到以下几个方面: (1)教师要以平等友好的心态,微笑温和的话语与学生交流,尊重、理解每个学生的权利、价值观和感觉,保全学生的面子,杜绝直接的批评、奚落、嘲弄、讽刺,保证学生在课堂上的情绪安全感。 (2)尽量减少概念和纯理论知识的讲解时间,通过让学生制作一个有实用价值的个性化的简易专家系统来带动人工智能的理论知识学习。在“做”的过程中,掌握知识的表达及推理机制等理论知识。让学生在完成一个简单专家系统作品的过程中,不知不觉中学习了相应的理论知识。 (3)展人工智能的教学,重点要放在让学生能够体验,老师最好能以现实中的例子来给学生做讲演,有直观的印象,学起来更容易现解。 (4)在教学中要利用好因特网这个大资源库,并以小组合作学习的形式,相互交流,相互帮助,老师再及时指导与评价。第二篇:人工智能发展史解读
第三篇:人工智能论文解读
第四篇:人工智能心得体会大作业
第五篇:人工智能作业1