遗传算法求解八皇后问题C++实现

一. 实验问题简介

问题表述为:在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
本次实验利用遗传算法求解八皇后问题的一个可行解。

二. 实验语言及算法

  1. 实验语言: C++
  2. 实验算法: 遗传算法

三. 实验思路

  1. Random_formation函数
    杂交:利用初始化的两个父辈通过进行杂交,将通过父辈从某随机一点进行割分,通过两个for循环交换各部分拼接起来,生成两个子辈。(一代繁殖共生成16个子辈)
    变异:利用随机函数分别生成两个生成子辈的随机变异结点进行随机变异(单点变异)。
  2. Fit_func函数
    该函数将一个子辈序列作为输入,利用二重循环依次判断每个序列结点的不相互攻击皇后对数目,即(abs(son[i]-son[j])==abs(i-j))||(son[i]==son[j])。
  3. Heredity函数
    该函数生成两个随机父辈,通过对这两个父辈利用random_formation函数进行杂交和变异生成两个子辈结果,并对其进行适应度计算,总共一代16个子辈,重复该过程8次。
    对这一代的结果进行适应度排序,选出最优的两个子辈作为父辈进行下一代杂交繁殖。
    结束出口,当当前父辈的适应度为28时,即符合八皇后问题条件,进行循环结束,并将其输出。
  4. 选择函数
    本次实验使用最佳保留选择,选出最佳的子辈作为父辈。

四. 实验结果及分析

  1. 实验结果()
<——————初始化第一代繁殖种群结果——————>
父辈序列        8 5 6 6 4 3 1 2 
母辈序列        5 3 2 1 5 1 6 6
<——————开始随机繁殖——————>
结束繁殖代数:13505
<——————最终繁殖结果序列——————>
3 5 2 8 1 7 4 6
<——————最终繁殖适应度——————>
28
第1次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        4 6 8 6 4 8 4 3
母辈序列        1 2 1 2 1 5 8 8
<——————开始随机繁殖——————>
结束繁殖代数:4180
<——————最终繁殖结果序列——————>
6 3 7 4 1 8 2 5
<——————最终繁殖适应度——————>
28
第2次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        7 6 3 7 4 4 7 3
母辈序列        6 2 8 2 4 1 2 2
<——————开始随机繁殖——————>
结束繁殖代数:9957
<——————最终繁殖结果序列——————>
1 6 8 3 7 4 2 5
<——————最终繁殖适应度——————>
28
第3次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        2 6 6 7 3 8 2 3
母辈序列        2 1 6 3 8 5 5 4
<——————开始随机繁殖——————>
结束繁殖代数:14896
<——————最终繁殖结果序列——————>
8 2 4 1 7 5 3 6
<——————最终繁殖适应度——————>
28
第4次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        1 6 3 8 2 8 8 3
母辈序列        3 7 4 4 8 5 1 8
<——————开始随机繁殖——————>
结束繁殖代数:5795
<——————最终繁殖结果序列——————>
6 3 7 2 4 8 1 5
<——————最终繁殖适应度——————>
28
第5次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        4 6 5 1 2 4 2 3
母辈序列        7 7 2 5 4 1 4 2
<——————开始随机繁殖——————>
结束繁殖代数:14357
<——————最终繁殖结果序列——————>
4 1 5 8 2 7 3 6
<——————最终繁殖适应度——————>
28
第6次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        7 7 8 1 2 8 5 4
母辈序列        4 6 1 6 8 5 6 5
<——————开始随机繁殖——————>
结束繁殖代数:4657
<——————最终繁殖结果序列——————>
2 5 7 1 3 8 6 4
<——————最终繁殖适应度——————>
28
第7次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        3 7 2 2 1 4 8 4
母辈序列        8 5 8 7 4 2 8 7
<——————开始随机繁殖——————>
结束繁殖代数:27492
<——————最终繁殖结果序列——————>
5 2 4 6 8 3 1 7
<——————最终繁殖适应度——————>
28
第8次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        6 7 5 2 1 8 3 4
母辈序列        5 5 7 7 8 6 3 1
<——————开始随机繁殖——————>
结束繁殖代数:8927
<——————最终繁殖结果序列——————>
6 8 2 4 1 7 5 3
<——————最终繁殖适应度——————>
28
第9次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        1 7 8 2 8 4 6 4 
母辈序列        1 4 5 8 4 2 5 3 
<——————开始随机繁殖——————>
结束繁殖代数:7984
<——————最终繁殖结果序列——————>
1 6 8 3 7 4 2 5 
<——————最终繁殖适应度——————>
28
第10次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        8 7 5 3 8 5 4 4
母辈序列        2 3 3 2 4 2 2 7
<——————开始随机繁殖——————>
结束繁殖代数:870
<——————最终繁殖结果序列——————>
2 7 5 8 1 4 6 3 
<——————最终繁殖适应度——————>
28
第11次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        3 8 7 4 7 1 7 5
母辈序列        6 2 2 2 8 6 4 1
<——————开始随机繁殖——————>
结束繁殖代数:5169
<——————最终繁殖结果序列——————>
3 6 8 1 4 7 5 2
<——————最终繁殖适应度——————>
28
第12次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        6 8 2 4 7 5 1 5
母辈序列        3 1 8 3 4 2 6 3
<——————开始随机繁殖——————>
结束繁殖代数:3568
<——————最终繁殖结果序列——————>
4 1 5 8 2 7 3 6
<——————最终繁殖适应度——————>
28
第13次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        1 8 4 5 6 1 4 5
母辈序列        7 1 7 4 8 6 1 5
<——————开始随机繁殖——————>
结束繁殖代数:25576
<——————最终繁殖结果序列——————>
6 3 1 7 5 8 2 4
<——————最终繁殖适应度——————>
28
第14次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        5 8 7 5 6 5 7 5
母辈序列        3 8 6 4 4 2 3 7 
<——————开始随机繁殖——————>
结束繁殖代数:9063
<——————最终繁殖结果序列——————>
3 5 2 8 1 7 4 6
<——————最终繁殖适应度——————>
28
第15次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        8 8 2 6 6 1 2 5
母辈序列        8 7 4 5 7 6 5 1
<——————开始随机繁殖——————>
结束繁殖代数:5606
<——————最终繁殖结果序列——————>
5 7 2 6 3 1 8 4
<——————最终繁殖适应度——————>
28
第16次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        3 8 4 6 5 5 5 5
母辈序列        4 7 3 6 3 2 7 4 
<——————开始随机繁殖——————>
结束繁殖代数:3268
<——————最终繁殖结果序列——————>
4 2 5 8 6 1 3 7
<——————最终繁殖适应度——————>
28
第17次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        2 1 1 7 4 5 3 6
母辈序列        5 5 1 7 3 2 4 8
<——————开始随机繁殖——————>
结束繁殖代数:11993
<——————最终繁殖结果序列——————>
2 7 5 8 1 4 6 3
<——————最终繁殖适应度——————>
28
第18次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        5 1 4 7 4 1 6 6
母辈序列        1 4 7 8 7 6 6 2
<——————开始随机繁殖——————>
结束繁殖代数:699
<——————最终繁殖结果序列——————>
4 2 7 3 6 8 1 5
<——————最终繁殖适应度——————>
28
第19次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        8 1 7 8 3 6 1 6
母辈序列        6 4 6 1 3 2 1 4
<——————开始随机繁殖——————>
结束繁殖代数:3698
<——————最终繁殖结果序列——————>
3 6 2 7 1 4 8 5
<——————最终繁殖适应度——————>
28
第20次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        4 1 1 8 3 2 3 6
母辈序列        2 3 5 2 7 6 3 6
<——————开始随机繁殖——————>
结束繁殖代数:4911
<——————最终繁殖结果序列——————>
2 5 7 1 3 8 6 4
<——————最终繁殖适应度——————>
28
第21次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        7 1 4 1 3 6 6 6
母辈序列        7 2 4 2 3 2 5 8
<——————开始随机繁殖——————>
结束繁殖代数:12138
<——————最终繁殖结果序列——————>
3 5 2 8 1 7 4 6
<——————最终繁殖适应度——————>
28
第22次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        2 2 6 1 2 2 1 7
母辈序列        3 2 2 3 7 6 8 2
<——————开始随机繁殖——————>
结束繁殖代数:2425
<——————最终繁殖结果序列——————>
6 3 7 4 1 8 2 5
<——————最终繁殖适应度——————>
28
第23次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        5 2 1 2 2 6 4 7
母辈序列        7 1 1 4 3 2 2 4
<——————开始随机繁殖——————>
结束繁殖代数:8015
<——————最终繁殖结果序列——————>
4 2 5 8 6 1 3 7
<——————最终繁殖适应度——————>
28
第24次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        1 2 3 2 1 2 7 7
母辈序列        4 8 8 4 7 6 4 6
<——————开始随机繁殖——————>
结束繁殖代数:28086
<——————最终繁殖结果序列——————>
7 4 2 8 6 1 3 5
<——————最终繁殖适应度——————>
28
第25次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        4 2 6 3 1 6 2 7
母辈序列        8 8 7 5 3 2 7 8
<——————开始随机繁殖——————>
结束繁殖代数:3297
<——————最终繁殖结果序列——————>
5 7 1 4 2 8 6 3
<——————最终繁殖适应度——————>
28
第26次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        7 2 1 3 1 2 5 7
母辈序列        5 7 5 6 7 6 1 3
<——————开始随机繁殖——————>
结束繁殖代数:1503
<——————最终繁殖结果序列——————>
3 6 8 1 4 7 5 2
<——————最终繁殖适应度——————>
28
第27次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        2 2 3 3 8 6 8 7
母辈序列        1 6 4 7 3 3 3 5
<——————开始随机繁殖——————>
结束繁殖代数:5789
<——————最终繁殖结果序列——————>
1 5 8 6 3 7 2 4
<——————最终繁殖适应度——————>
28
第28次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        6 3 6 4 8 2 2 8
母辈序列        6 6 3 7 6 7 6 7
<——————开始随机繁殖——————>
结束繁殖代数:10534
<——————最终繁殖结果序列——————>
6 3 1 7 5 8 2 4
<——————最终繁殖适应度——————>
28
第29次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        1 3 8 4 7 6 5 8
母辈序列        2 5 1 8 2 3 8 1
<——————开始随机繁殖——————>
结束繁殖代数:3
<——————最终繁殖结果序列——————>
6 3 1 7 5 8 2 4
<——————最终繁殖适应度——————>
28
第30次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        8 3 5 5 7 7 3 8
母辈序列        3 4 7 2 2 3 5 5
<——————开始随机繁殖——————>
结束繁殖代数:1210
<——————最终繁殖结果序列——————>
5 7 1 3 8 6 4 2
<——————最终繁殖适应度——————>
28
第31次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        3 3 8 6 6 3 6 8
母辈序列        7 3 6 2 6 7 7 7
<——————开始随机繁殖——————>
结束繁殖代数:19317
<——————最终繁殖结果序列——————>
7 4 2 8 6 1 3 5
<——————最终繁殖适应度——————>
28
第32次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        6 4 3 6 6 7 1 8
母辈序列        4 2 4 3 2 3 1 1
<——————开始随机繁殖——————>
结束繁殖代数:10289
<——————最终繁殖结果序列——————>
4 2 8 5 7 1 3 6
<——————最终繁殖适应度——————>
28
第33次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        1 4 5 7 5 3 4 8
母辈序列        8 1 3 4 6 7 4 3
<——————开始随机繁殖——————>
结束繁殖代数:6268
<——————最终繁殖结果序列——————>
4 7 1 8 5 2 6 3
<——————最终繁殖适应度——————>
28
第34次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        5 4 8 7 5 7 7 1
母辈序列        4 1 2 4 2 3 6 5
<——————开始随机繁殖——————>
结束繁殖代数:7596
<——————最终繁殖结果序列——————>
7 3 1 6 8 5 2 4
<——————最终繁殖适应度——————>
28
第35次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        8 4 2 8 4 3 1 1
母辈序列        1 8 1 5 6 7 8 7
<——————开始随机繁殖——————>
结束繁殖代数:12533
<——————最终繁殖结果序列——————>
6 3 1 7 5 8 2 4
<——————最终繁殖适应度——————>
28
第36次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        3 4 5 8 4 7 4 1
母辈序列        5 7 7 6 2 3 3 2
<——————开始随机繁殖——————>
结束繁殖代数:2
<——————最终繁殖结果序列——————>
6 3 1 7 5 8 2 4
<——————最终繁殖适应度——————>
28
第37次模拟结束
<——————初始化第一代繁殖种群结果——————>
父辈序列        6 4 7 8 4 3 7 1
母辈序列        2 7 6 7 6 7 5 4
<——————开始随机繁殖——————>
结束繁殖代数:17019
<——————最终繁殖结果序列——————&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值