《滴水参考算法》word版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅谈《十滴水》——人工智能搜索
测试此搜索算法平均比网上能搜索到的同类算法答案每局优0~2滴水,未出现过答案劣于网上同类算法的情况,可能存在一些小漏洞导致的答案偏差,欢迎广大神犇指正。
核心思想:
先对确定劣质的搜索树进行剪枝,然后通过类人工智能的方法向分析出的能得到最优解的概率大的方向进行搜索,通过分析函数来构造搜索方向,通过状态树调控函数来调控状态树的平均规模,来统筹时间和准确度,通过智能构造答案序列函数来对搜索成果进行最大限度的优化,由于最优解的不唯一性和大量性,选择抛弃搜索全部状态而选用概率性全局剪枝的方法,在小概率选择期望值小的方向,绝对优势概率选择预估最优方向的基础上,通过剪去不理想的局面进行非确定性搜索,虽然不能保证搜索到的解全是最优的,但是由于人工智能的方法对搜索方向,搜索树,答案序列的处理,将随机搜索的错误概率降到了非常低的状态,此算法搜索时间和搜索精确地类似的成反比,通过多次实验调试后的人工智能参数,证明搜索到非最优解的概率与剪枝率成对数关系并稳定到千分之一,并且所得的答案与标准答案差
超过1的概率小到百万分之一。
本算法的核心函数;
1、渗透《蚁群算法》《遗传算法》思想的概率性淘汰和创新函数
2、渗透《模糊图像识别》思想的获取水滴图像密集度参数函数
3、智能答案序列启发式优化函数
4、智能调控搜索树状态函数
5、智能交互式判断函数
6、《十滴水》模拟函数
主要流程:
输入数据->
{
获取当前局面的价值评价->
抽取状态样本->
搜索出一个解->
搜索树智能调控->
智能优化解到局部最优解->
}
输出数据
————————————————算·法·详·解————————————————————
下面我来详细讲解一下核心函数的思想方法和特殊的智能处理:
一、输入函数
本部分加入了大量的特判来对付极端数据对程序的危害,也是本程序最简单的部分,加入的特判有:输入越界判断,输入非法字符判断
二、输出函数
本部分是所有函数中第二简单的函数,本部分先判断不需要操作的局面,之后是输出20组答案序列,在每个序列以坐标方式输出后,会对局面进行模拟来使得用于选择一种喜欢的顺序进行操作
三、启发函数一:密集度模糊式启发函数
本函数为搜索的核心优化函数,通过反映一个坐标点周围所影响水滴的加权密集程度的量化参数,来统筹安排搜索顺序和概率性剪枝,程序能根据此函数返回的价值分数来向更有可能获得最优解的方向进行搜索。本函数的核心思想是如何计算一个点所在坐标的密集度,定义一个坐标点所影响的范围为上下左右所接触到的第一个存在水且在地图边界之内的水滴坐标,按照二维几何正态分布函数图象加权的个体水滴数参数进行综合计算,本函数运用动态规划的方法,在O(n^2*step)的时间内统计结果,step为预测影响的步数,本函数设计step 为3步,代表意义为统计每个水滴坐标点3步之内所影响范围的加权综合评估分数。由于step=1时的个体影响坐标是离散的,故可以较为精确的统计图象的密集度。
定义:价值评估值=Σ(区域权重*个体水滴量)
一次加权设定为
010
121
010
中心权重为2,周边影响权重为1,进行3步动规后的密集度权重为(有重叠):000010000
000454000
006152515600
04154252421540
15255274522551
04154252421540
006152515600
000454000
000010000
本方法所构成的函数加权树状图分布趋向可大概表示为(中心点权值最大,经过中继点个数越多权值越小):
(此图反映的是无穷大边界时的密集度影响范围趋向图,红色点表示有水滴的坐标点,蓝色线表示影响路径)
(通过上图可以清楚地看到此函数反应的密集度与中心点到周边点的曼哈顿距离无关,而是与直接影响有关,是比较准确的)
(附加两个附加型启发函数二、三,这两个函数在本算法中均未使用,因为经测试效果不如以一种启发函数理想,第二种为单纯的静态区域权值,不如动态计算密集度参数效果好,第三种启发函数为单纯的平均权值随机搜索模型)
三、旋转抽样函数
本函数体现《遗传算法》和《蚁群算法》的概率性选择和淘汰变异思想,采用的是经典的轮盘方法来构造答案序列和搜索方向序列,为人工智能搜索主函数提供指向性参考,核心思想为依照适应度的价值评估进行加权随机抽取。
四、答案智能优化处理函数
本算法为加强搜索的速度提供了强有力的保障,作用是当搜索出一组答案序列时,此算法会智能的对序列进行优化和变异,使传入此函数的答案序列进化到一个与基准序列元素相同结构顺序不同的优质答案传出,核心思想是先根据贪心思路进行合理的显性的构造,使得答案序列中先筛选出一组子序列满足最优性,之后对剩下的序列进行随机概率性淘汰进化,为了避免枚举所有可行序列而发生的局部卡死,本算法通过调用随机生成序列辅函数的方式对剩余序列进行随机智能构造和定向淘汰和进化,之后将得到的同元素不同结构的优质序列进行返回。为了更大的满足用户的需求,同解答案保留尽量按照升序排列的序列。
五、搜索树动态调控函数
本函数的作用是根据预估的搜索树最大深度来扩大或缩小每个局面所需讨论状态总量,对搜索总状态数维持产生平稳的趋向,来宏观调控时间与精确地的矛盾,此处采用二分法将搜索状态总量趋向于平衡点,本算法设计每个深度状态的讨论总量与此状态的价值评估成近似正比,与此状态的已有花费成近似反比。
六、人工智能搜索主函数
这是搜索的主函数,调用到了上述的所有智能启发函数,加入了上节剪枝,分治不相干区域连通块剪枝的方法进行概率搜索,拥有统计最终答案序列的功能。
下面是源码:
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
//智能核心参数
const int population=30;//初始种群样本总量
const double scales[4]={3.0,2.0,1.2,1.0};//梯度权重参数
const int Max_Deep_Ceiling=99;
//const int value_number_mapping[Max_Deep_Ceiling]={36,36,36,36,36,36,36,36,36,36,36,36,36, 36,36};//全局搜索AI离散映射基准表
double
State_Tree[Max_Deep_Ceiling+1]={72.,60.,26.,22.,18.,15.,12.,9.,7.,6.,5.,5.,4.,4 .,4.,3.,3.,3.,3.,2.,2.,2.,2.,2.,2.,2.,2.,2.,2.,2.,2.};//AI离散函数映射基准表
int AI_argument[5]={0,1,2,9,16};//本体估价参数
const int Prediction_step=3;//智能预测步数上限
const int AI_value[5]={0,1,2,9,16};//本体估价参数
const int Gradient_Parameter[2]={2,1};//梯度估价参数
const int Expected_State=2147000000;//搜索状态总量上限
//定义结构体
struct status{int x;int y;int deraction;int state;int number;};
struct coordinate{int x;int y;};
struct sheet{coordinate coor[Max_Deep_Ceiling];int total;int additional;}; struct situation{int map[6][6];};
//定义变量
int
MaxDeep=Max_Deep_Ceiling,i,j,k,l,map[Max_Deep_Ceiling][6][6],answer_tot=0,Answe r_Number=Max_Deep_Ceiling+12,contest=0;
sheet answer[population],test_list;
int move[4][2]={0,1,1,0,0,-1,-1,0};
int map_test[6][6],Sum_Number;