博舍

人工智能消解原理实验报告 人工智能代码原理

人工智能消解原理实验报告

一实验目的及原理

目的:通过编程实现对子句的消解,进一步理解含有参数的子句如何使用消解规则,掌握子句消解的原理和规则。

原理:令L1,L2为两任意原子公式;L1和L2具有相同的谓词符号,但一般具有不同的变量。已知两子句L1∨α和~L2∨β,如果L1和L2具有最一般合一σ,那么通过消解可以从这两个父辈子句推导出一个新子句(α∨β)σ。

二.实验难点

1.如何寻找最一般的合一者σ,尤其对于参数比较多的情况下。

替换的一般规则是:

  用函数替代变量(f(x)->y),用常量替代变量(a->x)。这里我们事先约定好常量26个字母前面部分,变量时26个字母后面部分,中间部分谓词量。当然我们也可以约定以***开头的为常量或变量。

三、实验条件

       硬件:微型计算机。

      语言:本实验选用的为C++语言。

       开发环境:VS2010

四.实验步骤

1.获取输入两个子句

2.以析取符号’V’将子句分割单个文字(literals)的形式,参数以’,’进行分割。

3将每一个子句分割的文字放到同一个数组中

4.扫描两个数组按消解规则进行消解

五.算法实现

5.1算法实现的数据结构

struct literals  //文字

{

 byteis_not;//是’~’则其值为1否则为0

 boolresloution_flag;//能否消解

 stringpredicate_name;//谓词名称

 vectorvec_parameter;//参数

};

structreplace

{

 stringstr_src;//初始的参数

 stringstr_replace;//替换的参数

};

5.2错误处理

enumErrorType{invalidChar,unknowError};//错误类型

Char*error_msg[]={"Invalid char!“,"Unknowerror!"};

 

5.3算法实现类

classResolutionProcess

{

 private:

 vectorvec_literals1;//存放子句一

  vectorvec_literals2;;//存放子句二

 vectorvec_rep;//替换的变量

 stringstr_result;//消解结果

 voidsplit(stringstr,char split_c,vector*ret);//分割字符串

 voidpre_process(vectorvec_str,vector&vec_literals);//寻找互补对

 voidResolution();//消解

 voidreplace_variable();//替换变量

 public:

 ResolutionProcess(stringstr1,stringstr2);

 ~ResolutionProcess(void);

 stringget_resolution_result();//获取消解结果

 stringget_par_replace();//获取σ

};

 

六.实验结果

 

 

核心代码:

voidResolutionProcess::split(strings,charsplit_c,vector*ret)//字符串分割函数

{

      intlast=0;

      intindex=s.find_first_of(split_c,last);

      while(index!=std::string::npos)

      {

             ret->push_back(s.substr(last,index-last));

             last=index+1;

             index=s.find_first_of(split_c,last);

      }

      if(index-last>0)

      {

             ret->push_back(s.substr(last,index-last));

      }

 

}

voidResolutionProcess::Resolution()//消解{   for(inti=0;i

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇