C#模糊逻辑API
目录1开始之前抽象2模糊逻辑概念3使用API3.1核心流程3.2设计模式3.3依赖性下载最新的存档库下载本地副本此API通过CPlain旧CLR对象上的模糊逻辑概念执行推理该对象关联本机.NET Framework中定义的Expression对象。1开始之前抽象如果您想深入研究模糊逻辑理论如数学定理假设和摩根定律强烈建议您寻找其他参考资料以满足您的好奇心和/或您的研究需求。通过这个git帖子您将只访问一个在现实世界应用程序中执行模糊逻辑的实际例子然后本文的重点不是仅仅为了一个实际目的而深入探讨哲学对话。2模糊逻辑概念这个来自tutorialspoint网站的数字恢复了模糊逻辑的真实概念没有什么是绝对真或假对于模糊逻辑;在0和1之间你有一个来自这些极端的区间超出了布尔逻辑的限制。3使用API3.1核心流程核心概念有第一个要求Defuzzyfication。换句话说通过基于模糊逻辑引擎的Crisp Input表达式生成模糊逻辑结果下图来自Wikepdia参考模糊逻辑引擎的规则是拆分任何复杂的布尔表达式清晰的输入解决小布尔部分规则中的逻辑布尔问题关于这个复杂布尔表达式使用的理论查看像多值逻辑或/经典的逻辑。基于上面的说明性示例让我们创建一个Model类它代表所有人的诚实品格如诚实、真理和正义感百分比评估以及一个布尔表达式对象该对象标识诚实概况考虑到最小百分比是一个诚实的个人[Serializable, XmlRoot] public class HonestAssesment { [XmlElement] public int IntegrityPercentage { get; set; } [XmlElement] public int TruthPercentage { get; set; } [XmlElement] public int JusticeSensePercentage { get; set; } [XmlElement] public int MistakesPercentage { get { return ((100-IntegrityPercentage) (100-TruthPercentage) (100-JusticeSensePercentage))/3; } } } //Crisp Logic expression that represents Honesty Profiles: static ExpressionFuncHonestAssesment, bool _honestyProfile (h) (h.IntegrityPercentage 75 h.JusticeSensePercentage 75 h.TruthPercentage 75) || //First group (h.IntegrityPercentage 90 h.JusticeSensePercentage 60 h.TruthPercentage 50) || //Second group (h.IntegrityPercentage 70 h.JusticeSensePercentage 90 h.TruthPercentage 80) || //Third group (h.IntegrityPercentage 65 h.JusticeSensePercentage 100 h.TruthPercentage 95); //Last group断开的布尔表达式是从System.Linq.Expressions.Expression类派生的一个容量将任何代码块转换为代表性的string;将辅助此作业的派生类是BinaryExpression布尔表达式将在较小布尔表达式的二叉树中切片其规则将优先考虑包含OR条件表达式的切片然后用AND条件表达式切片。//First group of assessment: h.IntegrityPercentage 75; h.JusticeSensePercentage 75; h.TruthPercentage 75; //Second group of assessment: h.IntegrityPercentage 90; h.JusticeSensePercentage 60; h.TruthPercentage 50; //Third group of assessment: h.IntegrityPercentage 70; h.JusticeSensePercentage 90; h.TruthPercentage 80; //Last group of assessment: h.IntegrityPercentage 65; h.JusticeSensePercentage 100; h.TruthPercentage 95;.NET Framework中包含的此功能是一张王牌用于降低评估的配置文件已经征服的评估值或者它们与4个定义的评估组中的任何一个达到的接近程度例如HonestAssesment profile1 new HonestAssesment() { IntegrityPercentage 90, JusticeSensePercentage 80, TruthPercentage 70 }; string inference_p1 FuzzyLogicHonestAssesment.GetInferenceResult (_expression, ResponseType.Json, profile1);看看“HitsPercentage”属性。对Profile 1的推断有66%的人是诚实的。{ ID: 0, HitsPercentage: 66%, Data: { IntegrityPercentage: 90, TruthPercentage: 70, JusticeSensePercentage: 80, MistakesPercentage: 20 }, PropertiesNeedToChange: [ IntegrityPercentage ], RatingsReport: [ false, true, true ], ErrorsQuantity: 1 }HonestAssesment profile2 new HonestAssesment() { IntegrityPercentage 50, JusticeSensePercentage 63, TruthPercentage 30 }; string inference_p2 FuzzyLogicHonestAssesment.GetInferenceResult (_expression, ResponseType.Json, profile2);对Profile 2的推断有33的人是诚实的即“有时是诚实的”像个家庭教师。{ ID: 0, HitsPercentage: 33%, Data: { IntegrityPercentage: 50, TruthPercentage: 30, JusticeSensePercentage: 63, MistakesPercentage: 52 }, PropertiesNeedToChange: [ IntegrityPercentage, TruthPercentage ], RatingsReport: [ false, true, false ], ErrorsQuantity: 2 }HonestAssesment profile3 new HonestAssesment() { IntegrityPercentage 46, JusticeSensePercentage 48, TruthPercentage 30 }; string inference_p3 FuzzyLogicHonestAssesment.GetInferenceResult (_expression, ResponseType.Json, profile3);对Profile 3的推断0的人是诚实的即“极不诚实的”如上图所示{ ID: 0, HitsPercentage: 0%, Data: { IntegrityPercentage: 46, TruthPercentage: 30, JusticeSensePercentage: 48, MistakesPercentage: 58 }, PropertiesNeedToChange: [ IntegrityPercentage, JusticeSensePercentage, TruthPercentage ], RatingsReport: [ false, false, false ], ErrorsQuantity: 3 }HonestAssesment profile4 new HonestAssesment() { IntegrityPercentage 91, JusticeSensePercentage 83, TruthPercentage 81 }; string inference_p4 FuzzyLogicHonestAssesment.GetInferenceResult (_expression, ResponseType.Json, profile4);对Profile 4的推断100的人是诚实的即“非常诚实”就像数字评估一样。{ ID: 0, HitsPercentage: 100%, Data: { IntegrityPercentage: 91, TruthPercentage: 81, JusticeSensePercentage: 83, MistakesPercentage: 15 }, PropertiesNeedToChange: [], RatingsReport: [ true, true, true ], ErrorsQuantity: 0 }3.2设计模式使用Singleton Design Pattern开发的Fuzzy Logic API由一个private构造函数构成它有两个参数参数一个Expression对象和一个POCO对象在泛型参数中定义;但开发人员将通过一行代码得到推理结果//Like a inference object... InferenceModelToInfere inferObj FuzzyLogicModelToInfere.GetInferenceResult (_expressionArg, modelObj); //... get as XML string... string inferXml FuzzyLogicModelToInfere.GetInferenceResult (_expressionArg, ResponseType.Xml, modelObj); //...or json string. string inferJson FuzzyLogicModelToInfere.GetInferenceResult (_expressionArg, ResponseType.Json, modelObj);3.3依赖性要将Visual Logic API添加为程序集或类似Visual Studio项目中的内部类您需要安装System.Linq.Dynamicdll可以通过nuget引用或在Nuget Package ConsoleInstall-Package System.Linq.Dynamic上执行命令来安装。