机器人与人工智能爱好者论坛

 找回密码
 立即注册
查看: 12103|回复: 0
打印 上一主题 下一主题

Visual Prolog运行环境实验

[复制链接]

173

主题

181

帖子

1053

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1053
跳转到指定楼层
楼主
发表于 2016-3-10 09:00:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 清新de花 于 2016-3-10 09:05 编辑

实验一 Visual Prolog运行环境实验1学时)
一、实验目的
1、了解PROLOG解释器;
2、掌握PROLOG语言中常量、变量的表示方法;
3、掌握利用PROLOG进行事实库、规则库的编写方法。
二、实验要求
1、熟悉Visual Prolog运行环境,包括硬件与软件环境;
2、学习示例程序,分析其功能;
3、写出Example 1、Example2、Example 3示例程序的功能;
4、利用PROLOG进行事实库、规则库的编写,并在此基础上进行简单的询问。
三、实验设备
计算机,Visualprolog教学软件。
四、实验内容及步骤
(一)实验内容:
1、熟悉Visual prolog的运行环境,包括所用的机器的硬件与软件环境;
2、学习使用Visual prolog,包括进入Prolog主程序、编辑源程序、修改环境目录、退出等基本操作;
3、学习Visual prolog的简单程序结构,掌握分析问题、询问解释技巧;
4、了解PROLOG语言中常量、变量的表示方法;
5、利用PROLOG进行事实库、规则库的编写,并在此基础上进行简单的询问。
(二)实验步骤:
1、启动Windows 2000操作环境;
2、安装Visual Prolog集成开发环境;
3、双击桌面图标或者找到Visual Prolog可执行文件所在目录双击图标,启动Visual prolog集成开发环境;
4、打开Project菜单,选择NewProject菜单项,将工作目录修改为你要保存到的文件夹,例如,c:\11,给出工程文件名;
5、打开Option菜单,选择Project菜单项打开下拉菜单,选择Compiler Options项,按下图中显示进行设置;
6、从工程界面中选择“new”按钮或者从file菜单中选择“new”菜单项,弹出一个界面,将所有的复选框都去掉,进入Visual Prolog的程序编辑界面;
7、将下面的Example 1编辑到编辑界面里面,Project菜单里面的Test goal菜单项或者直接点击菜单栏中的Test Goal按钮执行程序。查看执行结果显示窗口中结果是否与理论分析的结果一致;
8、仿前例,运行Example 2、Example 3,分析程序功能;
9、保存每个.Pro文件,保存工程。退出Visual Prolog系统,返回到Windows2000环境。
五、源程序
Example 1:
domains
     person,activity = symbol
predicates
    likes(person,activity)
clauses
    likes(ellen,tennis).
    likes(john,football).
    likes(tom,baseball).
    likes(eric,swimming).
    likes(mark,tennis).
    likes(bill,X):-likes(tom,X).
  goal
     likes(bill,What).
Example 2:
  domains
      element=c(char);i(integer);r(real);s(symbol)
      mixlist=element*  
predicates
      length(mixlist, integer)
clauses
      length([],0).
      length([_|T],L):-length(T,L1),L=L+1.
   goal
      length([10,9,8,7,6,5,4,3,2,1],X).
Example 3:
predicates
     fac(integer,real)
clauses
     fac(1,1):-!.  
fac(X,FactX):- Y=X-1, fac(Y,FactY), FactX=X *FactY.
goal
    fac(3,X).


实验二 知识表示、推理、搜索实验(10学时)正确完成给15分
一、实验目的
1、掌握利用PROLOG进行推理、问题求解的方法。
2、掌握PROLOG编程技巧。
二、实验要求
对同学进行分组,每组完成一题:
1.        野人与传教士过河问题:有传教士和野人各三人需要过河,他们都会划船。现只有一条船,一次只能载两人。假设野人多于传教士时传教士就会被吃掉。试编程求出所有能确保全部安全的过河的计划,并给出VisualProlog程序。
2.        农夫和小米问题:农夫、狐狸、鸡和米都在一条河的左岸,现在要把它们全部送到右岸去,农夫有一条船,过河时,除农夫外,船上至多能载狐狸、鸡和米中的一样。狐狸要吃鸡,鸡要吃米,除非农夫在那里。试编程求出所有能确保全部安全的过河的计划,并给出Visual Prolog程序。
3.        八皇后问题模拟:在8′8格的国际象棋盘上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。试编程求出所有能满足要求的摆法,并给出Visual Prolog程序。
4.        谁是盗窃犯问题:某人被盗,公安局派出所派出5个侦察员去调查。研究案情时:
     侦察员A说:“赵与钱中至少有一人作案”;
     侦察员B说:“钱与孙中至少有一人作案”;
     侦察员C说:“孙与李中至少有一人作案”;
侦察员D说:“赵与孙中至少有一人与此案无关”;
侦察员E说:“钱与李中至少有一人与此案无关”。
如果这5个侦察员的话都是可信的,试编程求出谁是盗窃犯,并给出Visual Prolog程序。
5.  理发师问题:一个理发店接待室有n张椅子,工作室有1张椅子;没有顾客时,理发师睡觉; 第一个顾客来到时,必须将理发师唤醒;顾客来时如果还有空座的话,他就坐在一个座位上等待; 如果顾客来时没有空座位了,他就离开,不理发了;当理发师处理完所有顾客,而又没有新顾客来时,他又开始睡觉。试编程求出谁是盗窃犯,并给出Visual Prolog程序。
三、实验设备
计算机,Visualprolog教学软件。
四、实验内容及步骤
(一)实验内容:

后面请同学们根据不同的实验内容补齐!



实验三 基于Jess的专家系统设计实验(10学时)正确完成给25分
一、实验目的
1、掌握利用Jess进行知识表示和推理的方法。
2、掌握Jess编程技巧。
二、实验要求(任选一题)
1. 假设一个交易系统:客户提出要买的东西,卖家提供要卖的东西,如果有符合的,就成交。 试编使用Jess实现该专家系统,并给出Jess程序。
2.  试用Jess编程实现一个具有学习功能的动物识别专家系统。
三、实验设备
计算机,Jess教学软件。
四、实验内容及步骤
(一)题目1的实验内容:
下面内容请同学自己补充!
提示:
1 第一条规则
如果来了新的客户,取得这个客户所有需要的商品,并产生新的事实。
(defrule query-buyer
  ?fact <- (new-buyer ?buyer)            ; if there is a new a buyer...
=>
  (retract ?fact)
  (foreach ?i (nth$ 2 (send ?buyer "GetProducts"))
    (assert (requires ?buyer ?i))        ; get the products the buyer requires
                                         ; andfor each one create a fact
                                         ;associating the buyer and the product
   )
)
例如,来了一个客户Danny,我们先assert(new-buyerdanny) ,jess发现了这条事实后,触发query-buyer这个规则,注意所有的规则之间没有顺序性。query-buyer这条规则先撤销刚才的事实,避免死循环,然后调用一个函数取得用户所有需要的商品Send ?buyer "GetProducts".例如得到的结果是(Computer Keyboard Mouse),然后规则遍历这个结果集,每一个商品都产生一个新的事实,例如assert requires Danny Computer等等。
2 第二个规则,出现一个新卖家,原理和刚才一样
(defrule query-seller
  ?fact <- (new-seller ?seller)          ; if there is a new seller...
=>
  (retract ?fact)
  (foreach ?i (nth$ 2 (send ?seller"GetProducts"))
    (assert (provides ?seller ?i))       ; get the products the seller provides
                                         ; andfor each one create a fact
                                         ;associating the seller and the product
   )
)
3 最后一个是交易的规则
当有买家购买一个商品,卖家卖一个商品,并且两者相同的事实时候,告诉卖家有人要买该物品,同时也告诉买家有卖家投递该物品
(defrulematch-buyer-and-seller
  (requires ?buyer ?product1)            ; the buyer requires product1
  (provides ?seller ?product2)           ; the seller provides product2
  (test (eq ?product1 ?product2))        ; product1 and product2 are the same
=>
  (send ?seller "Order"?product2)       ; order from the seller
  (send ?buyer "Delivery"?product1)     ; deliver to the buyer
)
(二)题目2的实验内容
1. 判定树
  
1 动物识别判定树左分支

本系统的多叉判定树的左、右分支分别如图12所示。判定树的叶结点代表能从树派生出来的所有可能的解决方案。这些结点称为答案结点,树上所有其他结点则被称为判定结点。每个判定结点代表一个问题或判定。当回答问题或作判定时,它决定选取一个合适的判定分支继续下去。在简单的判定树中,问题可以是“yes”或“no”的问题。例如:“该动物有奶或有毛发吗?”如果回答是“yes”,则结点的左分支代表继续路径;如果回答是“no”, 则结点的右分支代表继续路径。
2 动物识别判定树右分支

该判定树具有23个结点,如下表列出:
  
name
  
Type
作用
root
Decision
判断是否哺乳动物
node1
Decision
判断是否肉食动物
node2
Decision
判断是否鸟类
node3
Decision
判断是否蹄类动物
node4
Decision
判断是否鸵鸟
node5
Decision
判断是否金钱豹
node6
Decision
判断是否企鹅
node7
Decision
判断是否虎
node8
Decision
判断是否信天翁
node9
Decision
判断是否长颈鹿
node10
Answer
答案是鸵鸟
node11
Decision
判断是否斑马
node12
Answer
答案是企鹅
node13
Answer
答案是金钱豹
node14
Answer
答案是信天翁
node15
Answer
答案是虎
node16
Answer
答案是未定义的鸟类
node17
Answer
答案是长颈鹿
node18
Answer
未定义的动物
node19
Answer
答案是斑马
node21
Answer
答案是未定义的哺乳动物
node23
Answer
答案是未定义的肉食动物
node25
Answer
答案是未定义的蹄类动物

有时,一棵判定树通过学习在其中添加新的知识是非常有用的,动物识别判定树就是这样。一旦判定树已得到答案,它就问答案是否正确。如果正确,则不须再做什么了。然而,如果答案不正确,那么,判定树将被修改以得出正确的答案。包含一个问题的判定结点将代替答案结点,所包含的问题不同于原来这个结点上的旧答案和没有被猜中的答案。
2.遍历判定树
遍历树得到答案结点的过程是十分简单的。推理过程以设置判定树的当前结点为根节点开始。若当前位置为一判定结点,则必须以某种方式回答与该判定结点相联系的问题(一般由人来询问判定树)。如果答案为“是”,则当前位置将被设置为同当前位置的“是”分支(或左分支)相联系的子结点。如果答案是“否”,则当前位置将被设置为同当前位置的“否”(或右)分支相联系的子结点。如果在任意点,答案结点成为当前结点,则此答案结点的值就是询问该判定树所得的答案。否则,处理判定结点的过程将重复进行,直至到达一个答案结点。
一旦判定树已得到结点,它就问答案是否正确。如果正确,则不须再做什么。然而,如果答案不正确,那么,判定树将被修改以得出正确的答案。包含一个问题的判定结点将代替答案结点,所包含的问题不同于原来这个结点上的旧答案和没有被猜中的答案。这样下去,判定树可学到越来越多的信息。用这种方式学习的一个缺点是,在猜测适当的动物中,判定树最后不会很有层次或很有效率。一棵有效的判定树从根结点到答案结点的所有路径应具有基本相同的分枝数。
    遍历判定树的工作过程如图3所示:
3 遍历判定树的工作流程图
    关于这个具有学习能力的算法的伪代码如下:
       procedure Solve_Tree_and_Learn
            Set the current location in the tree tothe root node
           while the current location is a decision node do
         Ask the question at the current node.
         if the reply to the question is yes
           Set the current node to the yes branch.
         else
           Set the current node to the no branch.
         end if
       end do
       Ask if the answer at the current node is correct.
       if the answer is correct
         Return the correct answer.
       else
          Determine the correct answer.
         Determine a question which when answered yes
will distinguish the answer at the correctnode
           from the correct answer.
         Replace the answer node with a decision node
           that has as its no branch the current
           answer node and as its yes branch an
           answer node with the correct answer.
           The decision node’s question should be
           the question which distinguishes the
           two answer nodes.
       end if
   end procedure
完成这个算法需要的11条规则,将在系统实现部分详细给出。
  
名称
  
  
作用
  
  
Initialize
  
  
对判定树程序进行初始化
  
  
ask-decision-node-question
  
  
输出问题、询问答案
  
  
proceed-to-yes-branch
  
  
使左结点称为当前结点
  
  
ask-if-answer-node-is-correct
  
  
输出结论、询问是否正确
  
  
answer-node-guess-is-correct
  
  
答案正确、是否继续
  
  
ask-try-again
  
  
询问是否重试
  
  
one-more-time
  
  
恢复根结点为当前结点
  
  
answer-node-guess-is-incorrect
  
  
答案错误、开始学习
  
  
replace-answer-node
  
  
替换错误结点
  
2 主要规则列表



Visual_Prolog实验.doc (458.5 KB, 下载次数: 0)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|Archiver|手机版|小黑屋|陕ICP备15012670号-1    

GMT+8, 2024-5-3 03:44 , Processed in 0.065572 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表