博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《专家系统破解篇 七、IL代码破解》之 规则推理
阅读量:5793 次
发布时间:2019-06-18

本文共 2980 字,大约阅读时间需要 9 分钟。

hot3.png

规则推理 经过 C类与E类。的构造已经很容易产生。

通过条件列表(1.2) 找到1这个条件对应的规则(规则中有1这个条件的)(规则A B)。 通过对规则A的多个条件判断,得到规则A的是否成立标志-----E类操作。

对A类的结论进行第二次推理。 即,A结论 A_ J 做规则的条件时,对应规则的成立。

也可以做第三次推理。依次类推。

重点在于三段代码:

入口 <!-- lang: c# --> for (int i = 0; i < QList.Count; i++) //主要推理过程---用户输入的条件列表 { this.operRulesList[QList[i]].QToRules(QState[i]);//条件对应--事实索引的对应--Init类:Basic类对象的方法(条件的正反 用户输入)

}

A类 两层推理 1.根据条件找到规则,根据规则找到结论,2.根据结论找到规则,根据规则找到结论。 <!-- lang: c# --> public virtual void QListFRule(int A_0) { //appSettings EngineLevel if (A_0 <= 9)//5两层推理,9三层推理。 { //RUN类对象结论 for (int num = 0; num < this.Q_RuleIndex.Count; num++) { RulesList[this.Q_RuleIndex[num]].QListFRule(A_0 + 1); //Init对象方法。 } } }

///     /// 条件对应的规则    ///     /// 条件正反符号--用户输入信息    /// 
条件对应事实索引Init类的规则List循环操作
public void QToRules(int Q_Istrue) { this.IsSuc = Q_Istrue;//事实被用户初始为 正反 //此事实对应多条规则 for(int num = 0;num < this.Q_RuleIndex.Count; num++) { RulesList[this.Q_RuleIndex[num]].QListFRule(0);//每条规则Run类对象的方法(0)。 } }

C类:

/// /// 设置结论正反符号 /// /// public override void QListFRule(int A_0) //重写A类方法 { int suc = 0;//初始结论正反符号为0 for ( int i = 0; i < base.A_RuleQIndex.Count; i++)//此事实做结论的多条规则 { if (RulesRelationBasic.RulesList[base.A_RuleQIndex[i]].IsSuc == base.A_State[i])//结论状态初始为1,规则是否成立与结论状态匹配 { suc = base.A_Istrue[i];//结论成立。则把结论正反符号标志 if (suc == -1) { break;//是否有规则的结论是-1符号 } } } if (base.IsSuc != suc) { base.IsSuc = suc; if (RulesRelationBasic.Result.ContainsKey(base.Index)) { base.QListFRule(A_0 + 1);//init:Basic类 return; } else { RulesRelationBasic.Result.Add(base.Index, base.Index); base.QListFRule(A_0 + 1); return; } } }

E类:

/// /// 一条规则中的多个条件 /// /// public override void QListFRule(int A_0)//重写A类中方法 { int suc = 1;//初始规则成立 for (int i = 0; i < base.A_RuleQIndex.Count; i++) //此规则多个条件是否都成立 { if (RulesRelationBasic.RulesList[base.A_RuleQIndex[i]].IsSuc != base.A_State[i]) { //条件不成立 suc = 0; break; } } if (base.IsSuc != suc) //上次其他条件计算的本规则的IsSuc,与本次是否相同 { base.IsSuc = suc; if (RulesRelationBasic.Result.ContainsKey(base.Index)) //规则插入Result结论 { base.QListFRule(A_0 + 1);//Basic类对象方法(1); return; } else { RulesRelationBasic.Result.Add(base.Index, base.Index); base.QListFRule(A_0 + 1); return; } } }

等我有时间,搞一个图出来~

本人声明:沐海( 以上文章是经过本人设计实践和阅读其他文档得出。如果需要探讨或指教可以留言!欢迎交流!

转载于:https://my.oschina.net/mahaisong/blog/140313

你可能感兴趣的文章
[Oracle]如何在Oracle中设置Event
查看>>
top.location.href和localtion.href有什么不同
查看>>
02-创建hibernate工程
查看>>
Open Graph Protocol(开放内容协议)
查看>>
Ubuntu18.04中配置QT5.11开发环境
查看>>
Exception的妙用
查看>>
知识图谱在互联网金融中的应用
查看>>
MySQL 到底能不能放到 Docker 里跑?
查看>>
【docker】关于docker 中 镜像、容器的关系理解
查看>>
information_schema系列五(表,触发器,视图,存储过程和函数)
查看>>
瓜子二手车的谎言!
查看>>
[转]使用Git Submodule管理子模块
查看>>
DICOM简介
查看>>
Scrum之 Sprint计划会议
查看>>
List<T> to DataTable
查看>>
[Java]Socket和ServerSocket学习笔记
查看>>
stupid soso spider
查看>>
svn命令在linux下的使用
查看>>
MySQL主从同步相关-主从多久的延迟?
查看>>
Gradle之module间依赖版本同步
查看>>