用遗传算法解决n皇后问题

用遗传算法解决n皇后问题

ID:12956400

大小:111.00 KB

页数:6页

时间:2018-07-19

用遗传算法解决n皇后问题_第1页
用遗传算法解决n皇后问题_第2页
用遗传算法解决n皇后问题_第3页
用遗传算法解决n皇后问题_第4页
用遗传算法解决n皇后问题_第5页
资源描述:

《用遗传算法解决n皇后问题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、用遗传算法解决n皇后问题(李怀远)一、问题提出N皇后问题描述如下:在格棋盘上放置彼此不受攻击的n个皇后。按国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。N皇后问题等价于在以下三个约束条件下:约束任何2个皇后不放在同一行;约束任何2个皇后不放在同一列;约束任何2个皇后不放在同斜线;找出一种合法的放置方案。我们把的棋盘看作二维方阵,其行号从上到下列号从左到右依次编号为0,1,…,n-1.。设任意两个皇后,皇后1和皇后2的坐标分别是(i,j)和(k,l),则如果这两个皇后在从棋盘左上角到右下角的主对角线及其平行线(斜率为-1的线)上,有i-j=k-

2、l=0 ;如果这两个皇后在斜率为+1的每一斜线上,有i+j=k+l;以上两个方程分别等价于i-k=j-l和i-k=l-j因此任两皇后的在同一斜线上的充要条件是式因此满足两个皇后不在同一斜线上的条件表示为:式两皇后不在同一行用式表示为:式两皇后不在同一列用式表示为:式此属NP问题不易求解,现在我们把任意n个皇后的任意一种放置办法当作一个个体(染色体),把其中的任意一个皇后当作一个基因,用遗传算法来解决该问题。二、编码方案对于此问题我提出两种编码方案。A.编码方案1:排列编码用一维n元数组x[0:n-1]来表示一个个体,其中,x[i]表示皇后i放在棋盘的第i行第x[i]

3、列,即第i行第x[i]列放置一个皇后。例如,x[0]=0表示棋盘的第0行第0列放一个皇后。数组第i个元素表示第i行的放置情况,可以看作一个基因。这种编码可以自然的解决了某一行只能放一个皇后的约束,如果数组的每一个元素x[i]都不重复,可以看成0——n-1的一种排列,就自然保证每一列只能放一个皇后。因此在交叉变异和产生个体时必须注意 x[i]的唯一性。B.编码方案2:二进制编码用一维数组x[0:n2-1]表示一个个体,其中。设,其中,r表示行号是n整除i的整数部分,c是余数表示列号,如果x[i]=1表示棋盘的第r行第c列放有某一个皇后,如果x[i]=0表示棋盘的第r行

4、第c列没有放置皇后。因为它使用了二进制编码,所以这种编码方法可以借用通用的二进制编码的交叉变异方法,这是它优于编码1的地方,但是用它随机产生的编码可能不满足题目的约束和约束,因此可能在生成个体或者交叉变异时强制它满足前两个约束或者加大对不满足约束的个体进行惩罚或淘汰或计算适应值时加以分辨。A.编码方案3:矩阵编码用矩阵或二维数组x[0:n-1][0:n-1]表示一个染色体,且如果x[i][j]=1表示棋盘的第i行第j列放置一个皇后,x[i][j]=0表示棋盘的第i行第j列为空。该编码虽然直观,但为了满足题目的约束和约束,同样需要在生成个体或者交叉变异时强制它满足前两

5、个约束或者加大对不满足约束的个体进行惩罚或淘汰或计算适应值时加以分辨。二、适应度的计算设aij表示皇后i和皇后j之间的相互攻击,即:。对于编码1:皇后i和j的攻击度:。对于编码2:设i和j可以分别分解成,,分别是皇后i和j的行号和列号,i和j攻击度:。对于编码3:设皇后i和j的行列分别是,则i和j的攻击度:第i个皇后的攻击度ai表示皇后i在除自身外其余n-1个皇后中与皇后i相冲突的数目,即有几个皇后与皇后i相攻击。如果i和所有皇后都冲突则攻击度为n-1,与所有的皇后都不冲突攻击度为0。因此ai可如下计算:。同理,皇后i的非攻击度表示和皇后i没有冲突的皇后数目,设bi

6、表示i的非攻击度,则。A.方法1:根据非攻击度计算用fi表示基因i的适应度,即第i个皇后的非攻击度,。如果某一个皇后i和所有其余的n-1个皇后都互不攻击,则。个体的适应度是指所有皇后的非攻击度之和,适应度函数可表示如下:对于一个合法的放置方案每一个基因的适应度都是n-1,此时染色体的适应度是。A.方法2:根据合法的皇后数目计算一个合法的皇后和任意其他n-1个都互不攻击,设ei=1表示第i个皇后合法,ei=0表示第i个皇后非法。因此,ei可以写成:。适应度函数定义为:。适应度越大棋局越接近要求,对于一个符合要求的棋局n个皇后都是合法的,即。但是用这种方法可能的一个问题

7、是适应度的差异太小,特别是在初始群体中或初始迭代中,因此可以考虑放大适应值的差异度,用指数函数实现,则适应度函数为:或或,当α>1时放大差异。B.方法3:综合合法的皇后数目和非攻击度的自适应方法可以想象随机生成的个体合法皇后的数目几乎都是0,特别是在初始迭代中,即使像方法2中那样放大适应值效果也不会太好,此时各个棋局的差异主要在非攻击度方面。当在迭代后期一个棋局中合法皇后数目可能会增多,而且此时合法皇后数目更有意义。鉴于此我们应同时考虑合法的皇后数目和非攻击度两个因素,并且他们的重要性随迭代次数的变化而变化,因此可令适应函数f为:,其中h是迭代次数;e是合法皇后

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。