人工智能实验报告-知识表示方法
人工智能-知识表示方法

实验一:知识表示方法一、实验目的状态空间表示法是人工智能领域最基本的知识表示方法之一,也是进一步学习状态空间搜索策略的基础,本实验通过牧师与野人渡河的问题,强化学生对知识表示的了解和应用,为人工智能后续环节的课程奠定基础。
二、问题描述有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: 2Successed or Failed?: SuccessedOptimal Procedure: 221->110->211->010->021->000四、实验结果四、实验心得本次实验运用了状态空间表示法,这是人工智能领域最基本的知识表示方法之一,也是进一步学习状态空间搜索策略的基础,本实验强化我对知识表示的了解和应用,为人工智能后续环节的课程奠定基础。
人工智能中知识的表示法

人工智能中知识的表示法
在人工智能领域,知识的表示是将信息组织成可供计算机理解和处理的形式的过程。
不同的问题和应用需要不同的知识表示方法。
以下是一些常见的知识表示方法:
谓词逻辑:使用谓词和逻辑运算符表示事实和关系。
一阶逻辑和高阶逻辑是常见的形式。
图表示法:使用图结构表示对象和它们之间的关系。
图可以是有向图或无向图,节点表示实体,边表示关系。
框架表示法: 将知识组织成框架或者类似于面向对象编程中的类的结构。
每个框架包含关于实体或概念的属性和关系。
语义网络:与图表示法相似,语义网络使用节点表示概念,边表示关系,但通常具有更丰富的语义。
产生式系统:使用规则的集合,每个规则描述了在特定条件下执行的操作。
用于表示推理和问题解决的过程。
向量表示法: 将实体和概念表示为向量,例如词嵌入(Word Embeddings)用于表示单词,将语义相近的单词映射到相似的向量空间位置。
本体论:使用本体来描述概念、实体和它们之间的关系。
本体是一种形式化的知识表示,用于共享和集成信息。
模型表示法:使用数学模型表示知识,例如概率图模型、
贝叶斯网络等。
这些模型可以用于推理、学习和决策。
神经网络表示法:利用神经网络来学习和表示知识,例如深度学习中的各种神经网络结构。
人工智能第二章知识表示方法

框架的构建与实现
80%
确定框架的结构
根据实际需求和领域知识,确定 框架的槽和属性,以及它们之间 的关系。
100%
填充框架的实例
根据实际数据和信息,为框架的 各个槽和属性填充具体的实例值 。
80%
实现框架的推理
通过逻辑推理和规则匹配,实现 基于框架的知识推理和应用。
框架表示法的应用场景
自然语言处理
模块化
面向对象的知识表示方法可以将 知识划分为独立的模块,方便管 理和维护。
面向对象表示法的优缺点
• 可扩展性:面向对象的知识表示方法可以通过继承和多态实现知识的扩展和复用。
面向对象表示法的优缺点
复杂性
面向对象的知识表示方法需要建立复 杂的类和对象关系,可能导致知识表 示的复杂性增加。
冗余性
面向对象的知识表示方法可能导致知 识表示的冗余,尤其是在处理不相关 或弱相关的事实时。
人工智能第二章知识表示方法
目
CONTENCT
录
• 知识表示方法概述 • 逻辑表示法 • 语义网络表示法 • 框架表示法 • 面向对象的知识表示法
01
知识表示方法概述
知识表示的定义
知识表示是人工智能领域中用于描述和表示知识的符号系统。它 是一种将知识编码成计算机可理解的形式,以便进行推理、学习 、解释和利用的过程。
知识表示方法通常包括概念、关系、规则、框架等元素,用于描 述现实世界中的实体、事件和状态。
知识表示的重要性
知识表示是人工智能的核心问题之一,它决定了知 识的可理解性、可利用性和可扩展性。
良好的知识表示方法能够提高知识的精度、可靠性 和一致性,有助于提高人工智能系统的智能水平和 应用效果。
知识表示方法的发展对于推动人工智能技术的进步 和应用领域的拓展具有重要意义。
人工智能_知识表示

_知识表示_知识表示引言:(Artificial Intelligence,简称)是一门研究如何使计算机能够像人一样进行思考和决策的学科。
知识表示是的一个重要研究领域,主要涉及如何以一种能够被计算机理解和处理的形式表示和组织知识,以支持计算机程序进行推理、学习和解决问题。
本文档旨在介绍中的知识表示领域的基本概念、方法和应用。
主要内容包括:语义网络、谓词逻辑、产生式规则、本体论、语义解释器等方面的内容。
一、语义网络语义网络是一种以图形化形式表示知识的方法。
它通过节点和边来表示概念和关系,节点表示概念,边表示概念之间的关系。
语义网络常用于知识图谱的构建,它能够有效地表示和表达知识之间的关联性。
1.1 节点和边的定义在语义网络中,节点用来表示概念,边用来表示概念之间的关系。
节点和边可以通过标签表示其含义,例如,一个表示“猫”的节点可以用标签“猫”表示,一个表示“属于”的边可以用标签“属于”表示。
1.2 常见的语义网络表示法在语义网络中,有多种常见的表示法,包括二元关系表示法、三元关系表示法和本体图表示法。
其中,二元关系表示法通过一对节点和一个边来表示关系,三元关系表示法通过三个节点和两个边来表示关系,本体图表示法通过节点、边和属性来表示关系。
二、谓词逻辑谓词逻辑是一种用符号逻辑表示知识的方法。
它通过定义一组谓词和一组公式来表示概念和关系,谓词表示概念,公式表示概念之间的关系。
谓词逻辑常用于知识推理和自动推理的领域,它能够通过逻辑推理来解决问题。
2.1 谓词和公式的定义在谓词逻辑中,谓词用来表示概念,公式用来表示概念之间的关系。
谓词可以具有多个参数,用来表示概念的属性。
公式由谓词和参数组成,用来表示概念之间的关系。
2.2 常见的谓词逻辑表示法在谓词逻辑中,有多种常见的表示法,包括命题逻辑、一阶逻辑和高阶逻辑。
其中,命题逻辑用来表示简单的真值关系,一阶逻辑用来表示概念和关系的复杂性,高阶逻辑用来表示关系的进一步抽象性。
人工智能实验知识表示法

实验二知识表示方法1.实验目的(1)了解知识表示相关技术;(2)掌握问题规约法或者状态空间法的分析方法。
2.实验内容(2个实验内容可以选择1个实现)(1)梵塔问题实验。
熟悉和掌握问题规约法的原理、实质和规约过程;理解规约图的表示方法;(2)状态空间法实验。
从前有一条河,河的左岸有m个传教士、m个野人和一艘最多可乘n人的小船。
约定左岸,右岸和船上或者没有传教士,或者野人数量少于传教士,否则野人会把传教士吃掉。
搜索一条可使所有的野人和传教士安全渡到右岸的方案。
3.实验报告要求(1)简述实验原理及方法,并请给出程序设计流程图。
本次试验选择传教士过河问题,以状态空间法实现。
解答步骤如下:(1)设置状态变量并确定值域M为传教士人数,C 为野人人数,B为船数,要求M>=C且M+C <= 3,L表示左岸,R表示右岸。
初始状态目标状态L R L RM 3 0 M 0 3C 3 0 C 0 3B 1 0 B 0 1(2)确定状态组,分别列出初始状态集和目标状态集S:(ML , CL , BL)(均为左岸状态)用三元组来表示f其中03,03ML CL ≤≤≤≤,BL ∈{ 0 , 1}0S :(3 , 3 , 1) g : (0 , 0 , 0)初始状态表示全部成员在河的的左岸;目标状态表示全部成员从河的左岸全部渡河完毕。
(3) 定义并确定规则集合仍然以河的左岸为基点来考虑,把船从左岸划向右岸定义为Pij 操作。
其中,第一下标i 表示船载的传教士数,第二下标j 表示船载的食人者数;同理,从右岸将船划回左岸称之为Qij 操作,下标的定义同前。
则共有10种操作,操作集为F={P01,P10,P11,P02,P20,Q01,Q10,Q11,Q02,Q20}P 10 if ( ML ,CL , BL=1 ) then ( ML –1 , CL , BL –1 )P 01 if ( ML ,CL , BL=1 ) then ( ML , CL –1 , BL –1 )P 11 if ( ML ,CL , BL=1 ) then ( ML –1 , CL –1 , BL –1 )P 20 if ( ML ,CL , BL=1 ) then ( ML –2 , CL , BL –1 )P 02 if ( ML ,CL , BL=1 ) then ( ML , CL –2 , BL –1 )Q 10 if ( ML ,CL , BL=0 ) then ( ML+1 , CL , BL+1 )Q 01 if ( ML ,CL , BL=0 ) then ( ML , CL+1 , BL +1 )Q 11 if ( ML ,CL , BL=0 ) then ( ML+1 , CL +1, BL +1 )Q 20 if ( ML ,CL , BL=0 ) then ( ML+2 , CL +2, BL +1 )Q 02 if ( ML ,CL , BL=0 ) then ( ML , CL +2, BL +1 )(4) 当状态数量不是很大时,画出合理的状态空间图图1 状态空间图箭头旁边所标的数字表示了P或Q操作的下标,即分别表示船载的传教士数和食人者数。
人工智能_第2章 知识表示方法

14
标准槽名
6) Infer槽:指出两个框架所描述的事物间的逻辑推理关系, 用它可以表示相应的产生式规则。 【例】设有下面知识:如果咳嗽,发烧且流涕,则八成是患 了感冒,需服用感冒清,一日三次,每次2-3粒。并要多喝开 水。对该知识 ,可用如下两个框架表示: 框架名:<诊断规则> 框架名:<结论> 病名:感冒 症状1:咳嗽 治疗方法:服用感冒清,一日三 症状2:发烧 次,每次2-3粒 症状3:流涕 注意事项 :多喝开水 Infer: <结论> 愈后:良好 可信度:0.8 7) Possible-Reason槽:与Infer槽作用相反,用来把某个结论 与可能的原因联系起来。 15
12
标准槽名
2) AKO槽:用于具体的指出事物间的类属关系。其直观含义 是“是一种”,下层框架可以继承其上层框架所描述的属性及值。 对上面的例子,可将棋手框架中的ISA改为AKO。 3)Subclass槽:用于指出子类与类之间的类属关系。 上例中,由于“棋手”是“运动员的一个子类,故可将ISA该为 Subclass。 4) Instance槽:用来建立AKO槽的逆关系。 用它作为某框架的槽时,可用来指出它的下层框架是哪些。 【例】框架名:<运动员> Instance:<棋手>,<足球运动员>,<排球运动员> 姓名:单位(姓,名) 年龄:单位(岁) 性别:范围(男,女) 缺省:男
18
剧本表示-例
【例】餐厅剧本 (1) 开场条件: (a)顾客饿了,需要进餐。(b)顾客有足够的钱。 (2) 角色:顾客,服务员,厨师,老板。 (3) 道具:食品,桌子,菜单,钱。 (4) 场景: 场景1 进入餐厅 (a) 顾客走入餐厅。(b) 寻找桌子。 (c) 在桌子旁坐下。 场景2 点菜 (a) 服务员给顾客菜单。(b) 顾客点菜。 (c) 顾客把菜单还给服务员。(d) 顾客等待服务员送菜。 场景3 等待 (a) 服务员把顾客所点的菜告诉厨师。(b) 厨师做菜。
人工智能 知识表示方法

知识表示方法一、引言()是一门研究如何使计算机能够像人类一样思考和学习的领域。
在中,知识表示方法是一项关键技术,它用于存储、组织和操作各种类型的知识。
本文将介绍几种常用的知识表示方法及其优缺点。
二、逻辑推理逻辑推理是一种基于逻辑规则的知识表示方法。
它将知识表示为逻辑语句,通过推理规则进行推导和推理。
逻辑推理具有形式化、准确和可靠的特点,但对于处理不确定性和复杂度较高的问题有一定局限性。
1、命题逻辑命题逻辑是一种简单的知识表示方法,它基于真值逻辑和布尔代数。
命题逻辑包括命题符号、逻辑连接词和推理规则,可以表示复杂的命题和逻辑关系。
2、一阶谓词逻辑一阶谓词逻辑扩展了命题逻辑,引入了对象、属性和关系等概念。
它可以表示更加复杂的逻辑关系,包括量词、函数和谓词。
3、非经典逻辑非经典逻辑是对传统逻辑的扩展和改进,用于处理不确定性和模糊性问题。
常见的非经典逻辑包括模糊逻辑、默认逻辑和多值逻辑等。
三、网络表示网络表示是一种基于图的知识表示方法,将知识表示为节点和边的网络结构。
网络表示方法可以表示实体和关系之间的拓扑结构,用于构建知识图谱和语义网络等。
1、语义网络语义网络是一种最早的网络表示方法,它将实体表示为节点,将关系表示为边。
语义网络可以用于表示概念关系、语义关系和实体属性。
2、本体论本体论是一种基于本体的知识表示方法,它建立了实体之间的层次和关系。
本体论可以用于构建丰富的知识模型,支持语义推理和知识发现。
3、图神经网络图神经网络是一种基于深度学习的知识表示方法,它将图结构作为输入,并通过神经网络进行表示学习。
图神经网络可以学习节点和边的嵌入表示,用于图分类、节点分类和预测等任务。
四、框架表示框架表示是一种基于框架的知识表示方法,它将知识表示为事实、槽位和约束的框架结构。
框架表示可以用于表示领域知识、推理规则和行为策略等。
1、语义网格语义网格是一种基于框架的知识表示方法,它将知识表示为描述事实和槽位的网格结构。
人工智能2第二章知识表示方法

2.状态空间表示详释
我们先用数码难题(puzzle problem)来 说明状态空间表示的概念。由15个编有1至 15并放在4×4方格棋盘上的可走动的棋子 组成。
11 9 4 15
13
12
7586
13 2 10 14
初试棋局
1 2 34 5 6 78 9 10 11 12 13 14 15
目标棋局
是有关知识的知识,是知识库中的高层知识。 包括怎样使用规则、解释规则、校验规则、解释 程序结构等知识。元知识与控制知识是有重迭的, 对一个大的程序来说,以元知识或说元规则形式 体现控制知识更为方便,因为元知识存于知识库 中,而控制知识常与程序结合在一起出现,从而 不容易修改。
知识表示是研究用机器表示知识的可行
题
求解过程实际上是一个搜索过程。
那么如果进行搜索呢?为了进行搜索,就必须
用某种形式把问题表示出来,其表示是否适当,将
直接影响到搜索效率。
状态空间法就是用来表示问题及其搜索过程的 一种方法。它是人工智能中最基本的形式化方法, 用“状态”和“算符”来表示问题。
状态空间法三要素
(1) 状态(state):表示问题解法中每一步问题状 况的数据结构;
·显式表示:各节点及其具有代价的弧线由 一张 表明确给出。此表可能列出该图中的每 一节点、它的后继节点以及连接弧线的代价。
Q [q0,q1,...qn ]T
式中每个元素qi(i=0,1,…,n)为集合的量,称 为状态变量。
·算符:使问题从一种状态变化为另一种状态的手 段称为操作符或算符。操作符可为走步、过程、规 则、数学算子、运算符号或逻辑符号等。
· 问题的状态空间(state space):是一个表示该问题 全部可能状态及其关系的图,它包含三种说明的 集合,即所有可能的问题初始状态集合S、操作符 集合F以及目标状态集合G。可把状态空间记为三 元状态(S,F,G)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
江苏科技大学实验报告(2012/2013学年第2学期)课程名称:人工智能学生姓名:学生学号:院系:数理学院专业:信息与计算科学2013年5月18日实验一:知识表示方法一、实验目的状态空间表示法是人工智能领域最基本的知识表示方法之一,也是进一步学习状态空间搜索策略的基础,本实验通过牧师与野人渡河的问题,强化学生对知识表示的了解和应用,为人工智能后续环节的课程奠定基础。
二、问题描述有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: 2Successed or Failed?: SuccessedOptimal Procedure: 221->110->211->010->021->000四、实验组织运行要求本实验采用集中授课形式,每个同学独立完成上述实验要求。
五、实验条件每人一台计算机独立完成实验。
六、实验代码Main.cpp#include<iostream>#include"RiverCrossing.h"usingnamespace std;//主函数void main(){RiverCrossing::ShowInfo();int n, c;cout<<"Please input n: ";cin>>n;cout<<"Please input c: ";cin>>c;RiverCrossing riverCrossing(n, c);riverCrossing.solve();system("pause");}RiverCrossing.h #pragmaonce#include<list>//船class Boat{public:staticint c;int pastor;//牧师int savage;//野人Boat(int pastor, int savage);};//河岸状态class State{public:staticint n;int iPastor;//牧师数量int iSavage;//野人数量int iBoatAtSide;//船所在河岸State *pPrevious;//前一个状态State(int pastor, int savage, int boatAtSide);int getTotalCount();//获得此岸总人数bool check();//检查人数是否符合实际bool isSafe();//检查是否安全State operator + (Boat&boat);State operator - (Boat&boat);bool operator == (State&state);};//过河问题class RiverCrossing{private:std::list<State*> openList, closeList;State endState;bool move(State *nowState, Boat *boat);//进行一次决策State* findInList(std::list<State*>&listToCheck, State&state);//检查某状态节点是否在列表中void print(State *endState);//打印结果public:staticvoid ShowInfo();RiverCrossing(int n, int c);bool solve();//求解问题};RiverCrossing.cpp#include"RiverCrossing.h"#include<iostream>#include<stack>#include<algorithm>usingnamespace std;//类静态变量定义int State::n = 0;int Boat::c = 0;/*=========================Methods for class "Boat"=========================*/Boat::Boat(int pastor, int savage){this->pastor = pastor;this->savage = savage;}/*=========================Methods for class "State"=========================*/ //构造函数State::State(int pastor, int savage, int boatAtSide){this->iPastor = pastor;this->iSavage = savage;this->iBoatAtSide = boatAtSide;this->pPrevious = NULL;}//获取此岸总人数int State::getTotalCount(){return iPastor + iSavage;}//检查人数是否在0到n之间bool State::check(){return (iPastor >=0 && iPastor <= n && iSavage >= 0 && iSavage <=n);}//按照规则检查牧师得否安全bool State::isSafe(){//此岸的安全:x1 == 0 || x1 >= x2//彼岸的安全:(n-x1) == 0 || (n-x1) >= (n-x2)//将上述条件联立后得到如下条件return (iPastor == 0 || iPastor == n || iPastor == iSavage);}//重载+符号,表示船开到此岸StateState::operator+(Boat&boat){State ret(iPastor + boat.pastor, iSavage + boat.savage, iBoatAtSide + 1);ret.pPrevious = this;return ret;}//重载-符号,表示船从此岸开走StateState::operator-(Boat&boat){State ret(iPastor - boat.pastor, iSavage - boat.savage, iBoatAtSide - 1);ret.pPrevious = this;return ret;}//重载==符号,比较两个节点是否是相同的状态bool State::operator==(State&state){return (this->iPastor == state.iPastor &&this->iSavage == state.iSavage&&this->iBoatAtSide == state.iBoatAtSide);}/*=======================Methods for class "RiverCrossing"=======================*/ //显示信息void RiverCrossing::ShowInfo(){cout<<"************************************************"<<endl;cout<<"牧师与野人过河问题求解"<<endl;cout<<" by 1040501211 陈嘉生"<<endl;cout<<"************************************************"<<endl;}//构造函数RiverCrossing::RiverCrossing(int n, int c):endState(0, 0, 0){State::n = n;Boat::c = c;}//解决问题bool RiverCrossing::solve(){openList.push_back(new State(State::n, State::n, 1));while(!openList.empty()) {//获取一个状态为当前状态State *nowState = openList.front();openList.pop_front();closeList.push_back(nowState);//从当前状态开始决策if (nowState->iBoatAtSide == 1) {//船在此岸//过河的人越多越好,且野人优先int count = nowState->getTotalCount();count = (Boat::c >= count ? count : Boat::c);for (int capticy = count; capticy >= 1; --capticy) {for (int i = 0; i <= capticy; ++i) {Boat boat(i, capticy - i);if (move(nowState, &boat))returntrue;}}} elseif (nowState->iBoatAtSide == 0) {//船在彼岸//把船开回来的人要最少,且牧师优先for (int capticy = 1; capticy <= Boat::c; ++capticy) { for (int i = 0; i <= capticy; ++i) {Boat boat(capticy - i, i);if (move(nowState, &boat))returntrue;}}}}print(NULL);returnfalse;}//实施一步决策,将得到的新状态添加到列表,返回是否达到目标状态bool RiverCrossing::move(State *nowState, Boat *boat){//获得下一个状态State *destState;if (nowState->iBoatAtSide == 1) {destState = new State(*nowState - *boat);//船离开此岸} elseif (nowState->iBoatAtSide == 0) {destState = new State(*nowState + *boat);//船开到此岸}if (destState->check()) {//检查人数if (*destState == endState) {//是否达到目标状态closeList.push_back(destState);print(destState);returntrue;//找到结果} elseif (destState->isSafe()) {//检查是否安全if (!findInList(openList, *destState) && !findInList(closeList,*destState)) {//检查是否在表中//添加没出现过的状态节点到open表openList.push_back(destState);returnfalse;}}}delete destState;returnfalse;}//检查给定状态是否存在于列表中State* RiverCrossing::findInList(list<State*>&listToCheck, State&state){for (list<State*>::iterator ite = listToCheck.begin(); ite != listToCheck.end(); ++ite) {if (**ite == state)return *ite;}return NULL;}//根据达到的目标状态,回溯打印出求解过程void RiverCrossing::print(State *endState){cout<<"================================================"<<endl;if (!endState) {cout<<"Search failed!"<<endl;} else {cout<<"Search successed!"<<endl;cout<<"Optimal Procedure: "<<endl;State *pState = endState;stack<State*> st;//用栈将链表逆序,以便输出while (pState) {st.push(pState);pState = pState->pPrevious;}int count = 0;while (!st.empty()) {pState = st.top();st.pop();cout<<pState->iPastor<<","<<pState->iSavage<<","<<pState->iBoatAtSide;if (st.size() > 0)cout<<" ->";if (++count % 5 == 0)//每五个步骤换行cout<<endl;}cout<<endl;cout<<"Total move: "<<count - 1<<endl;}cout<<"================================================"<<endl;}七、实验结果实验二:九宫重排一、实验目的A*算法是人工智能领域最重要的启发式搜索算法之一,本实验通过九宫重排问题,强化学生对A*算法的理解与应用,为人工智能后续环节的课程奠定基础。