文档库 最新最全的文档下载
当前位置:文档库 › 启发式搜索实验

启发式搜索实验

启发式搜索实验
启发式搜索实验

实验三搜索推理技术

启发式搜索算法—A*算法

1.实验目的

(1)了解搜索推理的相关技术;

(2)掌握启发式搜索算法或者基于规则推理的分析方法。

2.实验内容(2个实验内容可以选择1个实现)

(1)启发式搜索算法。熟悉和掌握启发式搜索的定义、估价函数和算法过程,并求解博弈问题,理解求解流程和搜索顺序;

(2)产生式系统实验。熟悉和掌握产生式系统的运行机制,掌握基于规则推理的基本方法。

3.实验报告要求

(1)简述实验原理及方法,并请给出程序设计流程图。

(A-Star)算法是一种静态路网中求解最短路最有效的直接搜索方法。

公式表示为: f(n)=g(n)+h(n),

其中 f(n) 是从初始点经由节点n到目标点的估价函数,

g(n) 是在状态空间中从初始节点到n节点的实际代价,

h(n) 是从n到目标节点最佳路径的估计代价。

保证找到最短路径(最优解的)条件,关键在于估价函数h(n)的选取:

估价值h(n)<= n到目标节点的距离实际值,这种情况下,搜索的点数多,搜索范围大,效率低。但能得到最优解。并且如果h(n)=d(n),

即距离估计h(n)等于最短距离,那么搜索将严格沿着最短路径进行,此时的搜索效率是最高的。

然后我们通过图文结合的形式来解释下,如下图:

图中有这么几个要点先需要了解:

1、类似迷宫图,分开始节点(start)、障碍物、结束节点(end),我们需要从start节点探寻一条到end节点的路线

2、对于探寻的每一步,都会以当前节点为基点,扫描其相邻的八个节点

3、计算当前节点与start节点及到end的距离

4、计算出最短路径

如果明白了上面的场景描述,下面就可以进行分析了。

在A*算法中,核心思想是一个公式,上面已经提到过:

f(n)=g(n)+h(n)

(2)源程序清单:

package com.itxxz.ui.suanfa.astar;

import java.util.Iterator;

import java.util.LinkedList;

import java.util.Queue;

import com.itxxz.ui.suanfa.astar.Point;

public class ItxxzAstar {

// 开始节点

private Point startPoint = null;

// 当前节点

private Point endPoint = null;

// 结束节点

private Point currentPoint = null;

// 最短距离坐标节点

private Point shortestFPoint = null;

// 迷宫数组地图

private static final int[][] mazeArray = {

{ 1, 0, 0, 0, 0 },

{ 1, 0, 2, 0, 0 },

{ 1, 0, 0, 0, 1 },

{ 1, 0, 0, 0, 0 },

{ 1, 1, 1, 1, 0 },

{ 1, 0, 0, 0, 0 },

{ 3, 0, 1, 1, 1 } };

// 迷宫坐标对象

private Point[][] mazePoint = null;

// 开启队列,用于存放待处理的节点

Queue openQueue = null;

// 关闭队列,用于存放已经处理过的节点Queue closedQueue = null;

// 起始节点到某个节点的距离

int[][] FList = null;

// 某个节点到目的节点的距离

int[][] GList = null;

// 起始节点经过某个节点到目的节点的距离

int[][] HList = null;

/**

* 构造函数

*

* @param maze

* 迷宫图

* @param startPoint

* 起始节点

* @param endPoint

* 结束节点

*/

public ItxxzAstar(Point[][] mazePoint, Point startPoint, Point endPoint) { this.mazePoint = mazePoint;

this.startPoint = startPoint;

this.endPoint = endPoint;

openQueue = new LinkedList();

openQueue.offer(startPoint);

closedQueue = new LinkedList();

FList = new int[mazePoint.length][mazePoint[0].length];

GList = new int[mazePoint.length][mazePoint[0].length];

HList = new int[mazePoint.length][mazePoint[0].length];

for (int i = 0; i < mazePoint.length; i++) {

for (int j = 0; j < mazePoint[0].length; j++) {

FList[i][j] = Integer.MAX_V ALUE;

GList[i][j] = Integer.MAX_V ALUE;

HList[i][j] = Integer.MAX_V ALUE;

}

}

// 起始节点到当前节点的距离

GList[startPoint.getX()][startPoint.getY()] = 0;

// 当前节点到目的节点的距离

HList[startPoint.getX()][startPoint.getY()] = getPointDistance(

startPoint.getX(), startPoint.getY(), endPoint.getX(),

endPoint.getY());

// f(x) = g(x) + h(x)

FList[startPoint.getX()][startPoint.getY()] = GList[startPoint.getX()][startPoint .getY()] + HList[startPoint.getX()][startPoint.getY()];

}

/**

* 计算当前坐标与结束坐标之间的距离

*

* 计算方法为每向相信坐标移动一次算作一个距离单位

*

*/

private int getPointDistance(int current_x, int current_y, int end_x,

int end_y) {

return Math.abs(current_x - end_x) + Math.abs(current_y - end_y);

}

/**

* 数组迷宫地图

*

* 0、可通行1、障碍2、开始节点3、结束节点

*

*/

public static void main(String[] args) {

// 创建节点迷宫图

Point[][] mazePoint = new Point[mazeArray.length][mazeArray[0].length];

for (int i = 0; i < mazePoint.length; i++) {

for (int j = 0; j < mazePoint[0].length; j++) {

mazePoint[i][j] = new Point(i, j, mazeArray[i][j]);

}

}

Point start = mazePoint[1][2];

Point end = mazePoint[6][0];

ItxxzAstar star = new ItxxzAstar(mazePoint, start, end);

star.start();

System.out.println(mazeArray.length + "," + mazeArray[0].length);

star.printPath();

}

/**

* 开始迷宫搜索

*

*/

public void start() {

while ((currentPoint = findShortestFPoint()) != null) {

if (currentPoint.getX() == endPoint.getX()

&& currentPoint.getY() == endPoint.getY())

return;

updateNeighborPoints(currentPoint);

}

}

/**

* 获取距离最短的坐标点

*

*/

public Point findShortestFPoint() {

currentPoint = null;

shortestFPoint = null;

int shortestFValue = Integer.MAX_V ALUE;

Iterator it = openQueue.iterator();

while (it.hasNext()) {

currentPoint = it.next();

if (FList[currentPoint.getX()][currentPoint.getY()] <= shortestFValue) { shortestFPoint = currentPoint;

shortestFValue = FList[currentPoint.getX()][currentPoint.getY()];

}

}

if (shortestFValue != Integer.MAX_V ALUE) {

System.out

.println("【移除节点】:" + shortestFPoint.getValue() + "["

+ shortestFPoint.getX() + ","

+ shortestFPoint.getY() + "]");

openQueue.remove(shortestFPoint);

closedQueue.offer(shortestFPoint);

}

return shortestFPoint;

}

/**

* 更新临近节点

*/

private void updateNeighborPoints(Point currentPoint) {

int current_x = currentPoint.getX();

int current_y = currentPoint.getY();

System.out.println("当前节点:[" + current_x + "," + current_y + "]");

// 上

if (checkPosValid(current_x - 1, current_y)) {

System.out.print("上");

updatePoint(mazePoint[current_x][current_y],

mazePoint[current_x - 1][current_y]);

}

// 下

if (checkPosValid(current_x + 1, current_y)) {

System.out.print("下");

updatePoint(mazePoint[current_x][current_y],

mazePoint[current_x + 1][current_y]);

}

// 左

if (checkPosValid(current_x, current_y - 1)) {

System.out.print("左");

updatePoint(mazePoint[current_x][current_y],

mazePoint[current_x][current_y - 1]);

}

// 右

if (checkPosValid(current_x, current_y + 1)) {

System.out.print("右");

updatePoint(mazePoint[current_x][current_y],

mazePoint[current_x][current_y + 1]);

}

System.out.println("---------------");

}

/**

* 检查该节点是否有效

*

*/

private boolean checkPosValid(int x, int y) {

// 检查x,y是否越界,并且当前节点不是墙

if ((x >= 0 && x < mazePoint.length)

&& (y >= 0 && y < mazePoint[0].length)

&& (mazePoint[x][y].getValue() != 1)) {

// 检查当前节点是否已在关闭队列中,若存在,则返回"false"

Iterator it = closedQueue.iterator();

Point point = null;

while (it.hasNext()) {

if ((point = it.next()) != null) {

if (point.getX() == x && point.getY() == y)

return false;

}

}

return true;

}

return false;

}

/**

* 更新当前节点

*/

private void updatePoint(Point lastPoint, Point currentPoint) {

int last_x = lastPoint.getX();

int last_y = lastPoint.getY();

int current_x = currentPoint.getX();

int current_y = currentPoint.getY();

// 起始节点到当前节点的距离

int temp_g = GList[last_x][last_y] + 1;

// 当前节点到目的位置的距离

System.out.print(" [" + current_x + "," + current_y + "]"

+ mazePoint[current_x][current_y].getValue());

int temp_h = getPointDistance(current_x, current_y, endPoint.getX(),

endPoint.getY());

System.out.println("到目的位置的距离:" + temp_h);

// f(x) = g(x) + h(x)

int temp_f = temp_g + temp_h;

System.out.println("f(x) = g(x) + h(x) :" + temp_f + "=" + temp_g + "+"

+ temp_h);

// 如果当前节点在开启列表中不存在,则:置入开启列表,并且“设置”

// 1) 起始节点到当前节点距离

// 2) 当前节点到目的节点的距离

// 3) 起始节点到目的节点距离

if (!openQueue.contains(currentPoint)) {

openQueue.offer(currentPoint);

currentPoint.setFather(lastPoint);

System.out.println("添加到开启列表:" + currentPoint.getValue() + "["

+ currentPoint.getX() + "," + currentPoint.getY() + "]");

// 起始节点到当前节点的距离

GList[current_x][current_y] = temp_g;

// 当前节点到目的节点的距离

HList[current_x][current_y] = temp_h;

// f(x) = g(x) + h(x)

FList[current_x][current_y] = temp_f;

} else {

// 如果当前节点在开启列表中存在,并且,

// 从起始节点、经过上一节点到当前节点、至目的地的距离< 上一次记录的从起始节点、到当前节点、至目的地的距离,

// 则:“更新”

// 1) 起始节点到当前节点距离

// 2) 当前节点到目的节点的距离

// 3) 起始节点到目的节点距离

if (temp_f < FList[current_x][current_y]) {

// 起始节点到当前节点的距离

GList[current_x][current_y] = temp_g;

// 当前节点到目的位置的距离

HList[current_x][current_y] = temp_h;

// f(x) = g(x) + h(x)

FList[current_x][current_y] = temp_f;

// 更新当前节点的父节点

currentPoint.setFather(lastPoint);

}

System.out.println("currentPoint:" + currentPoint.getValue() + "["

+ currentPoint.getX() + "," + currentPoint.getY() + "]");

System.out.println("currentPoint.father:"

+ currentPoint.getFather().getValue() + "["

+ currentPoint.getFather().getX() + ","

+ currentPoint.getFather().getY() + "]");

}

}

/**

* 打印行走路径

*

*/

public void printPath() {

System.out.println("================ 开始打印行走路径【用8 表示】================");

Point father_point = null;

int[][] result = new int[mazeArray.length][mazeArray[0].length];

for (int i = 0; i < mazeArray.length; i++) {

for (int j = 0; j < mazeArray[0].length; j++) {

result[i][j] = 0;

}

}

int step = 0;

father_point = mazePoint[endPoint.getX()][endPoint.getY()];

while (father_point != null) {

System.out.println("【father_point】" + father_point.getValue() + "["

+ father_point.getX() + "," + father_point.getY() + "]");

if (father_point.equals(startPoint))

result[father_point.getX()][father_point.getY()] = 2;

else if (father_point.equals(endPoint)) {

result[father_point.getX()][father_point.getY()] = 3;

step++;

} else {

result[father_point.getX()][father_point.getY()] = 8;

step++;

}

father_point = father_point.getFather();

}

// 打印行走步数

System.out.println("step is : " + step);

for (int i = 0; i < mazeArray.length; i++) {

for (int j = 0; j < mazeArray[0].length; j++) {

System.out.print(result[i][j] + " ");

}

System.out.println();

}

}

}

(3)实验结果及分析。

实验结果:

很好的完成了实验目的,并且成功给出了最短路径!!A*算法作为解决最优路径的一种高效算法,自从1968年诞生以来,得到了广泛的应用,而其的多种改进算法也在许多领域发挥着作用。可以预见,在更优的算法发现以前,A*算法将会得到更广泛的应用,并会由于图论、

人工智能、机器人技术、自动控制等多学科的融合而得到更大的发展。

《人工智能基础》实验报告-实验名称:启发式搜索算法

实验名称:启发式搜索算法 1、实验环境 Visual C++ 6.0 2、实验目的和要求 (复述问题)使用启发式算法求解8数码问题 (1)编制程序实现求解8数码问题A*算法,采用估价函数 f(n)=d(n)+p(n) 其中:d(n)是搜索树中结点n的深度;w(n)为节点n的数据库中错放的旗子个数; p(n)为结点n的数据库中每个棋子与其目标位置之间的距离总和。 (2)分析上述(1)中两种估价函数求解8数码问题的效率差别,给出一个是p(n)的上界h(n)的定义,并测试该估价函数是否使算法失去可采纳性。 实验目的:熟练掌握启发式搜索A*算法及其可采纳性。 3、解题思路、代码 3.1解题思路 八数码问题的求解算法 (1)盲目搜索 宽度优先搜索算法、深度优先搜索算法 (2)启发式搜索 启发式搜索算法的基本思想是:定义一个评价函数f,对当前的搜索状态进行评估,找出一个最有希望的节点来扩展。 先定义下面几个函数的含义: f*(n)=g*(n)+h*(n) (1) 式中g*(n)表示从初始节点s到当前节点n的最短路径的耗散值;h*(n)表示从当前节点n到目标节点g的最短路径的耗散值,f*(n)表示从初始节点s经过n到目标节点g的最短路径的耗散值。 评价函数的形式可定义如(2)式所示: f(n)=g(n)+h(n) (2) 其中n是被评价的当前节点。f(n)、g(n)和h(n)分别表示是对f*(n)、g*(n)和h*(n)3个函数值的估计值。 利用评价函数f(n)=g(n)+h(n)来排列OPEN表节点顺序的图搜索算法称为算法A。在A算法中,如果对所有的x,h(x)<=h*(x) (3)成立,则称好h(x)为h*(x)的下界,它表示某种偏于保守的估计。采用h*(x)的下界h(x)为启发函数的A算法,称为A*算法针对八数码问题启发函数设计如下: F(n)=d(n)+p(n) (4)

搜索引擎-第二次实验报告

实验二:实验 一、实验目的: 根据网络爬虫的基本原理,实现一个简易网络爬虫,需要达到以下指标: 1、种子URL为https://www.wendangku.net/doc/9d5291282.html,; 2、至少抓取10000个页面; 3、至少完成3轮抓取,每轮给出更新的URL及其数量; 4、实现URL判重,列出每轮爬去时重复的URL数量; 5、数据存放到数据库中,能抽取出网页中的标题、页面生成日期(http协议中的时间),至少包含标题、时间、url、抓取时间、网页正文这几个字段。 二、实验方案: 1.爬虫分析与设计 我们组应用的是java来写爬虫,我们应用SSM框架将数据库和应用程序连接起来,可以在程序中更简单的进行数据库插入、查询等操作。 在对url处理的时候我们用的是Java的URL类,通过这个类可以获得请 求头的一些信息,例如编码方式。 如何获取url,我们一开始遇到了一些问题,直接解析网页中的ref 标签的时候得到的不全是网页链接,所以转换思路,我们先得到页面中 的标签,然后再得到标签里边href中的url,然后再对url进行处 理。 在处理url的时候,因为网页中的url并不是全部以http开头的,所以在url获取部分,对url的格式进行判断,如果通常格式就进行修改,例如,有的链接是”#”,我们就把开始搜索的url加到它的前边,形成一 个正确的url。

图1:应用URL类获取网页内容 图2:利用url请求头获取编码信息 图3:获取a标签

图4-1:获取url 图4-2:获取url

图5:url判重 2.数据库分析与设计 我们设计了两个表,一个是未爬取url表,两一个是已经爬取url表。 未爬取的表中村的是搜索判重之后,还没有爬取的url,已爬取的存储爬取到的信息。 图6:判重后需要爬取的url表 图7:爬取后url信息存储表

启发式搜索 八数码问题

启发式搜索 1. 介绍 八数码问题也称为九宫问题。在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格(以数字0来表示),与空格相邻的棋子可以移到空格中。 要求解决的问题是:给出一个初始状态和一个目标状态,找出一种从初始转变成目标状态的移动棋子步数最少的移动步骤。 所谓问题的一个状态就是棋子在棋盘上的一种摆法。解八数码问题实际上就是找出从初始状态到达目标状态所经过的一系列中间过渡状态。 2. 使用启发式搜索算法求解8数码问题。 1) A ,A 星算法采用估价函数 ()()()()w n f n d n p n ??=+??? , 其中:()d n 是搜索树中结点n 的深度;()w n 为结点n 的数据库中错放的棋子个数;()p n 为结点n 的数据库中每个棋子与其目标位置之间的距离总和。 2) 宽度搜索采用f(i)为i 的深度,深度搜索采用f(i)为i 的深度的倒数。 3. 算法流程 ① 把起始节点S 放到OPEN 表中,并计算节点S 的)(S f ; ② 如果OPEN 是空表,则失败退出,无解; ③ 从OPEN 表中选择一个f 值最小的节点i 。如果有几个节点值相同,当其中有一个 为目标节点时,则选择此目标节点;否则就选择其中任一个节点作为节点i ; ④ 把节点i 从 OPEN 表中移出,并把它放入 CLOSED 的已扩展节点表中; ⑤ 如果i 是个目标节点,则成功退出,求得一个解; ⑥ 扩展节点i ,生成其全部后继节点。对于i 的每一个后继节点j : 计算)(j f ;如果j 既不在OPEN 表中,又不在CLOCED 表中,则用估价函数f 把 它添入OPEN 表中。从j 加一指向其父节点i 的指针,以便一旦找到目标节点时记住一个解答路径;如果j 已在OPEN 表或CLOSED 表中,则比较刚刚对j 计算过的f 和前面计算过的该节点在表中的f 值。如果新的f 较小,则 (I)以此新值取代旧值。 (II)从j 指向i ,而不是指向他的父节点。 (III)如果节点j 在CLOSED 表中,则把它移回OPEN 表中。 ⑦ 转向②,即GOTO ②。

人工智能实验报告

人工智能实验报告 标准化文件发布号:(9312-EUATWW-MWUB-WUNN-INNUL-DQQTY-

****大学 人工智能基础课程实验报告 (2011-2012学年第一学期) 启发式搜索王浩算法 班级: *********** 学号: ********** 姓名: ****** 指导教师: ****** 成绩: 2012年 1 月 10 日

实验一 启发式搜索算法 1. 实验内容: 使用启发式搜索算法求解8数码问题。 ⑴ 编制程序实现求解8数码问题A *算法,采用估价函数 ()()()() w n f n d n p n ??=+???, 其中:()d n 是搜索树中结点n 的深度;()w n 为结点n 的数据库中错放的棋子个数;() p n 为结点n 的数据库中每个棋子与其目标位置之间的距离总和。 ⑵ 分析上述⑴中两种估价函数求解8数码问题的效率差别,给出一个是()p n 的上界的()h n 的定义,并测试使用该估价函数是否使算法失去可采纳性。 2. 实验目的 熟练掌握启发式搜索A *算法及其可采纳性。 3. 实验原理 使用启发式信息知道搜索过程,可以在较大的程度上提高搜索算法的时间效率和空间效率; 启发式搜索的效率在于启发式函数的优劣,在启发式函数构造不好的情况下,甚至在存在解的情形下也可能导致解丢失的现象或者找不到最优解,所以构造一个优秀的启发式函数是前提条件。 4.实验内容 1.问题描述 在一个3*3的九宫格 里有1至8 八个数以及一个空格随机摆放在格子中,如下图: 初始状态 目标状态 现需将图一转化为图二的目标状态,调整的规则为:每次只能将空格与其相邻的 一个数字进行交换。实质是要求给出一个合法的移动步骤,实现从初始状态到目标状态的转变。 2.算法分析 (1)解存在性的讨论

搜索引擎营销实验报告

搜索引擎营销实验报告 实验概述: 【实验目的及要求】了解关于搜索引擎的基本知识以及与其实际应用的搜索引擎广告营销与当前各网站的网站策略。 【实验原理】通过网上实际操作与搜索加强学生对现实搜索引擎营销情况的了解 【实验环境】各主要搜索引擎 实验内容: 【实验方案设计】通过对各搜索引擎的使用体验来增强学生关于搜索引擎营销的基本知识与各引擎广告策略的不同之处 【实验过程】 实验一:了解常见的搜索引擎和类别的基本形式 1.全文搜索引擎和目录索引引擎的区别是什么? 下表由几个角度比较了全文搜索引擎与目录索引的不同点: 实验二:了解百度的广告策略 1.竞价排名的含义 竞价排名的基本特点是按点击付费,推广信息出现在搜索结果中(一般是靠前的位置),如果没有被用户点击,则不收取推广费。 2.对“鲜花”查询竞价 竞价排名显示:

经查询显示排在第一位的是一家名叫“精品鲜花”的门户网站。 自然排名显示: 3.思考讨论:百度的广告策略如何策划的。谈谈你的看法。 百度是通过竞价排名来实现广告策划的。从企业的角度来说,企业可以根据自己的财务预算来进行广告竞价投放。从百度的角度来说,能以量化的形式衡量各搜索结果的排序而获得盈利。而从顾客的角度来说,可能从排名中意外地获得一些所需的信息。 通过平时对百度搜索引擎的使用,其广告策略基本合理。 实验三:对比搜索引擎收录情况 1.对比各搜索引擎关键字的搜索情况 2.搜索西安到三原的距离 对“百度”与“谷歌”进行“西安到三原的距离”关键字搜索后,第一条出现的便是“西安到三原自驾车路线, 距离三原县公路里程44.8千米”成功地搜出两地距离。而“雅虎”搜索得手工从“雅虎地图”中搜出两地距离。 3. 各个搜索引擎对同类网站的收录情况是否相同?如果不相同,各个搜索引擎有什么特点? 各个搜索引擎对同类网站的收录情况不尽相同。百度与谷歌属于全文引擎搜索,其网页数据库的更新速度也不相同,但收录网页数与更新的速度是谷歌比百度更快,内容更丰富。而雅虎属于目录索引搜索引擎,其网站专业分类性较强,虽然信息收藏量比全文搜索引擎要少,但是其针对性更强,找到的信息会更细致。

实验一 启发式搜索算法

实验一启发式搜索算法 学号:2220103430 班级:计科二班 姓名:刘俊峰

一、实验内容: 使用启发式搜索算法求解8数码问题。 1、编制程序实现求解8数码问题A *算法,采用估价函数 ()()()()w n f n d n p n ??=+??? , 其中:()d n 是搜索树中结点n 的深度;()w n 为结点n 的数据库中错放的棋子个数;()p n 为结点n 的数据库中每个棋子与其目标位置之间的距离总和。 2、 分析上述⑴中两种估价函数求解8数码问题的效率差别,给出一个是()p n 的上界 的()h n 的定义,并测试使用该估价函数是否使算法失去可采纳性。 二、实验目的: 熟练掌握启发式搜索A * 算法及其可采纳性。 三、实验原理: (一)问题描述 在一个3*3的方棋盘上放置着1,2,3,4,5,6,7,8八个数码,每个数码占一格,且有一个空格。这些数码可以在棋盘上移动,其移动规则是:与空格相邻的数码方格可以移入空格。现在的问题是:对于指定的初始棋局和目标棋局,给出数码的移动序列。该问题称八数码难题或者重排九宫问题。 (二)问题分析 八数码问题是个典型的状态图搜索问题。搜索方式有两种基本的方式,即树式搜索和线式搜索。搜索策略大体有盲目搜索和启发式搜索两大类。盲目搜索就是无“向导”的搜索,启发式搜索就是有“向导”的搜索。 启发式搜索:由于时间和空间资源的限制,穷举法只能解决一些状态空间很小的简单问题,而对于那些大状态空间的问题,穷举法就不能胜任,往往会导致“组合爆炸”。所以引入启发式搜索策略。启发式搜索就是利用启发性信息进行制导的搜索。它有利于快速找到问题的解。 由八数码问题的部分状态图可以看出,从初始节点开始,在通向目标节点的路径上,各节点的数码格局同目标节点相比较,其数码不同的位置个数在逐渐减少,最后为零。所以,这个

人工智能实验 旅行商问题 启发式搜索

人工智能实验2 旅行商问题 实验课名称:人工智能原理与应用 实验项目名称:旅行商问题 专业名称:计算机科学与技术(交通信息) 班级:24020804 学号:2402080423 学生姓名:邢洪伟 教师姓名:慕晨 2010年12月20日

一、实验名称:旅行商问题 二、实验目的:用OPEN 表和CLOSED 表解决搜索问题 三、实验要求: 1、必须使用OPEN 表和CLOSED 表 2、明确给出问题描述、系统初始状态、目标状态和启发式函数 3、除了初始状态以外,至少搜索四层 4、给出解路径(解图) 四、实验原理:启发式搜索。其基本思想是优先扩展路径耗散最小的节点,对于任意节点n ,用f(n)来表示n 到初始节点的路径耗散,即代价。 五、 实验内容:旅行商问题 1.问题描述 设西安、太原、北京、济南、郑州、南京、重 庆、武汉、上海、杭州十个城市,旅行者从西安 出发,到达城市上海,路径长度如下图图所示, 走怎样的路线路径最短? 2.启发式函数:f(n)=h(n) 其中h(n)表示相邻两城市间的路径长度 3.实验实现: 西安8 太原9 重庆7 郑州 5 武汉5.5 北京 8 武汉5.5 济南4.5 南京2 杭州 1.5 上海 西安 郑州 上海 北京 太原 武汉南京 杭州 重庆济南

OPEN 表 CLOSED 表 六、 实验体会: 通过本次用OPEN 表和CLOSED 表解决搜索问题的实验,让我对启发式搜索有了进一步的了解。启发式搜索,也称为有信息搜索,借助问题的特定知识来帮助选择搜索方向;在搜索过程中对待扩展的每一个节点进行评估,得到最好的位置,再从这个位置进行搜索直到目标。本次实验中采用的启发式函数为f(n)=h(n),巧妙地利用了旅行费最少这一点,使得搜索变得简单。

631306050123黄嘉城+谓词演算+启发式搜索

重庆交通大学计算机与信息学院验证性实验报告 班级:计软专业 13 级 1 班 学号: 631306050123 姓名:黄嘉城 实验项目名称:谓词演算 实验项目性质:验证性实验 实验所属课程:人工智能 实验室(中心):软件中心实验室(语音楼8楼)指导教师:朱振国 实验完成时间: 2016 年 6 月 10 日

一、实验目的 理解和掌握谓词演算 二、实验内容及要求 在一个空房间中,机器人将A桌子上的盒子搬移到B桌子上,用选定的编程语言编写程序,演示谓词演算过程。 三、实验设备及软件 visual studio 四、设计方案 ㈠题目 机器人搬盒子 ㈡设计的主要思路 设在房内c处有一个机器人,在a及b处各有一张桌子, a桌上有一个盒子。为了让机器人从c处出发把盒子从a处 拿到b处的桌上,然后再回到c处,需要制订相应的行动规划。 现在用一阶谓词逻辑来描述机器人的行动过程。 ㈢主要功能 实现机器人搬盒子移动 五、主要代码 #include "stdio.h"

//定义初始状态 char state[10][20]={"AT(robot,c)","EMPTY(robot)", "ON(box,a)","TABLE(a)","TABLE(b)"}; //定义目标状态 char end_state[5][20]={"AT(robot,c)","EMPTY(robot)", "ON(box,b)","TABLE(a)","TABLE(b)"}; int state_num=5; int number;//记录某字符串在总数据库中的位置 bool IsInState(char *S1) /*判断字符串(状态)是否在总数据库中*/ { int i,j; bool flag; //printf("S1:%s\n state[0]: %s state[1]: %s\n",S1,state[0],state[1]); //printf("%d\n",state_num); for(i=0;i

实验五搜索引擎使用实验

实验五搜索引擎使用实验一、实验目的 1.了解搜索引擎的发展情况和现状;理解搜索引擎的工作原理;2.了解中英文搜索引擎的基本知识和种类; 3. 掌握中英文搜索引擎的初级检索与高级检索两种方式; 4. 分析和对比各种中英文搜索引擎的共性与区别; 5. 了解网络促销的主要方式二、实验内容: 1. 找网上的中英文搜索引擎,并列出5个中文搜索引擎和5个英文搜索引擎的名称; 2.掌握google、百度中高级搜索语法应用方法。 3. 用3个中文、2个英文搜索引擎对同一主题\同一检索词(关键词)进行检索,从检索效果分析得到的检索结果,并比较分析你所选择的搜索引擎的共性与区别。 4.了解网络促销的应用方式和网络广告促销的特点三、实验步骤 1. 搜索引擎的关键词检索(1)进入Google,熟悉并掌握以下功能:掌握Google 的网站检索功能,选取一些关键词在主页上使用“所有网页”检索网页,并通过使用运算符提高查准率;同时使用“高级检索”功能;掌握Google的图像检索功能;掌握Google的网上论坛功能;掌握Google的主题分类检索功能。(2)进入百度,熟悉并掌握Baidu各功能。搜索到至少两个专利介绍网站,并搜索一条关于手机防盗产品的专利技术,写出检索步骤并截图。 2. 搜索引擎的高级搜索语法应用(百度或谷歌) 3.浏览不同类型的网络广告。四、实验报告 1.进入Google,

搜索关键词“搜索引擎优化”,要求结果格式为Word格式;搜索关键词“电子商务”,但结果中不要出现“网络营销”字样;分别写出检索步骤并截图。 2. 精确匹配——双引号和书名号,分别加和不加双引号搜索“山东财经大学”,查看搜索结果。分别加和不加书名号搜索“围城”,查看搜索结果。 3. 搜索同时包含“山东财经大学”和“会计学院”的网页,并查看数量。 4.利用百度搜索两个专利介绍网站,并搜索一条关于手机防盗产品的专利技术,写出检索步骤并截图。 5.选择使用Google和百度,查询某商务信息(自定,如“海尔2012年销售额” )。要求写出:搜索引擎的名称、检索信息的主题、检索结果(列出前5个)。6.分析实验中所使用搜索引擎的优缺点。 7.比较说明中国和美国的网络广告发展情况。五.实验操作答案 1.(1)可以直接搜索word版的搜索引擎优化即可。如下图 (2)操作和上面差不多,看下图 2.不加引号搜索“山东财经大学”时,没有结果;而加引号时则有许多搜索结果。但是加不加引号搜索“围城”时,结果却是相同的。 3.大多为关于山东财经大学的信息,而会计学院则是属于山财的分支。 4. 1.进入

启发式搜索算法解决八数码问题(C语言)

1、程序源代码 #include #include struct node{ int a[3][3];//用二维数组存放8数码 int hx;//函数h(x)的值,表示与目标状态的差距 struct node *parent;//指向父结点的指针 struct node *next;//指向链表中下一个结点的指针 }; //------------------hx函数-------------------// int hx(int s[3][3]) {//函数说明:计算s与目标状态的差距值 int i,j; int hx=0; int sg[3][3]={1,2,3,8,0,4,7,6,5}; for(i=0;i<3;i++) for(j=0;j<3;j++) if(s[i][j]!=sg[i][j]) hx++; return hx; } //-------------hx函数end----------------------// //-------------extend扩展函数----------------// struct node *extend(node *ex) { //函数说明:扩展ex指向的结点,并将扩展所得结点组成一条//单链表,head指向该链表首结点,并且作为返回值 int i,j,m,n; //循环变量 int t; //临时替换变量 int flag=0; int x[3][3];//临时存放二维数组 struct node *p,*q,*head; head=(node *)malloc(sizeof(node));//head p=head; q=head; head->next=NULL;//初始化 for(i=0;i<3;i++)//找到二维数组中0的位置 { for(j=0;j<3;j++)

人工智能实验报告

计算机科学与技术1341901301 敏 实验一:知识表示方法 一、实验目的 状态空间表示法是人工智能领域最基本的知识表示方法之一,也是进一步学习状态空间搜索策略的基础,本实验通过牧师与野人渡河的问题,强化学生对知识表示的了解和应用,为人工智能后续环节的课程奠定基础。 二、问题描述 有n个牧师和n个野人准备渡河,但只有一条能容纳c个人的小船,为了防止野人侵犯牧师,要求无论在何处,牧师的人数不得少于野人的人数(除非牧师人数为0),且假定野人与牧师都会划船,试设计一个算法,确定他们能否渡过河去,若能,则给出小船来回次数最少的最佳方案。 三、基本要求 输入:牧师人数(即野人人数):n;小船一次最多载人量:c。 输出:若问题无解,则显示Failed,否则,显示Successed输出一组最佳方案。用三元组(X1, X2, X3)表示渡河过程中的状态。并用箭头连接相邻状态以表示迁移过程:初始状态->中间状态->目标状态。 例:当输入n=2,c=2时,输出:221->110->211->010->021->000 其中:X1表示起始岸上的牧师人数;X2表示起始岸上的野人人数;X3表示小船现在位置(1表示起始岸,0表示目的岸)。 要求:写出算法的设计思想和源程序,并以图形用户界面实现人机交互,进行输入和输出结果,如: Please input n: 2 Please input c: 2 Successed or Failed?: Successed Optimal Procedure: 221->110->211->010->021->000 四、算法描述 (1)算法基本思想的文字描述;

启发式搜索算法在N数码问题中的应用

编号 南京航空航天大学毕业论文 题目启发式搜索算法在N数码问 题中的应用 学生姓名 学号 学院 专业 班级 指导教师 二〇一三年六月

南京航空航天大学 本科毕业设计(论文)诚信承诺书本人郑重声明:所呈交的毕业设计(论文)(题目:启发式搜索算法在N数码问题中的应用)是本人在导师的指导下独立进行研究所取得的成果。尽本人所知,除了毕业设计(论文)中特别加以标注引用的内容外,本毕业设计(论文)不包含任何其他个人或集体已经发表或撰写的成果作品。 作者签名:年月日 (学号):

启发式搜索算法在N数码问题中的应用 摘要 N数码问题是人工智能领域中的经典问题,N数码可以有效的判断一个搜索算法的优劣。在低阶数码问题中,使用简单的宽搜或深搜就可以解决问题,但在高阶数码中,由于其巨大的搜索规模,我们必须采用更加智能的算法才能解决问题。与传统搜索相比,启发式搜索当前搜索过程中的信息,选择最为可行的状态进行拓展,从而大大提高了搜索的质量和效率。 本文通过建立N数码问题的存储机制和移动规则,使得N数码问题转化为了一个标准的搜索问题。并着重分析了A*算法和遗传算法在N数码中的应用,在A*算法中使用了两种不同的估价函数,目的是比较不同估价函数在N数码问题中的表现。在最后,本文进行了大量实验,综合分析了A*算法和遗传算法在不同规模数据下的优劣。 关键词:启发式搜索,数码问题,A*算法,遗传算法

The Application of Heuristic Search Algorithm on N-Puzzle Problem Abstract N-puzzle problem is a classic problem in artificial intelligence. N-puzzle problem can effectively judge the merits of a search algorithm. In the low order puzzle problem, using a Depth-First-Search or Breadth-First-Search can solve the problem, but in the higher order digital, because of the huge search space area,we must adopt a more intelligent https://www.wendangku.net/doc/9d5291282.html,pared with the traditional search method, heuristic search uses the information in the search process, and it will choose the most feasible state, thus greatly improves the search quality and efficiency. This paper designs the storage mechanism and movement rules of N-puzzle problem, making the N-puzzle problem transforms to a standard search problem. This paper focuses on the application of A* algorithm and genetic algorithm in N-puzzle problem, and two different evaluation function used in A* algorithm. The objective is to compare the performance of different valuation function in N digital problem. In the end, this paper carries out a large number of experiments, a comprehensive analysis of the A* algorithm and genetic algorithm in different scale of data. Key Words:Heuristic Search;N-puzzle Problem;A* algorithm; Genetic algorithm

八数码问题人工智能实验报告

基于人工智能的状态空间搜索策略研究 ——八数码问题求解 (一)实验软件 TC2.0 或VC6.0编程语言或其它编程语言 (二)实验目的 1. 熟悉人工智能系统中的问题求解过程; 2. 熟悉状态空间的盲目搜索和启发式搜索算法的应用; 3. 熟悉对八数码问题的建模、求解及编程语言的应用。 (三)需要的预备知识 1. 熟悉TC 2.0或VC6.0 编程语言或者其它编程语言; 2. 熟悉状态空间的宽度优先搜索、深度优先搜索和启发式搜索算法; 3. 熟悉计算机语言对常用数据结构如链表、队列等的描述应用; 4. 熟悉计算机常用人机接口设计。 (四)实验数据及步骤 1. 实验内容 八数码问题:在3×3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态到目标状态。 图1 八数码问题示意图 请任选一种盲目搜索算法(深度优先搜索或宽度优先搜索)或任选一种启发式搜索方法(A 算法或A* 算法)编程求解八数码问题(初始状态任选),并对实验结果进行分析,得出合理的结论。 2. 实验步骤 (1)分析算法基本原理和基本流程; 程序采用宽度优先搜索算法,基本流程如下:

(2)确定对问题描述的基本数据结构,如Open表和Closed表等;

(3)编写算符运算、目标比较等函数; (4)编写输入、输出接口; (5)全部模块联调; (6)撰写实验报告。 (五)实验报告要求 所撰写的实验报告必须包含以下内容: 1. 算法基本原理和流程框图; 2. 基本数据结构分析和实现; 3. 编写程序的各个子模块,按模块编写文档,含每个模块的建立时间、功能、输入输出参数意义和与其它模块联系等; 4. 程序运行结果,含使用的搜索算法及搜索路径等; 5. 实验结果分析; 6. 结论; 7. 提供全部源程序及软件的可执行程序。 附:实验报告格式 一、实验问题 二、实验目的 三、实验原理 四、程序框图 五、实验结果及分析 六、结论

中文数据库的检索实验报告

实验报告 课程名称计算机信息检索 实验项目名称 班级与班级代码 实验室名称(或课室) 专业 任课教师 学号: 姓名: 实验日期:

姓名实验报告成绩 评语: 指导教师(签名) 年月日说明:指导教师评分后,学年论文交院(系)办公室保存。

实验一 一、实验目的 掌握常见中文数据库的检索方式。利用所学理论知识,结合实验分析不同数据库在信息组织、检索分式等方面的特点。 二、实验内容: 用一专题在六个中文数据库、检索结果主要也目录和摘要为主。 检索专题自选。 1、中国期刊网 2、维普中文科技期刊数据库 3、万方数据资源系统 4、国研网 5、中宏数据库 6、人大复印资料 7、高校财经数据库 三、实验环境 CPU:Intel(R) core?2 CPU 内存:1G 软件:IE 资源:互联网 四、实验步骤 1.进入广东商学院图书馆网页,点击数字资源,进入中国期刊数据库。 2. 根据自己检索课题的要求,采用分类检索与主题检索在加上 3.鉴于以上检索的结果记录数较多,而且与需求的相关性低,采用以下缩减手段:

(1)在检索导航中更改默认分类:只选择“经济与管理”类 (2)更改更新时间(2005~2009),得到结果; (3)把模糊匹配改为精确匹配得到结果; 4. 通过亲自查看其摘要,全文的方式,剔除一些不相关的文献,并归纳出剔除文章的原则。 5. 将最后的所得的与主题密切相关的文献题录信息拷贝下来,保存在作业文件夹中。并在实验报告中体现出来。 6. 把最后所得的期刊论文的全文都一一拷贝下来。保存在自己的移动硬盘中。作为后期撰写文献综述的依据之一。 7. 登陆到学校的重庆维普数据库、人大报刊索引全文数据库,万方全文数据库期刊、国研网子系统,重复2,3,4,5,6,将所得检索结果拷贝下来,放在作业文件夹 五、试验结果 实验步骤3(2)(3)的结果如下,其它数据库结果类似 六、实验分析 期刊网的主页上免费的资源有:学术研究、工具书检索、党和国家大事、文化与生活、学习教育、行业知识仓库等,在相应领域的信息检索中起着重要作用。

人工智能实验报告

人工智能实验报告 实验一 在搜索策略实验群 实验目的 熟悉和掌握启发式搜索的定义、估价函数和算法过程,并利用A*算法求解N 数码难题,理解求解流 程和搜索顺序。 搜索图 算法比较 广度优先 深度优先 A* Open 表 节点G ,节点10 节点G ,节点6 节点3,节点9,节点G ,节点 10,节点8 Close 表 节点s ,节点1,节点2,节点3,节点4,节点5,节点6,节点7,节点8,节点9 节点s,节点1,节点3,节点7, 节点4,节点8,节点2,节点5, 节点9 节点s ,节点2,节点1,节点 5,节点6,节点4 估价函数 无 无 )()()(n h n g n f += 搜索节点次序 记录 节点s ,节点1,节点2,节点3,节点4,节点5,节点6,节点7,节点8,节点9,节点G 节点s,节点1,节点3,节点7, 节点4,节点8,节点2,节点5, 节点9,节点G 节点s ,节点2,节点1,节点 5,节点6,节点4,节点G 观测结果 经过11步搜索得到目标节点 经过10步搜索得到目标节点 经过7步搜索得到目标节点 学生结论 宽度优先搜索能保证在搜索树 深度优先搜索要沿路径一条一 A*算法是启发式算法的一

中找到一条通向目标节点的最短路径,但由于盲目性大所以当搜索数据比较多的时候该方法较为 费时。条的走到底,如果目标在前几条 路径中那么该搜索会较为快捷, 在本搜索树中虽然比宽度优先少 一步,但是若第一条路径或者某 几条路径很深,则该搜索会相当 耗时且不能保证成功。 种能通过路径的权值找出代价 最为小的一条,所以很具优越 性,但是算法本身计算较为复 杂,要考虑以前的和将来两方 面的代价,进行估算,所以没 有前两种方法简单。

搜索引擎优化实验报告

实验 成绩 实验评阅教师签名 简 要 评 语 华北科技学院管理系 实验报告册 20 实验课程名称: 网上创业 实验项目序号: 实验六 实验项目名称: 搜索引擎优化 实验室名称: 电子商务实验室 开课学 期: 2011 ——2012 学年第 1 学期 授 课 教 师: 白宏斌 实验指导教师: 白宏斌 专 业: 电子商务专业 班 级: B09-3 姓 名: 巩伟 学 号: 200904064327

实验报告实验时间: 2011 年12月20 日

关键词:新闻 凤凰网 凤凰网是一个集图文资讯、视频点播、专题报道、虚拟社区、免费资源、电子商务为一体的Internet 站点;网站设有专栏,介绍凤凰卫视中文台、资讯台、电影台、欧洲台、美洲台和《凤凰周刊》。凤凰网秉承“开创新视野,创造新文化”之精神,凤凰展翅之理想,始终坚持以先进科技配合卓越服务,根据每一位用户和客户的需求制定个性化的服务程式,务求协助用户和客户准确达成目标,创造辉煌成绩。 凤凰网是一个集图文资讯、视频点播、专题报道、虚拟社区、免费资源、电子商务为一体的Internet站点;网站设有专栏,介绍凤凰卫视中文台、资讯台、电影台、欧洲台、美洲台和《凤凰周刊》。 一、标志 凤凰LOGO由两只凤凰构成一个圆,中间是一只注视着世界的眼睛。颜色的基调是象征高贵、雍荣的黄色,黄色之中,又有热烈、耀眼的红色,这两种颜色是中国人最喜欢的。 1、一凤一凰两只鸟,盘旋飞舞、和谐互动的共容在一个圆内。寓意凤凰的起源、成形;凤凰台的东方特色;凤凰台是东西传媒合作的产物。 2、两只鸟头朝里,尾朝外呈弧形打开,所有的口都是开放的。寓意在中国传统的、封闭的意识形态中找到出口;开门办台,欢迎合作,迎接挑战,吸收各种先进经验和优秀文化;发挥传媒影响力,以开放姿态融入世界,让世界了解中国。 3、与中国道教的太极图有形似意同之妙。寓意阴阳的彼此对立又相互消长,阴阳是宇宙运行之道,是万物之和,世界之和。 4、中国解释历史的方式是盛衰分合带有轮转的性质,西方的历史观以直线前进的观点为基础。凤凰LOGO将二者结合为螺旋式前进。团凤构成的圆又是像一个地球,寓意凤凰将把影响力扩大到全世界。 凤凰网是凤凰新媒体旗下的一个图文音、视频综合资讯网站,提供国际、中国大陆及港、澳、台地区的时政、社会、财经、娱乐、时尚、生活等综合新闻信息;以博客、论坛、辩论、调查等Web 2.0应用为用户提供互动与共动交流空间;以RSS、TAG、点播、轮播、个人节目表等可订制的多媒体服务满足用户的个性化信息需求。 二、资讯中心 资讯频道 凤凰资讯,真实、多维、高远,立足大中华、聚焦两岸三地、放眼全世界,为你提供与国内媒体不尽相同的资讯大餐。高度、角度、尺度、深度、热度、速度、黏度,第一时间将资讯的力量与您分享,是个人提升不可缺少的资讯平台。 财经频道 高端财经、深度解读、全球视野、独家观点、评论访谈,凤凰网财经频道依托强大的凤凰

搜索引擎技术基础-多线程编程实验报告

昆明理工大学信息工程与自动化学院学生实验报告 (2011 —2012 学年第 1 学期) 课程名称:搜索引擎技术基础开课实验室:信自楼445 2011年 11月 9日 一、实验目的 1、掌握Socket通信原理。 2、掌握并实现多线程编程技术 二、实验原理及基本技术路线图(方框原理图) 无 三、上机平台、环境 PC机,MyEclipse 7.5版本 四、实验方法、步骤 1、通过Socket通信实现客户端与服务器端的通信。

2、实现服务器端对客户端的多线程技术。 五、实验过程原始记录(数据、图表、计算等) 1、通过Socket通信实现客户端与服务器端的通信。 Socket通信分为ServerSocket和Socket两部分,ServerSocket类提供TCP连接服务,Socket类提供进行通信的Socket对象。 建立TCP连接的各个步骤:分别是: ●服务器创建一个ServerSocket对象,指定端口号,ServerSocket 对象等待客户端的连接请求。 ●客户端创建一个Socket对象,指定主机地址和端口号,向服务端发 出连接请求。 ●服务端接收到客户端的连接请求,建立一条TCP连接,再创建一个 Socket对象与客户端的Socket对象进行通信。 ●当一方决定结束通信,向对方发送结束信息;另一方接收到结束信 息后,双方分别关闭各自的TCP连接。 ●ServerSocket对象停止等待客户端的连接请求。 作为服务器首先构造一个提供TCP连接服务的ServerSocket对象,然后指定其端口号,如果接收到客户端的连接请求,则建立一条TCP连接,再创建一个Socket对象与客户端的Socket对象进行通信,然后将从文件中读入的数据传送给客户端。由于服务器需要一直等待连接,所以需要监听端口请求。 源程序: (1)服务器端 EchoServer.java package test1; import https://www.wendangku.net/doc/9d5291282.html,.* ; public class EchoServer implements Runnable{ public static void main(String args[]) throws Exception { // 所有异常抛出ServerSocket server = null ; // 定义ServerSocket类 Socket client = null ; // 表示客户端

八数码问题求解--实验报告讲解-共16页

实验报告 一、实验问题 八数码问题求解 二、实验软件 VC6.0 编程语言或其它编程语言 三、实验目的 1. 熟悉人工智能系统中的问题求解过程; 2. 熟悉状态空间的盲目搜索和启发式搜索算法的应用; 3. 熟悉对八数码问题的建模、求解及编程语言的应用。 四、实验数据及步骤 (一、)实验内容 八数码问题:在3×3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态到目标状态。 2 8 3 1 2 3 1 4 8 4 7 6 5 7 6 5 (a) 初始状态(b) 目标状态 图1 八数码问题示意图 (二、)基本数据结构分析和实现 1.结点状态 我采用了struct Node数据类型 typedef struct _Node{

int digit[ROW][COL]; int dist; // distance between one state and the destination一 个表和目的表的距离 int dep; // the depth of node深度 // So the comment function = dist + dep.估价函数值 int index; // point to the location of parent父节点的位置 } Node; 2.发生器函数 定义的发生器函数由以下的四种操作组成: (1)将当前状态的空格上移 Node node_up; Assign(node_up, index);//向上扩展的节点 int dist_up = MAXDISTANCE; (2)将当前状态的空格下移 Node node_down; Assign(node_down, index);//向下扩展的节点 int dist_down = MAXDISTANCE; (3)将当前状态的空格左移 Node node_left; Assign(node_left, index);//向左扩展的节点 int dist_left = MAXDISTANCE; (4)将当前状态的空格右移 Node node_right; Assign(node_right, index);//向右扩展的节点 int dist_right = MAXDISTANCE; 通过定义结点状态和发生器函数,就解决了8数码问题的隐式图的生成问题。接下来就是搜索了。 3.图的搜索策略 经过分析,8数码问题中可采用的搜速策略共有:1.广度优先搜索、2.深度优先搜索、2.有界深度优先搜索、4.最好优先搜索、5.局部择优搜索,一共五种。其中,广度优先搜索法是可采纳的,有界深度优先搜索法是不完备的,最好优先和局部择优搜索法是启发式搜索法。 实验时,采用了广度(宽度)优先搜索来实现。 (三、)广度(宽度)优先搜索原理 1. 状态空间盲目搜索——宽度优先搜索 其基本思想是,从初始节点开始,向下逐层对节点进形依次扩展,并考察它是否为目标节点,再对下层节点进行扩展(或搜索)之前,必须完成对当层的所有节点的扩展。再搜索过程中,未扩展节点表OPEN中的节点排序准则是:先进入的节点排在前面,后进入的节点排在后面。其搜索过程如图(1)所示。

SEO实验报告

武汉纺织大学《网站推广与搜索引擎优化》小组实验报告班级:姓名:学号:序号: 姓名:学号:序号: 姓名:学号:序号: 姓名:学号:序号:实验时间:年月日--- 年月日 一、实验目的 能应用所学知识、对网站做网站优化和分析 二、实验内容 案例分析(A、B课题里任选一题) A.应用所学知识、从8个阶段对自己所熟悉的网站做网站优化 第一阶段:网站基本信息 第二阶段:去除弊端 第三阶段:网站结构 第四阶段:关键字策略 第五阶段:页面优化 第六阶段:页面索引 第七阶段:外部链接关系建立 第八阶段:网站维护 B. 应用所学知识、从以下方面对自己所熟悉的网站进行分析 1、网站基本信息 2、关键字查找与筛选 3、搜索量评估 4、构建网站结构 5、构建网页结构 6、关键字分布及表现 7、URL优化 8、头部优化 9、代码优化 三、备注(链接失效时,请baidu, google) 1.搜索引擎允许用户自己提交网站(一般只需要提交首页或者网站域名即可) Google:https://www.wendangku.net/doc/9d5291282.html,/addurl/?hl=zh-CN 百度:https://www.wendangku.net/doc/9d5291282.html,/search/url_submit.html 2. 寻找关键字 谷歌AdWords关键字工具(需要注册)https://www.wendangku.net/doc/9d5291282.html,

使用Google Insights(搜索解析)https://www.wendangku.net/doc/9d5291282.html,/insights 3.关键字评估 百度指数:https://www.wendangku.net/doc/9d5291282.html, 谷歌趋势:https://www.wendangku.net/doc/9d5291282.html,/trends/ 4.长尾关键字法 百度风云榜:https://www.wendangku.net/doc/9d5291282.html, 谷歌热榜:https://www.wendangku.net/doc/9d5291282.html,/rebang/home (失效) 5.网页访问速度会影响到网站页面被抓取的效果 ?使用Google Webmaster Tools下的“Google的抓取速度” ?用Google Page Speed来检测速度 ?安装firebug ?安装Page Speed 6.结构优化和内链建设 6.1 生成sitemap的方法: 第一种方式:https://www.wendangku.net/doc/9d5291282.html,/:网站地图自动生成器,在这里大家可以选择一个自己熟悉的网站生成一个网站地图的xml文件,生成的速度比较慢,所以选择不要太大的网站。生成的xml文件应该借助ftp协议上传到自己网站的根目录下。 第二种方式:Site Map Builder .NET 官方下载地址:https://www.wendangku.net/doc/9d5291282.html,/downloads/SiteMapBuilder.zip 需要Microsoft? .NET Framework 1.1支持官方下载地址:https://www.wendangku.net/doc/9d5291282.html,/downloads /details.aspx?familyid=262D25E3-F589-4842-8157-034D1E7CF3A3&displaylang=zh-cn ; 注意:【安装方式:先安装.NET Framework 1.1,然后安装Site Map Builder .NET 】第三种方式:XENU.EXE工具生成.html的地图 1、运行XENU.EXE文件,先单击“options”菜单,取消除“Valid text Url”外的其他多选按钮前的“√”,如果不取消则会结果中出现更多的选项。 2、然后选择“File”菜单下的“Check Url”命令,在第一个输入框里输入你的网址,最后单击“确定”。 3、过一段时间,系统会提示你检查完毕; 4、这时选择“File”菜单下的“Report”命令,系统会自动打开一个IE窗口,这就是生成的静态页面了。 5、最后,将此文件保存,并根据自己的要求,在DreamWeaver 或者FrontPage里面把这个静态页面修改一下即可。 7.外部优化和外链建设 7.1 往dmoz添加网站 ?进入:https://www.wendangku.net/doc/9d5291282.html,/World/Chinese_Simplified ?选择正确的目录 ?选择一个有编辑积极维护的目录

相关文档
相关文档 最新文档