人工智能——基于产生式的动物识别系统(JAVA)
本文借鉴于此博文,感谢该博主给予思路。本文仅将语言变换为java。
此系统为基于产生式简单的人工智能小系统。
通过建立规则,并将给定事实与规则进行匹配,从而得出结论。
为了识别这些动物,可以根据动物识别的特征,建立包含下述规则的规则库:
R1:if 动物有毛发 then 动物是哺乳动物
R2:if 动物有奶 then 动物是哺乳动物
R3:if 动物有羽毛 then 动物是鸟
R4:if 动物会飞 and 会生蛋 then 动物是鸟
R5:if 动物吃肉 then 动物是食肉动物
R6:if 动物有犀利牙齿 and 有爪 and 眼向前方 then 动物是食肉动物
R7:if 动物是哺乳动物and有蹄then动物是有蹄类动物
R8:if 动物是哺乳动物and反刍then动物是有蹄类动物
R9:if 动物是哺乳动物and是食肉动物and有黄褐色 and 有暗斑点 then 动物是豹
R10:if 动物是哺乳动物 and是食肉动物and有黄褐色 and 有黑色条纹 then 动物是虎
R11:if动物是有蹄类动物 and 有长脖子and有长腿and有暗斑点 then 动物是长颈鹿
R12:if 动物是有蹄类动物 and有黑色条纹 then 动物是斑马
R13:if 动物是鸟and不会飞 and有长脖子and有长腿 and有黑白二色 then 动物是鸵鸟
R14:if 动物是鸟 and不会飞 and会游泳 and有黑白二色 then 动物是企鹅
R15:if 动物是鸟 and善飞 then 动物是信天翁
基本过程:
- 初始化规则库,并获取事实库数据
- 检查规则库是否还有未使用过规则,若无,则跳转至(5)
- 匹配规则库与事实库中特征,若一轮规则匹配之后无任何匹配项,则跳转至(5)
- 提取出可用规则结论,若结论为中间值,则将结论加入事实库,并进行新一轮的规则匹配,即跳转至(2)。若结论为最终答案,则直接输出,并结束程序运行
- 若规则库中所有规则均无完全匹配项,则说明该问题无解,结束程序运行。
规则实体代码:
//规则实体
public class Rule {
private int factNum;
private int facts[];
private boolean used;//是否使用
private boolean possible;//是否可能
private boolean endResult;
private int resultID;
private int nextFactPos;//记录下一次需验证的特征位置
public Rule(int factNum,int[] facts,boolean endResult,int resultID){
this.used=false;
this.possible=true;
this.factNum = factNum;
this.facts=facts;
this.endResult=endResult;
this.resultID=resultID;
this.nextFactPos=0;
}
public int getNextFactPos() {
return nextFactPos;
}
public void setNextFactPos(int nextFactPos) {
this.nextFactPos = nextFactPos;
}
public int getResultID() {
return resultID;
}
public void setResultID(int resultID) {
this.resultID = resultID;
}
public int getFactNum() {
return factNum;
}
public void setFactNum(int factNum) {
this.factNum = factNum;
}
public