实验三归结原理_第1页
实验三归结原理_第2页
实验三归结原理_第3页
实验三归结原理_第4页
实验三归结原理_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、人工智能实验大作业实验题目:归结原理专业信息与计算科学年级 091001姓名刍昆学号 091001106指与老师M三期 2012-12-5实验三归结原理一、实验目的在本实验中,主要熟悉和掌握归结原理的基本思想和基本方法,通过实验培养了我们利用逻辑方法表示知识, 并掌握采用机器推理来 进行问题求解的基本方法。二、实验要求1 .熟悉归结原理的基本思想和归结否证的步骤;2 .本实验JAVA语言编程实现实验内容;3 .利用所学的知识及实验结果,来完成实验报告的各项内容。三、实验背景知识归结原理是一种推理规则。从谓词公式转化为子句集的过程中看 出,在子句集中子句之间是合取关系,其中只要有一个子句不可满足

2、, 则子句集就不可满足。若一个子句集中包含空子句,则这个子句集一 定是不可满足的。归结原理就是基于这一认识提出来的。他的原理就是:P->Q,Q->R则P->R由于P->Q就是PV Q 而 Q->R就是QV R所以,他相当于将Q和Q合并。也就是说,PV汇1与PV122可以归结为121 V!22其中1,汇2是文字的 集合归结否证包含以下步骤:(1)把前提或公理转换成子句形式;(2)把求证目标的否定的子句形式加到公理集合中;(3)对所有这些子句进行归结,产生它们的逻辑结果子句;(4)用产生空子句的方法来得出矛盾;(5)否定目标的否证在用于产生空子句的代换下为真。如何把前

3、提或公理化为子句形式是进行归结的前提,其过程包含 如下步骤:(1)消去蕴涵符号用PV Q替换P- Q(2)减少否定符号的辖域每个否定符号最多只作用在一个谓词符号上(3)对变量标准化每个变量仅受一个量词作用(4)消去存在量词若存在量词前没有全称量词,则直接消去;否则,要Skolem。化。(5)化为前束范式前束范式:一个公式,如果量词均非否定地出现在公式最前面,其辖域延伸到整个公式的末尾,且在公式中仅含 有联结词,V, A,则称此种形式为前束范式。前束范式=(前缀)(母式)(6)化母式为合取范式(7)消去全称量词(8)消去连接词符号A用A, B替代(AA B)(9)将分离的变元归一化四、实验内容1

4、 .问题描述:四对夫妇中,王结婚时,周送了礼;周和钱是同一 排球队的队员;李的爱人是陈的爱人的表哥;陈夫妇与邻居吵架时, 徐、周、吴的爱人都去助战;李、徐、周结婚前住在同一宿舍,试用 归结原理求王、周、钱、陈、李、徐、吴、孙几人谁和谁是夫妇。2 .实验源代码:import java.lang.*;publicclass GuessCouple2/*数据类型*/publicclass PersonprivateStringname;privateboolean sex ;privatePerson spouse ;public Person(Stringname)this . name=name

5、;this . sex =false ;this . spouse =null ;public Person()name =null ;sex = false ;spouse =null ;public Person(Stringname, boolean sex,Personspouse)this . name=name;this . sex =sex;this . spouse =spouse;publicvoid setName(Stringname) this . name=name;public StringgetName()return name;publicvoid setSex

6、( boolean sex) this . sex =sex;publicboolean getSex()return sex ;publicvoid setSpouse(Personperson1) this . spouse =person1; public PersongetSpouse()return spouse ;= new Person8;= new Person8;= new Person8;= new Person8;Person口sortBySpouselPerson口sortBySpouse2int x=0, y =0;Person口sortByEqualSex1Pers

7、on口sortByEqualSex2int n=0, p=0, f =0;Person口 woman =newPerson4;Person口 man= new Person4;int k=0, s =0, r =0;booleansign= true;booleansign1=true;booleansign2=true;booleansign3=true;booleansign4=true;booleansign5=true;booleansign6=true;booleansign7=true;Personcouple1 =new Person4;Personcouple2 =new Pe

8、rson4;Personcouple3 =new Person4;Personcouple4 =new Person4;int a=0,b=0,c=0, d=0;int a2 =0, b2 =0, c2 =0, d2=0; publicvoid isCouple(Personperson1,Personperson2) if (person1.getSpouse().getName()=person2.getName() person1.setSex(!person2.getSex();person2.setSex(!person1.getSex();System. out .println(

9、person1.getName()+"的性别和,+person2.getName()+ "的性别不相同"); publicvoid marriage(Personperson1, boolean person1Marriage,Personperson2, boolean person2giveGiftPerson1) if (person1Marriage&&person2giveGiftPerson1) if (!person1.getName().equals(person2.getName() System. out .println(pe

10、rson1.getName()+"和"+person2.getName()+ "不是夫妻");sortBySpousel x+=person1;sortBySpouse2 y+=person2;publicvoid oneVolleyballGroup( boolean oneGroup,Personperson1, Personperson2)if (oneGroup&&person1.getSex()=person2.getSex()System. out .println(person1.getName()+"和"

11、;+person2.getName()+ "是相同的性别");sortByEqualSex1 n+=person1;sortByEqualSex1 n+=person2;f =n;publicvoid liveCollectivityDorm(boolean liveTogether,Personperson1,Personperson2,Personperson3)if (liveTogether&&!person1.getName().equals(person2.getName()&&!person1.getName().equals(

12、person3.getName() &&!person2.getName().equals(person3.getName()System. out .println(person1.getName()+"的性别和+person2.getName()+ "的性别相同");+person3.getName()+ "的性别相同 sortByEqualSex2 p+=person1;sortByEqualSex2sortByEqualSex2p+=person2;p+=person3;publicvoid isbrotherInLaw(Pers

13、onperson1,Personperson2, boolean p1SIsBrotherInLawP2S) if (!person1.getName().equals(person2.getName()&&p1SIsBrotherInLawP2S) person1.setSex( false ); sortBySpouse1 x+=person1;sortBySpouse2 y+=person2;System. out .println(person1.getName()+"是一个女人 ");woman k+=person1; r =k; System.

14、out .println(person1.getName()+"的性别是女和"+person1.getName()+"的配偶是男"); publicvoid assistInFighting( boolean cCoupleQuarrel,PersoncCouplePersonperson1,Personperson2,Personperson3)if (cCoupleQuarrel)if (!cCouple.getName().equals(person1.getName()&&!cCouple.getName().equals(per

15、son2.getName()&&!cCouple.getName().equals(person3.getName()&&!person1.getName().equals(person2.getName() &&!person1.getName().equals(person3.getName()&&!person2.getName().equals(person3.getName()System. out .println(cCouple.getName()+"的配偶不是+person1.getName()+ &qu

16、ot;和"+cCouple.getName() + "的配偶不是"+person1.getName()+ "的配偶");System. out .println(cCouple.getName()+"的配偶不是+person2.getName()+ "和"+cCouple.getName()System. sortBySpouse1 sortBySpouse2 sortBySpouse1 sortBySpouse2 sortBySpouse1 sortBySpouse2 sortBySpouse1 sortBySp

17、ouse2 sortBySpouse1 sortBySpouse2 sortBySpouse1 sortBySpouse2+ "的配偶不是"+person2.getName() + "的配偶");"的配偶不是"out .println(cCouple.getName()+ +person3.getName()+ "和"+cCouple.getName()+ "的配偶不是"+person3.getName()+ "的配偶");x+=cCouple;y+=person1;x+=c

18、Couple;y+=person2;x+=cCouple;y+=person3;x+=person1;y+=person2;x+=person1;y+=person3;x+=person2;y+=person3;publicvoid guessCoupleByRules()Person口person=new Person8;person0=new Person("王",false,person0);person1=new Person("陈",false,person1);person2=new Person("周",false,pe

19、rson2);person3=new Person("钱",false,person3);person4=new Person("吴",false,person4);person5=new Person("孙",false,person5);person6=new Person("李",false,person6);person7=new Person("许",false,person7);marriage(person0, true ,person2, true );oneVolleyball

20、Group( true ,person2,person3);isbrotherInLaw(person6,person1,true );assistInFighting( true ,person1,person7,person2,person4) ;liveCollectivityDorm(true ,person6,person7,person2);for ( int v=0;v< f ;v+)for ( int t=0;t< p ;t+)if ( sortByEqualSexI v.getName().equals( sortByEqualSex2 t.getName() f

21、or (int z=0;z< p;z+) for ( int j=0;j< f ;j+)if (! sortByEqualSex2 z.getName().equals( sortByEqualSex1 j.getName(); else sortByEqualSex1 j= sortByEqualSex2 z; sign2 =false ; if ( sign2 )sortByEqualSex1 n += sortByEqualSex2 z; sign2 =true ; for ( int m=0;m< r ;m+)for ( int q=0;q< n ;q+)if

22、(woman m.getName().equals(sortByEqualSex1 q.getName()for (int l=0;l<n;l+)for ( int j=0;j< r ;j+)if (! sortByEqualSex1 l.getName().equals( woman j.getName(); else womanj= sortByEqualSex1 l; sign =false ; if ( sign )woman k+= sortByEqualSex1 l; sign =true ;r =k;if (r =4)for ( int j=0;j<8;j+)i

23、nt w=0;for (int i=0;i< r ;i+)if (!personU.getName().equals(womani.getName()w+; if (w= r) man s+=personj; System. out .println();System. out .println("得到的男和女分别是:");System. out .print( "女:"+"");for ( int i=0;i< r ;i+)woman i.setSex( false );System. out .print( woman

24、 i.getName()+ ""); System. out .println();System. out .println();System. out .print("男:"+"");for ( int j=0;j< s ;j+)manj.setSex(true );System. out .print( manj.getName()+ "");System. out .println();System. out .println(); for ( int i=0;i<x;i+)if (sortByS

25、pouse1 i.getSex()!= sortBySpouse2 i.getSex() if (! sortBySpouse1 i.getSex()Persontemp= new Person();temp= sortBySpouse1 i;sortBySpouse1i= sortBySpouse2i;sortBySpouse2i=temp;publicvoid partitionCouple()for ( int i1=0;i1<x;i1+)for ( int i2=0;i2<s;i2+)if (sortBySpousel i1.getName().equals(mani2.g

26、etName()for (int i=0;i< r ;i+)if (! sortBySpouse2 i1.getName().equals( woman i.getName() &&sortBySpouse2 i1.getSex()=woman i.getSex()if ( mani2.getName().equals("王")int a1= a;for (int j=0;j<a1;j+) if (! couple1 j.getName().equals( woman i.getName(); else couple1 j=womani;sign

27、3 =false ;if (sign3 ) couple1 a+= womani; sign3 =true ; elseif ( mani2.getName().equals("陈")int b1=b;for (int j=0;j<b1;j+)if (! couple2 j.getName().equals( woman i.getName(); else couple2 j=womani;sign4 =false ;if (sign4 ) couple2 b+= womani;sign4 =true ; elseif ( mani2.getName().equals

28、("吴")int c1= c;for (int j=0;j<c1;j+)if (! couple3 j.getName().equals( woman i.getName(); else couple3 j= womani; sign5 =false ;if (sign5 )couple3 c+= womani;sign5 =true ; else int d1= d;for (int j=0;j<d;j+)if (! couple4 j.getName().equals( woman i.getName();else couple4 j= womani;sig

29、n6 =false ;if (sign6 )couple4 d+= womani;sign6 =true ;for ( int i=0;i<x;i+)if (sortBySpouse1i.getName().equals("王")for (int j=0;j<a;j+)if ( sortBySpouse2i.getName().equals( if (j= a-1)a 一;else for (int j1=j;j1< couple1 j1=couple1 j.getName()a-1;j1+)couple1 j1+1;a-;for ( int i=0;i&

30、lt;x;i+)if (sortBySpouse1 i.getName().equals("陈")for (int j=0;j<b;j+)if (sortBySpouse2 i.getName().equals(couple2 j.getName()if (j= b-1)b -;else for (int j1=j;j1<b-1;j1+)couple2 j1= couple2 j1+1;b -;for ( int i=0;i<x;i+)if (sortBySpousel i.getName().equals("吴")for (int j

31、=0;j<c;j+)couple3 j.getName()c-1;j1+)couple3 j1+1;if ( sortBySpouse2 i.getName().equals( if (j= c-1) c-; else for (int j1=j;j1< couple3 j1= c-; for ( int i=0;i<x;i+)if (sortBySpouse1 i.getName().equals("孙")couple4 j.getName()for (int j=0;j< d ;j+)if ( sortBySpouse2 i.getName().

32、equals(if (j= d -1) d -;else for (int j1=j;j1<d-1;j1+)couple4 j1= couple4 j1+1;d -;if ( a=1)man0.setSpouse( couple1 a-1);elsefor ( int i=0;i< a ;i+) if ( b=1)if (couple1 i.getName().equals(couple2 0.getName()if (i= a-1) a-;else for (int j1=i;j1<a-1;j1+)couplel j1= couplel j1+1;a-; if ( c=1)

33、if (couplel i.getName().equals(couple3 0.getName()if (i= a-1) a-;else for (int j1=i;j1<a-1;j1+)couple1 j1= couple1 j1+1;a-; if (d=1)if (couple1 i.getName().equals(couple4 0.getName()if (i= a-1) a-;else for (int j1=i;j1<a-1;j1+)couple1 j1= couple1 j1+1;a-; if ( b=1)man1.setSpouse( couple1 b-1);

34、 else for ( int i=0;i< b ;i+) if ( a=1)if (couple2 i.getName().equals(couple1 0.getName()if (i= b-1)b -; else for (int j1=i;j1<b-1;j1+)couple2 j1= couple2 j1+1;b -;if ( c=1)if (couple2 i.getName().equals(couple3 0.getName()if (i= b-1) b -; else for (int j1=i;j1<b-1;j1+)couple2 j1= couple2 j

35、1+1;b -; if (d=1)if (couple2 i.getName().equals(couple4 0.getName()if (i= d -1)d -; else for (int j1=i;j1<b-1;j1+)couple2 j1= couple2 j1+1;b -; if (c=1) man2.setSpouse( couple1 c-1); else for ( int i=0;i< c ;i+) if ( a=1)if (couple3 i.getName().equals(couple1 0.getName()if (i= c-1) c-; else fo

36、r (int j1=i;j1<c-1;j1+)couple3 j1= couple3 j1+1;c-; if ( b=1)if (couple3 i.getName().equals(couple2 0.getName()if (i= c-1) c-; else for (int j1=i;j1<c-1;j1+)couple3 j1= couple3 j1+1;c-; if (d=1)if (couple3 i.getName().equals(couple4 0.getName()if (i= c-1) c-;else for (int j1=i;j1<c-1;j1+)co

37、uple3 j1= couple3 j1+1;c-; if (d =1)man3.setSpouse( couple1 d-1); else for ( int i=0;i< d ;i+) if ( a=1)if (couple4 i.getName().equals(couple1 0.getName()if (i= d -1)d -;else for (int j1=i;j1<d-1;j1+)couple4 j1= couple4 j1+1;d -; if ( b=1)if (couple4 i.getName().equals(couple2 0.getName()if (i

38、= d -1)d -; else for (int j1=i;j1<d-1;j1+)couple4 j1= couple4 j1+1;d -; if ( d=1)if ( couple4i.getName().equals( if (i= d-1)couple4 0.getName()d -; else ford -; publicvoid supposeJudge()if (a=1) man0.setSpouse( a2 =a;if (b=1) man1.setSpouse( b2=b;if (c=1) man2.setSpouse( c2 =c;if (d=1) man3.setSp

39、ouse( d2 =d;if (a>1)man0.setSpouse(if (b=0&& a>=2)(int j1=i;j1<d-1;j1+)couple4 j1= couple4 j1+1couple1 0);couple2 0);couple3 0);couple4 0);couple1 0);man1.setSpouse( couple1 1);b+;if ( c=0&& a>=3) man2.setSpouse( couple1 couple3 c= couple1 2;c+;if (d=0&&a>3) ma

40、n3.setSpouse( couple1 couple4 d= couple1 3;2);3);d+;(b!=0&& c=0&&a>=2) elseifman2.setSpouse( couplel 1); couple3 c= couplel 1; c+;if (d=0&&a>2)man3.setSpouse( couple1 2); couple4 d= couple1 2;d+; elseif ( b!=0&& c!=0&& d=0) man3.setSpouse( couple1 1); co

41、uple4 d = couple1 1;d+;couple1 0.getName()if ( b=1&& c=0&& d=0) for (int i=0;i< r ;i+)if (! woman i.getName().equals(&&! woman i.getName().equals(couple1 1.getName()if (sign7 = true ) couple3 0= womani; man2.setSpouse( couple3 0); sign7 =false ; else couple4 0= womani;man3

42、.setSpouse( couple4 0); sign7 =true ;if ( b=1&& c=1&& d=0) for (int i=0;i< r ;i+)if (! woman i.getName().equals(&&! woman i.getName().equals(&&! woman i.getName().equals(couple4couple1 0.getName()couple1 1.getName()couple2 0.getName() 0= womani;man3.setSpouse( coup

43、le4 0);for ( int j=0;j<x;j+)if (man0.getName().equals(sortBySpousel j.getName()if ( man0.getSpouse().getName().equals( sortBySpouse2 j.getName()couplel 0= man0;man0.setSpouse( couple1 0); elseif ( b2 =1&&man0.getSpouse().getName().equals( couple2 0.getName() couple1 0= man0;man0.setSpouse

44、( couple1 0); elseif ( c2 =1&&man0.getSpouse().getName().equals( couple3 0.getName()couple1 0= man0;man0.setSpouse( couple1 0); elseif (d2=1&&man0.getSpouse().getName().equals( couple4 0.getName() couple1 0= man0;man0.setSpouse( couple1 0);System. out .println( couple1 0.getName();fo

45、r ( int j=0;j< x ;j+)if (man1.getName().equals(sortBySpouse1 j.getName()if ( man1.getSpouse().getName().equals( sortBySpouse2 j.getName() couple2 0= man1;man1.setSpouse( couple2 0); elseif ( a2 =1&&man 1.getSpouse().getName().equals(couple1 0.getName()couple2 0= man1;man1.setSpouse( coupl

46、e2 0); elseif ( c2 =1&&man 1.getSpouse().getName().equals(couple3 0.getName()couple2 0= man1;man1.setSpouse( couple2 0); elseif (d2=1&&man 1.getSpouse().getName().equals( couple4 0.getName() couple2 0= man1;man1.setSpouse( couple2 0); for ( int j=0;j<x;j+)if (man2.getName().equals

47、(sortBySpouse1 j.getName()if ( man2.getSpouse().getName().equals(sortBySpouse2 j.getName() couple3 0= man2;man2.setSpouse( couple3 0); elseif ( b2 =1&&man2.getSpouse().getName().equals( couple2 0.getName() couple3 0= man2; man2.setSpouse( couple3 0); elseif ( a2 =1&&man2.getSpouse().

48、getName().equals( couple1 0.getName() couple3 0= man2; man2.setSpouse( couple3 0); elseif (d2=1&&man2.getSpouse().getName().equals( couple4 0.getName() couple3 0= man2; man2.setSpouse( couple3 0); for ( int j=0;j< x ;j+)if (man3.getName().equals(sortBySpouse1 j.getName()if ( man3.getSpous

49、e().getName().equals(sortBySpouse2 j.getName() couple4 0= man3;man3.setSpouse( couple4 0); elseif ( b2 =1&&man3.getSpouse().getName().equals( couple2 0.getName() couple4 0= man3; man3.setSpouse( couple4 0); elseif ( c2 =1&&man3.getSpouse().getName().equals(couple3 0.getName()couple4

50、0= man3;man3.setSpouse( couple4 0); elseif ( a2 =1&&man3.getSpouse().getName().equals( couplel 0.getName() couple4 0= man3; man3.setSpouse( couple4 0); for ( int j1=0;j1<x;j1+)if (man0.getName().equals(sortBySpouse1 j1.getName()if ( man0.getSpouse().getSex()for (int j=0;j< r ;j+) if (

51、b2=1&&c2=1&&d2=1)if (! woman j.getName().equals( sortBySpouse2 j1.getName() &&! womanj.getName().equals( couple2 0.getName() &&! womanj.getName().equals( couple3 0.getName() &&! womanj.getName().equals( couple4 0.getName() couple1 0= woman j; man0.setSpouse( c

52、ouple1 0); elseif ( b2 =1&& c2 =1)if (! woman j.getName().equals( sortBySpouse2 j1.getName() &&! womanj.getName().equals( couple2 0.getName() &&! womanj.getName().equals( couple3 0.getName() couple1 0= woman j; man0.setSpouse( couple1 0); elseif (b2=1)if (! woman j.getName().

53、equals( sortBySpouse2 j1.getName() &&! womanj.getName().equals( couple2 0.getName()couplel 0= woman j; man0.setSpouse( couplel 0); for ( int j1=0;j1<x;j1+)if (man1.getName().equals(sortBySpouse1 j1.getName()if ( man1.getSpouse().getSex() for (int j=0;j< r ;j+)if ( a2 =1&& c2 =1&& d2 =1)if (! woman j.getName().equals( sortBySpouse2 j1.getName() &&! womanj.getName().equals( couple1 0.getName() &&! womanj.getName().equals( couple3 0.getName() &&! womanj.getName().equals( couple4 0.getNam

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论