人工智能实验报告王浩算法的实现.docx
《人工智能实验报告王浩算法的实现.docx》由会员分享,可在线阅读,更多相关《人工智能实验报告王浩算法的实现.docx(16页珍藏版)》请在冰点文库上搜索。
![人工智能实验报告王浩算法的实现.docx](https://file1.bingdoc.com/fileroot1/2023-5/21/3baa2e04-5a1a-4556-9de3-d75a779c78f8/3baa2e04-5a1a-4556-9de3-d75a779c78f81.gif)
人工智能实验报告王浩算法的实现
《人工智能》实验二题目
王浩算法的实现
1.实验内容:
实现命题逻辑框架内的王浩算法。
⑴将命题逻辑中的王浩算法推广至下述命题语言的情形之下:
ⅰ命题变量符号:
,
,
,
ⅱ逻辑连接符:
,
,
,
,
ⅲ间隔符:
,
⑵在上述⑴中所定义的命题语言中实现王浩算法。
2.实验目的
熟练掌握命题逻辑中的王浩算法。
3.数据结构与算法设计
publicclassWanghao()//主体类
publicvoidinput()//输入字符,将输入字符归类的函数
publicvoidjudge()//判断公式是恒真还是恒假的函数
publicvoidmove(intl,intr)//加入王浩算法的核心公式,
publicvoidoutput()//输出函数
publicvoidreasoning()//用于推理判断的函数
publicvoidsimplify()}//化简
classalp(){//字符串的匹配,分配
alp(charfuhao,charzimu)
alp(){}}
4.源代码
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
importjava.io.IOException;
importjava.util.Vector;
publicclassWanghao{
Vectorleft=newVector();
Vectorright=newVector();
publicstaticvoidmain(Stringargs[]){
Wanghaow=newWanghao();
w.input();
w.huajian();
w.tuili();
w.judge();
}
publicvoidinput(){
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
Stringwords=newString();
System.out.println("请输入公式行:
(例如:
p->~(q&&r)||p<->r)");
try{
words=br.readLine();
}catch(IOExceptione){
System.out.println("inputerror");
System.exit(0);
}
charch[]=words.toCharArray();
for(inti=0;iif(ch[i]=='~'||ch[i]=='-'||ch[i]=='&'||ch[i]=='|'){
termt=newterm();
t.fuhao=ch[i++];
t.zimu=ch[i];
right.add(t);
}
elseif(ch[i]=='<'){
termt=newterm();
t.fuhao=ch[i++];
t.zimu=ch[i++];
right.add(t);
}
else{
termt=newterm();
t.fuhao='$';
t.zimu=ch[i];
right.add(t);
}
}
}
publicvoidoutput(){
for(inti=0;iSystem.out.print(left.elementAt(i).toString());
if(left.elementAt(i).fuhao=='<')
System.out.print(">");
}
System.out.print("=>");
for(inti=0;iSystem.out.print(right.elementAt(i).toString());
if(right.elementAt(i).fuhao=='<')
System.out.print(">");
}
System.out.println();
}
publicvoidhuajian(){
for(inti=0;iif(right.elementAt(i).fuhao!
='&'&&right.elementAt(i).fuhao!
='|'&&right.elementAt(i).fuhao!
='<')
continue;
elseif(right.elementAt(i).fuhao=='&'){
intcount=0;
for(intj=i-1;j>=0;j--){
if(right.elementAt(j).zimu==')')count++;
elseif(right.elementAt(j).zimu=='(')count--;
if(count==0){
right.add(j,newterm('~','('));
break;
}
}
i++;
right.elementAt(i).fuhao='-';
right.elementAt(i).zimu='>';
if(right.elementAt(i+1).fuhao=='~')
right.elementAt(i+1).fuhao='$';
elseright.elementAt(i+1).fuhao='~';
for(intj=i+1;jif(right.elementAt(j).zimu=='(')count++;
elseif(right.elementAt(j).zimu==')')count--;
if(count==0){
if(j+1right.add(j+1,newterm('$',')'));
elseright.add(newterm('$',')'));
break;
}
}
}
elseif(right.elementAt(i).fuhao=='|'){
intcount=0;
for(intj=i-1;j>=0;j--){
if(right.elementAt(j).zimu==')')count++;
elseif(right.elementAt(j).zimu=='(')count--;
if(count==0){
if(right.elementAt(j).fuhao=='~')
right.elementAt(j).fuhao='$';
elseright.elementAt(j).fuhao='~';
right.add(j,newterm('$','('));
break;
}
}
i++;
right.elementAt(i).fuhao='-';
right.elementAt(i).zimu='>';
for(intj=i+1;jif(right.elementAt(j).zimu=='(')count++;
elseif(right.elementAt(j).zimu==')')count--;
if(count==0){
if(j+1right.add(j+1,newterm('$',')'));
elseright.add(newterm('$',')'));
break;
}
}
}
elseif(right.elementAt(i).fuhao=='<'){
Vectorl=newVector();
Vectorr=newVector();
intj=i-1;
intcount=0;
while(j>=0){
if(right.elementAt(j).zimu==')')count++;
elseif(right.elementAt(j).zimu=='(')count--;
l.add(0,right.elementAt(j));
right.removeElementAt(j);
j--;i--;
if(count==0)
break;
}
j=i+1;
while(jif(right.elementAt(j).zimu=='(')count++;
elseif(right.elementAt(j).zimu==')')count--;
r.add(right.elementAt(j));
right.removeElementAt(j);
if(count==0)
break;
}
right.removeElementAt(i);
right.add(i++,newterm('~','('));
right.add(i++,newterm('$','('));
j=0;
while(jright.add(i++,l.elementAt(j++));
right.add(i++,newterm('-','>'));
j=0;
while(jright.add(i++,r.elementAt(j++));
right.add(i++,newterm('$',')'));
right.add(i++,newterm('-','>'));
right.add(i++,newterm('~','('));
j=0;
while(jright.add(i++,r.elementAt(j++));
right.add(i++,newterm('-','>'));
j=0;
while(jright.add(i++,l.elementAt(j++));
right.add(i++,newterm('$',')'));
right.add(i++,newterm('$',')'));
i--;
}
output();
}
}
publicvoidtuili(){
for(inti=0;iif(right.elementAt(i).fuhao!
='-')continue;
else{
right.elementAt(i).fuhao='$';
right.elementAt(i).zimu=',';
intcount=0;
for(intj=i-1;j>=0;j--){
if(right.elementAt(j).zimu==')')count++;
elseif(right.elementAt(j).zimu=='(')count--;
if(count==0){
if(right.elementAt(j).fuhao=='~')right.elementAt(j).fuhao='$';
elseif(right.elementAt(j).fuhao=='$')right.elementAt(j).fuhao='~';
break;
}
}
}
}
output();
move(0,0);
}
publicvoidmove(intl,intr){
intle,ri;
for(le=0;leif(left.elementAt(le).fuhao=='~')break;
if(((left.elementAt(le).zimu>='a')&&(left.elementAt(le).zimu<='z'))||((left.elementAt(le).zimu>='A')&&(left.elementAt(le).zimu<='Z'))||left.elementAt(le).zimu==',')
continue;
elsebreak;
}
for(ri=0;riif(right.elementAt(ri).fuhao=='~')break;
if(((right.elementAt(ri).zimu>='a')&&(right.elementAt(ri).zimu<='z'))||((right.elementAt(ri).zimu>='A')&&(right.elementAt(ri).zimu<='Z'))||right.elementAt(ri).zimu==',')
continue;
elsebreak;
}
if((le==left.size())&&(ri==right.size()))return;
if(rintcount=0,loc=0;
right.elementAt(r).fuhao='$';
if(right.elementAt(r).zimu!
='('){
if(r==0){
left.add(loc++,right.elementAt(r));
left.add(loc++,newterm('$',','));
}
else{
if(left.size()!
=0)left.add(newterm('$',','));
left.add(right.elementAt(r));
}
right.removeElementAt(r);
if(!
right.isEmpty())
right.removeElementAt(r);
}
else{
right.removeElementAt(r);
count++;
if(left.size()!
=0)left.add(newterm('$',','));
while(true){
if(right.elementAt(r).zimu=='(')count++;
elseif(right.elementAt(r).zimu==')')count--;
if(count==0){
if(r==0)left.add(loc++,newterm('$',','));
right.removeElementAt(r);
if(!
right.isEmpty())
right.removeElementAt(r);
break;
}
if(r==0)left.add(loc++,right.elementAt(r));
elseleft.add(right.elementAt(r));
right.removeElementAt(r);
}
}
}
elseif(rintcount=1;
right.removeElementAt(r);
while(true){
if(right.elementAt(r).zimu=='(')count++;
elseif(right.elementAt(r).zimu==')')count--;
if(count==0){
right.removeElementAt(r);
break;
}
r++;
}
}
while(left.size()!
=0&&left.elementAt(left.size()-1).zimu==',')left.removeElementAt(left.size()-1);
if(lintcount=0,loc=0;
left.elementAt(l).fuhao='$';
if(left.elementAt(l).zimu!
='('){
if(l==0){
right.add(loc++,left.elementAt(l));
right.add(loc++,newterm('$',','));
}
else{
if(right.size()!
=0)right.add(newterm('$',','));
right.add(left.elementAt(l));
}
left.removeElementAt(l);
if(!
left.isEmpty())
left.removeElementAt(l);
}
else{
left.removeElementAt(l);
count++;
if(right.size()!
=0)right.add(newterm('$',','));
while(true){
if(left.elementAt(l).zimu=='(')count++;
elseif(left.elementAt(l).zimu==')')count--;
if(count==0){
if(l==0)right.add(loc++,newterm('$',','));
left.removeElementAt(l);
if(!
left.isEmpty())
left.removeElementAt(l);
break;
}
if(l==0)right.add(loc++,left.elementAt(l));
elseright.add(left.elementAt(l));
left.removeElementAt(l);
}
}
}
elseif(lintcount=1;
left.removeElementAt(l);
while(true){
if(left.elementAt(l).zimu=='(')count++;
elseif(left.elementAt(l).zimu==')')count--;
if(count==0){
left.removeElementAt(l);
break;
}
l++;
}
l++;
}
while(left.size()!
=0&&left.elementAt(left.size()-1).zimu==',')
left.removeElementAt(left.size()-1);
while(right.size()!
=0&&right.elementAt(right.size()-1).zimu==',')
right.removeElementAt(right.size()-1);
r=0;l=0;
if(left.size()!
=0)
while(left.elementAt(l).fuhao!
='~'&&left.elementAt(l).zimu!
='('){
l+=2;
if(l>=left.size()){
l=0;
break;
}
}
if(right.size()!
=0)
while(right.elementAt(r).fuhao!
='~'&&right.elementAt(r).zimu!
='('){