人工智能课程设计报告-罗马尼亚度假问题

我在此端你在彼岸 范文 报告范文
精选回答

人工智能课程设计报告-罗马尼亚度假问题本文简介:人工智能课程设计报告课程:人工智能课程设计报告班级:姓名:学号:指导教师:赵曼2015年11月人工智能课程设计报告课程背景人工智能(ArtificialIntelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算

人工智能课程设计报告-罗马尼亚度假问题本文内容:

人工智能课程设计报告

程:人工智能课程设计报告

级:

名:

号:

指导教师:赵曼

2015年11月

人工智能课程设计报告

课程背景

人工智能(Artificial

Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。

人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。

人工智能是对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。

人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种“复杂工作”的理解是不同的。

人工智能是计算机学科的一个分支,二十世纪七十年代以来被称为世界三大尖端技术之一(空间技术、能源技术、人工智能)。也被认为是二十一世纪三大尖端技术(基因工程、纳米科学、人工智能)之一。这是因为近三十年来它获得了迅速的发展,在很多学科领域都获得了广泛应用,并取得了丰硕的成果,人工智能已逐步成为一个独立的分支,无论在理论和实践上都已自成一个系统。

人工智能是研究使计算机来模拟人的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。人工智能将涉及到计算机科学、心理学、哲学和语言学等学科。可以说几乎是自然科学和社会科学的所有学科,其范围已远远超出了计算机科学的范畴,人工智能与思维科学的关系是实践和理论的关系,人工智能是处于思维科学的技术应用层次,是它的一个应用分支。从思维观点看,人工智能不仅限于逻辑思维,要考虑形象思维、灵感思维才能促进人工智能的突破性的发展,数学常被认为是多种学科的基础科学,数学也进入语言、思维领域,人工智能学科也必须借用数学工具,数学不仅在标准逻辑、模糊数学等范围发挥作用,数学进入人工智能学科,它们将互相促进而更快地发展。

题目一:罗马利亚度假问题

一.

问题描述

分别用代价一致的宽度优先、有限制的深度优先(预设搜索层次)、贪婪算法和A*算法求解“罗马利亚度假问题”。即找到从初始地点

Arad到

目的地点

Bucharest

的一条路径。

要求:

分别用文件存储地图和启发函数表,用生成节点数比较几种算法在问题求解时的效率,并列表给出结果。

数据如下:

1、地图

2、启发函数值

Arad

366

Mehadia

241

Bucharest

0

Neamt

234

Craiova

160

Oradea

380

Doberta

242

Pitesti

100

Eforie

161

Rimmicu_Vikea

193

Fagaras

176

Sibiu

253

Glurgiu

77

Timisoara

329

Hirsova

151

Urziceni

80

Iasi

226

Vaslui

199

Lugoj

244

Zerind

374

3、地图数据表

0

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

140

1000

118

1000

1000

1000

1000

1000

75

1000

0

1000

1000

1000

1000

75

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

70

1000

1000

1000

0

1000

1000

1000

1000

101

1000

1000

211

1000

90

1000

1000

85

1000

1000

1000

1000

1000

1000

1000

0

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

87

1000

1000

1000

1000

1000

1000

1000

0

1000

120

138

1000

146

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

0

1000

1000

1000

1000

1000

151

1000

1000

1000

1000

1000

1000

1000

71

1000

75

1000

1000

120

1000

0

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

101

1000

138

1000

1000

0

1000

97

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

0

1000

1000

1000

1000

1000

86

1000

1000

1000

1000

1000

1000

1000

1000

1000

146

1000

1000

97

1000

0

1000

80

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

211

1000

1000

1000

1000

1000

1000

1000

0

99

1000

1000

1000

1000

1000

1000

1000

1000

140

1000

1000

1000

1000

151

1000

1000

1000

80

99

0

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

90

1000

1000

1000

1000

1000

1000

1000

1000

1000

0

1000

1000

1000

1000

1000

1000

1000

118

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

0

1000

1000

1000

1000

111

1000

1000

1000

1000

1000

1000

1000

1000

1000

86

1000

1000

1000

1000

1000

0

98

1000

1000

1000

1000

1000

1000

85

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

98

0

1000

1000

1000

1000

1000

1000

1000

87

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

0

92

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

92

0

1000

1000

1000

70

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

111

1000

1000

1000

1000

0

1000

75

1000

1000

1000

1000

71

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

1000

0

二.设计分析

1.算法分析

1)

宽度优先搜索算法

广度优先搜索使用队列(queue)来实现

1、把根节点放到队列的末尾。

2、每次从队列的头部取出一个元素,查看这个元素所有的下一级元素,把它们放到队列的末尾。并把这个元素记为它下一级元素的前驱。

3、找到所要找的元素时结束程序。

4、如果遍历整个图还没有找到,结束程序。

2)深度优先搜索算法

深度优先搜索用栈(stack)来实现,整个过程可以想象成一个倒立的树形:

1、把根节点压入栈中。

2、每次从栈中弹出一个元素,搜索所有在它下一级的元素,把这些元素压入栈中。并把这个元素记为它下一级元素的前驱。

3、找到所要找的元素时结束程序。

4、如果遍历整个树还没有找到,结束程序。

3)贪婪算法

1.建立数学模型来描述问题

⒉把求解的问题分成若干个子问题。

⒊对每一子问题求解,得到子问题的局部最优解。

⒋把子问题的解局部最优解合成原来解问题的一个解。

实现该算法的过程:

从问题的某一初始解出发;

while

能朝给定总目标前进一步

do

求出可行解的一个解元素;

由所有解元素组合成问题的一个可行解。

4)A*算法

A*[1]

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

公式表示为:

f(n)=g(n)+h(n),其中

f(n)

是从初始点经由节点n到目标点的估价函数,

g(n)

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

h(n)

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

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

估价值h(n)实际值,搜索的点数少,搜索范围小,效率高,但不能保证得到最优解。

2.数据结构

1)图结构:

实现存储“罗马尼亚度假问题”的图空间;

抽象图结构的实现:

typedef

struct

//图节点类型

{

char

cityname[20];

int

value;

int

cost;

}Ver;

class

Graph

//图结构

{

public:

Graph();

~Graph();

Ver

V[MaxV];

int

edge[MaxV][MaxV];

int

numofedges;

//注意这个变量的引用位置

//读取地图节点信息

void

ReadVertex();

//读取地图边关系信息

void

ReadEdge();

//取与第V个节点的第一个邻接点

int

GetFirstVertex(int

v);

//找到第V1个节点的V2之后的下一个邻接节点

int

GetNextVertex(int

v1,int

v2);

int

GetVerValue(int

index);//获取V[index]

的ver

的value值

int

GetVerCost(int

index);//获取V[index]

的ver

的cost

int

GetEdge(int

row,int

col);//获取edge[row][col]

的值

void

SetVerCost(int

index,int

cost);

};

2)队列结构

宽度优先算法以及A*算法

使用到。

抽象队列结构实现:

class

SeqQueue

{

public:

SeqQueue();

~SeqQueue();

void

QueueInitiate();

int

QueueNotEmpty();

int

QueueAppend(int

x);

int

QueueDelete(intd);

int

QueueOrderAppend(int

x,Graph

//A*算法使用

int

Queue_A_OrderAppend(int

x,Graph

private:

int

queue[MaxSize];

int

rear;

int

front;

int

count;

};

3)栈结构

深度优先算法使用;

栈结构的抽象类型实现:

class

Stack

{

public:

Stack();

~Stack();

bool

StackNotFull();

bool

StakNotEmpty();

void

StackPop(Graph

void

StackPush(int

x,Graph

void

PrintStack(Graph

int

GetWeight();

private:

int

a[100];

int

top1;

int

weight;

};

三.算法设计

1)

宽度优先搜索算法

//宽度优先算法

void

Romania_Trip::BroadFirstSearch(Graph

i

=

0;

SeqCQuene

queue;

visited[v]

=

1;//访问节点

count++;

if

(v

==

end)return;

queue.QueueAppend(

v);//入队列

while

(queue.QueueNotEmpty())//队列非空

{

queue.QueueDelete(//取队列节点

w

=

graph.GetFirstVertex(

u);

while

(w

!=

-1)

//有子节点的话

{

if

(!visited[w])//如果子节点未被访问,则访问子节点

{

Visit(w,u);

visited[w]

=

1;

count++;

if

(w

==

end)//找到结果

{

Print(graph,b,end,v);

return;

}

queue.QueueAppend(w);//节点压入队列

}

w

=

graph.GetNextVertex(u,w);

}

}

}

2)深度优先搜索算法

//深度优先算法

bool

isOK

=

false;

int

level

=

0;

const

int

Level

=

8;//预设的搜索层次

void

Romania_Trip::DepthFirstSearch(Graph

i

=

0;

if

(isOK

==

true)return;

if

(level+1

>

Level)return;//大于搜索层次时不再深入

level++;

visited[v]

=

1;//访问该节点

count++;

stack.StackPush(v,graph);

if

(v

==

end

||

stack.GetWeight()

>=

MaxWeight)

{

w

=

-1;

if

(v

==

end*/

cout

#include

“Stack.h“#define

MaxSize

30

/*#ifndef

MY_DEBUG

#define

MY_DEBUG

#endif/*/

class

SeqQueue

{

public:

SeqQueue();

~SeqQueue();

void

QueueInitiate();

int

QueueNotEmpty();

int

QueueAppend(int

x);

int

QueueDelete(intd);

int

QueueOrderAppend(int

x,Graph

//A*算法使用

int

Queue_A_OrderAppend(int

x,Graph

private:

int

queue[MaxSize];

int

rear;

int

front;

int

count;

};

typedef

SeqQueue

SeqCQuene;

//Romania_Trip.h

#pragma

once

#include

“Queue.h“typedef

struct

{

int

father;

int

me;

}way;

class

Romania_Trip

{

public:

Romania_Trip();

~Romania_Trip();

void

Visit(int

v,int

u);

void

Print(Graph

void

BroadFirstSearch(Graph

void

DepthFirstSearch(Graph

void

Greedy_Algorithms(Graph

void

AStar_Algorithms(Graph

void

ReSet();

int

GetCount();

int

GetMaxWeight();

int

GetEnd();

way*

GetB();

private:

wayb;

int

i;

int

end;

int

count;

int

visitedCity[20];

int

MaxWeight;

int

visited[20];

};

//Stack.h

#pragma

once

#include“Graph.h“#include

using

namespace

std;

/*#ifndef

MY_DEBUG

#define

MY_DEBUG

#endif*/

class

Stack

{

public:

Stack();

~Stack();

bool

StackNotFull();

bool

StakNotEmpty();

void

StackPop(Graph

void

StackPush(int

x,Graph

void

PrintStack(Graph

int

GetWeight();

private:

int

a[100];

int

top1;

int

weight;

};

//Graph.cpp

#include“Graph.h“#include

#include

#include

#include

using

namespace

std;

Graph::Graph()

{

numofedges

=

0;

}

Graph::~Graph()

{

}

void

Graph::ReadVertex()

{

int

i=0,v;

char

ch[20];

fstream

infile(“启发式数值.txt“,ios::in);

while

(infile

>>

ch

#endif

V[i].value

=

v;

V[i].cost

=

0;

strcpy(V[i].cityname,ch);

i++;

}

}

void

Graph::ReadEdge()

{

int

valu,i;

fstream

infile(“地图数据表.txt“,ios::in);

i

=

0;

while

(infile

>>

valu)

{

edge[i

/

20][i

%

20]

=

valu;

#ifdef

MY_DEBUG

if

(i

%

20

==

0)cout

=

20)

{

return

-1;

}

for

(int

col

=

0;

col0

}

for

(int

col=

v2

+

1;

col0

front

=

0;

count

=

0;

}

SeqQueue::~SeqQueue()

{

}

int

SeqQueue::QueueNotEmpty()

{

if

(count

!=

0)return

1;

else

return

0;

}

int

SeqQueue::QueueAppend(

int

x)

{

if

(count>0

rear

=

(rear

+

1)

%

MaxSize;

count++;

return

1;

}

else

{

if

(G.V[x].value

G.V[queue[position]].value)

{

position++;

}

int

i;

for

(i

=

front;

i0

rear

=

(rear

+

1)

%

MaxSize;

count++;

return

1;

}

else

{

//队头插入

if

(G.V[x].value

+

G.V[x].cost

G.V[queue[position%MaxSize]].value

+

G.V[queue[position%MaxSize]].cost)

{

position++;

}

int

i;

for

(i

=

front;

i

#include

#include

using

namespace

std;

Romania_Trip::Romania_Trip()

{

b

=

new

way[100];

i

=

0;

end

=

2;

count

=

0;

MaxWeight

=

10000;

for

(size_t

i

=

0;

i

CityName;

string

name

=

graph.V[end].cityname;

CityName.push_back(name);

while

(1){

for

(int

j

=

0;

j0;

i--)

{

cout

“;

}

cout

Level)return;//大于搜索层次时不再深入

level++;

visited[v]

=

1;//访问该节点

count++;

stack.StackPush(v,graph);

if

(v

==

end

||

stack.GetWeight()

>=

MaxWeight)

{

w

=

-1;

if

(v

==

end*/

cout

<<

“---路径长度为:“<<

stack.GetWeight()

<<

endl

<<

“---访问节点数为:“<<

count

<<

endl

<<“---搜索层次:“<

isOK

=

true;

}

}

else

{

w

=

graph.GetFirstVertex(v);//取当前节点的第一个子节点

}

while

(w

!=

-1)

{

if

(!visited[w])

DepthFirstSearch(graph,w,stack);//递归访问

w

=

graph.GetNextVertex(v,w);//取当前节点的下一个子节点

}

visited[v]

=

0;//返回时置该节点为未访问

stack.StackPop(

graph);//将该节点弹出栈,并根据graph

中weight

的值更改当前栈值

level--;

}

//贪婪算法

void

Romania_Trip::Greedy_Algorithms(Graph

SeqCQuene

queue;//队列存储图节点在图中的索引值,优先队列,value小的在队头

visited[v]

=

1;

if

(v

==

end){

return;

}

queue.QueueOrderAppend(

v,graph);//图节点按优先顺序入队列

count++;

//访问节点数+1

while

(queue.QueueNotEmpty())//宽度优先,循环

{

queue.QueueDelete(

//删除队列头元素并返回删除的数值

//cout

<<

“u=

“<<

u

<<

““;

w

=

graph.GetFirstVertex(u);

while

(w

!=

-1)

{

if

(!visited[w])

{

Visit(w,u);//访问w节点,将way

b

的指向更新

if

(w

==

end)

{

//cout

<<

“w==end“;

count++;

return;

}

queue.QueueOrderAppend(

w,graph);

//图节点按优先顺序入队列

count++;

}

w

=

graph.GetNextVertex(u,w);

}

}

}

//A*算法

void

Romania_Trip::AStar_Algorithms(Graph

&graph,int

尘埃飞雀 2022-06-26 20:47:15

相关推荐

人不如旧 衣不如新的意思

人不如旧,衣不如新的意思是:衣服是新的好,朋友是旧的好。(因此旧的东西或朋友不可轻易舍弃)形容事物的前后比较。“衣不如新,人不如故”可以用作宾语、定语,一般常用作书面语。这句话最早出自于《晏子春秋·第五卷内篇杂...
展开详情

无人与我是什么

无人与我,意思是:没有人和我一起。“无人”,是一个汉语词汇,是没有人才、没有人、没人在的意思,出自《史记·范雎蔡泽列传》:“秦王屏左右,宫中虚无人。”...
展开详情

一年之计在于春,一日之计在于晨是什么意思

这句话的意思是:只有在春天辛勤劳动才能获得丰收,一天最宝贵的时间是早晨。这句话一般用于激励人刻苦学习,充分利用学习时间,达到提升自我的目的!出处有:1、南朝·梁·萧绎《纂要》:“一年之计在于春,一日之计在于晨。...
展开详情

集中注意力的基础是

集中注意力的基础是对大脑进行科学的锻炼,促使脑神经变得发达和强壮。注意力是指人的心理活动指向和集中于某种事物的能力。“注意”,是一个古老而又永恒的话题。俄罗斯教育家乌申斯基曾精辟地指出:“注意是我们心灵的唯一门...
展开详情

古人读书的方法

读书有很多种方法,适合自己的才是最好的,让我们来看看古代名人都是怎么读书的,并从中借鉴一些好的读书方法。1、董遇:“三余”读书法汉代的著名学者董遇提倡利用“三余”时间读书。他说:“冬者岁之余,夜者日之余,雨者晴...
展开详情

精选推荐更多>

政通人和的意思是什么5个字

政通人和,汉语成语,拼音是zhèng tōng rén hé,意思是政事通达,人心和顺;形容国家稳定,人民安乐。
出自宋·范仲淹《岳阳楼记》:“越明年,政通人和,百废俱兴。”
用法:作谓语、定语;指政治局面。
示例:及擢守严陵,政通人和,始从事于梨枣。——清·鲍廷博《青本刻<聊斋志异>纪事》
近义词:下情上达、安居乐业、国泰民安。
造句:
1、而今我国政通人和,百业兴旺。
2、勤政廉政政通人和,亲民爱民民康物阜。
3、如今正值盛世,举国上下政通人和,五湖四海安居乐业。
4、既要防止权力过分集中,也要防止职责不清、政通人和,只有这样才能保证各机构互相监督,运转有序。

功名成就是什么意思啊

“功名成就”意思是功绩取得了,名声也有了。出自《墨子·修身》:“功成名遂,名誉不可虚假。”
“功名成就”造句:
1、其他权谋术数,一切以功名成就之说,惑世诬民,充塞仁义,岂不是误人子弟。
2、付出终有收获,努力会有结果,功名成就在即,此刻莫要焦虑,心中会有担忧,黎明前的节奏,高考就如行舟,随风随水无忧。前路一片光明,愿你心想事成。
3、垂头丧气,感觉自己一无是处,定会碌碌无为,遗憾终生;胸有成竹,凡事相信“我能做好”,放胆一试,则会功名成就,不枉此生。

意欲的意思是什么

意欲,汉语词汇,拼音:yì yù,释义是指人对某种事物在思想上的欲望。想要。谓心想做某事。出自《淮南子·道应训》:“故人主之意欲见於外,则为人臣之所制。”
造句:
1、把希望建筑在意欲和心愿的人们,二十次中有十九次都会失望。
2、在你的脑海里,你能清晰地看到你最想得到的汽车和房屋,你最向往的游览胜地,你最渴望的朋友,还有你最意欲达到的地位和身份。
3、当我到达高处,便发觉自己总是孤独。无人同我说话,孤寂的严冬令我发抖。我在高处究竟意欲何为?

见出以知入,观往以知来什么意思

“见出以知入,观往以知来”的意思:看见外表就可以知道内里,看见过去就可以知道未来。出自《列子·说符》。
《列子·说符》出自《列子》,《列子》一书相传是战国时列御寇所著。《汉书艺文志》著录《列子》早已散佚。全书共8篇,134则,内容多为民间传说、寓言和神话故事。
《列子》全书,始以《天瑞》,终以《说符》,首尾呼应,自成一体。古时以所谓天降“符瑞”,附会与人事相应,叫做“符应”。“符”,有符信、符验的含义。“说符”,即谓“道”与人事的相互应验。全文通过三十余则寓言和说理,对“道”与“智”、“名”与“实”、“形”与“神”、“贵”与“贱”、“时机”与“变通”、“久利”与“暂得”、“持身”与“治国”等多对关系进行了各个角度的论述。
世事无常,祸福相倚,因此列子认为,为人处世应当做到“持后而处先”,对于事物的存亡变幻,也应当透过其表面来“寡其所以然”。一方面要“恃道化而不恃智巧”,全身远害,避免重演郄雍的悲剧;一方面也要拥有“授隙抵时,应事无方”的智慧,领会“先迕后合”的圣人之言,进而懂得各种看似无关的现象背后实际上存在着积来已久的缘由。然而世人多纵欲迷性,重利轻道,贪图一时所莸,不念长久之积,所以才会闹出“宋人拾契”、“齐人攫金”那样的笑话。唯有舍末明本,“归同反一”,因名求实,得其髓而弃其粗,才能一睹天道与人事之间的绝妙天机。
常见热点问答
热点搜索
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200
作文大全
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200