[AI](加入随机因素)局部搜索解决N皇后问题(含源码)

局部搜索算法(加入随机因素):主要思想是要想得到全局最优解,总沿着局部最优的方向寻找,但会存在局部最优陷阱,即到达一个极值点(非最值点),在其邻域内无法找到更优解,所以需要多次尝试。

a)   变量:

             i.     N:皇后个数;

            ii.     皇后位置数组Pos[N]:下标为行号,对应值为列号;

           iii.     冲突表CollTable[2N][2]:分别记录正负对角线上的冲突数,对于正负对角线标号如下图所示,其中正对角线如图中蓝线所示,采取逆时针方向标号;负对角线如图中绿线所示,采取顺时针方向标号。


b)   邻域的定义:

            随机选择两个皇后进行列交换得到的新序列。

c)   算法描述(只介绍N>3情况下,此时一定有解):

i. 初始化迭代次数IterCnt=0,初始化马尔科夫链长为N*N,随机生成皇后位置Pos[],每个皇后位于不同行不同列,记录冲突表CollTable,计算其冲突数collcnt;
ii. IterCnt++,判断冲突数是否为0,如果是算法结束,输出结果;否则,转iii;
iii. 判断迭代次数IterCnt是否等于链长N*N,如果等于,说明陷入局部极小,转i;否则,转iv;
iv. 随机选择两个皇后进行列号交换,更新冲突表CollTable,计算其冲突数是否减小,是则交换;否则恢复其冲突表CollTable,不进行交换;转ii。

d)   程序框图:

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值