人工智能实验
产生式系统(Production system)首先由波斯特(Post)于1943年提出的产生式规则(Production rule)而得名,他们用这种规则对符号串进行置换运算,后来,美国的纽厄尔和西蒙利用这个原理建立了一个人类的认知模型(1965年),同年,斯坦福大学利用产生式系统结构设计出第一个专家系统DENDRAL。
产生式系统用来描述若干个不同的以一个基本概念为基础的系统。这个基本概念就是产生式规则或产生式条件和操作对象的概念。
问题描述:用基于产生式系统的方法求解传教士和野人问题
有N个传教士和N个野人来到河边准备渡河,河岸有一条船,每次至多可供K个乘渡,问传教士为了安全起见,应如何规划摆渡方案,使得任何时刻,河岸两边以及船上的野人数目总是不超过传教土的数目,即求解传教士和野人从左岸全部摆渡到右岸的过程中,任何时刻满足M(传教士数)≥C(野人数)和M+C≤K的摆渡方案。
(1) 问题状态的表示
struct status
{
intshipSite=0; //0 stand left, 1 standright ,aim is right
int missionary[2];
intsavage[2];
int step;
};
shipSite代表河岸,0代表左岸,1代表目的地右岸。
两个数组missionary和savage分别代表左岸和右岸的传教士或野人人数。
step代表到此状态的步数。
(2) 数据库描述
vector<status>close;
用一个向量close代表已搜索过的状态,配合这结构体中的step成员,避免在搜索过程中走回头路或这多余搜索。当搜索到的一个新状态存在于close中,则判断当前状态的步数是否小于close中相同状态的步数,若小于,说明该搜索有意义,若