Astar解八数码
介绍
使用A*算法求解八数码问题,人工智能课程项目
问题介绍:
基于A*算法求解八数码问题
至少定义3种不同的启发式函数,编程实现求解八数码问题的A*算法;
要求用可视化界面演示算法执行过程,应能选择预定义的启发式函数,能随机初始化初始状态,能单步执行,也能连续执行,能画出搜索树,同时标出估价函数在每个节点的各项函数值,能展示OPEN表和CLOSED表的动态变化过程;
能统计出扩展节点数和算法执行时间,以便对采用不同启发式函数的A*算法的性能做对比研究。
软件架构
IDE VS2022
主要依靠Astar类实现;
myMain.h存储的函数声明,函数定义在myMain.cpp;
两个hrcFun.cpp文件是小组内另两个成员编写的启发式函数,以姓氏命名。hrcFunLiu.cpp与hrcFunLuo.cpp版权归编写函数的成员所有。
可以查看思维导图了解软件基本框架(思维导图应该有及时更新吧)。OPEN表和CLOSE表都是用unordered_map类。
安装教程
VS 2022打开EightDigitalProblems.sln即可。
使用说明
Astar类的构造函数包括两部分,首先是启发函数,然后是初始节点;
对于Astar的构造函数而言,初始节点输入为nullptr时,将随机生成初始节点,随机函数使用algorithm中的random_shuffle函数;
目前排序函数仅仅是遍历然后给出Fn值最小的节点。