All Projects → chen0040 → cs-expert-system-shell

chen0040 / cs-expert-system-shell

Licence: MIT license
C# implementation of an expert system shell

Programming Languages

C#
18002 projects
powershell
5483 projects

Projects that are alternatives of or similar to cs-expert-system-shell

Nrules
Rules engine for .NET, based on the Rete matching algorithm, with internal DSL in C#.
Stars: ✭ 1,003 (+2850%)
Mutual labels:  rules, rule-engine
powerflows-dmn
Power Flows DMN - Powerful decisions and rules engine
Stars: ✭ 46 (+35.29%)
Mutual labels:  rules, rule-engine
rools
A small rule engine for Node.
Stars: ✭ 118 (+247.06%)
Mutual labels:  rules, rule-engine
Rulette
A pragmatic business rule management system
Stars: ✭ 91 (+167.65%)
Mutual labels:  rules, rule-engine
ruledesigner
Rule Designer is the Eclipse-based development environment for ODM developers.
Stars: ✭ 14 (-58.82%)
Mutual labels:  rules, rule-engine
EngineX
Engine X - 实时AI智能决策引擎、规则引擎、风控引擎、数据流引擎。 通过可视化界面进行规则配置,无需繁琐开发,节约人力,提升效率,实时监控,减少错误率,随时调整; 支持规则集、评分卡、决策树,名单库管理、机器学习模型、三方数据接入、定制化开发等;
Stars: ✭ 369 (+985.29%)
Mutual labels:  rules, rule-engine
RulerZBundle
Symfony Bundle for RulerZ
Stars: ✭ 38 (+11.76%)
Mutual labels:  rules, rule-engine
Node Rules
Node-rules is a light weight forward chaining rule engine written in JavaScript.
Stars: ✭ 481 (+1314.71%)
Mutual labels:  rules, rule-engine
Json Rules Engine
A rules engine expressed in JSON
Stars: ✭ 1,159 (+3308.82%)
Mutual labels:  rules, rule-engine
Flogo
Project Flogo is an open source ecosystem of opinionated event-driven capabilities to simplify building efficient & modern serverless functions, microservices & edge apps.
Stars: ✭ 1,891 (+5461.76%)
Mutual labels:  rules
xpub
POSIX Shell script to get user's display environment variables of any TTY from anywhere.
Stars: ✭ 36 (+5.88%)
Mutual labels:  rules
Rules
Generic Rules engine in golang
Stars: ✭ 96 (+182.35%)
Mutual labels:  rules
Yaraguardian
Django web interface for managing Yara rules
Stars: ✭ 156 (+358.82%)
Mutual labels:  rules
ruling
Stateless rule engine
Stars: ✭ 19 (-44.12%)
Mutual labels:  rule-engine
Threathunting Spl
Splunk code (SPL) useful for serious threat hunters.
Stars: ✭ 117 (+244.12%)
Mutual labels:  rules
ReshaperForBurp
Burp Suite Extension - Trigger actions and reshape HTTP request/response and WebSocket traffic using configurable rules
Stars: ✭ 32 (-5.88%)
Mutual labels:  rules
Rules
自用Clash 策略组及规则 及Subconverter 相关资源备份
Stars: ✭ 94 (+176.47%)
Mutual labels:  rules
laravel-admin
LaravelAdmin是基于PHP开发的基础管理后台系统,做到开箱即用,为新项目开发省去了基础功能开发的步骤;此系统采用前后端分离模式,后端使用Laravel,前端使用vue;主要包含:登录、注销、可视化数据大屏、管理员、角色管理、菜单管理、权限管理、错误日志、登录日志、访问日志、获取服务器CPU使用率、内存使用率等功能。后端主要使用Artisan命令行、Jobs消息队列、 Rules验证规则、Restful API、Composer扩展包、Redis秒杀、Extend自定义扩展类:微信授权、钉钉告警推送、MongoDB、阿里云OSS、七牛云存储、七牛云直播、php-jwt TOKEN、Phpoffice、MySql数据库字典、Elasticsearch等技术。
Stars: ✭ 45 (+32.35%)
Mutual labels:  rules
White Book
有关于 CNBlackListR 项目的说明
Stars: ✭ 94 (+176.47%)
Mutual labels:  rules
dclareForMPS
Adding declarative, reactive and incremental rules to MPS
Stars: ✭ 21 (-38.24%)
Mutual labels:  rules

cs-expert-system-shell

C# implementation of an expert system shell, targeting .Net Core 1.1

Build Status

Install

Run the following command to install:

Install-Package cs-expert-system-shell

Usage

The sample code below shows how to create a rule engine and initialize it with a set of rules:

using chen0040.ExpertSystem;
public RuleInferenceEngine getInferenceEngine()
{
	RuleInferenceEngine rie = new RuleInferenceEngine();

	Rule rule = new Rule("Bicycle");
	rule.AddAntecedent(new IsClause("vehicleType", "cycle"));
	rule.AddAntecedent(new IsClause("num_wheels", "2"));
	rule.AddAntecedent(new IsClause("motor", "no"));
	rule.setConsequent(new IsClause("vehicle", "Bicycle"));
	rie.AddRule(rule);

	rule = new Rule("Tricycle");
	rule.AddAntecedent(new IsClause("vehicleType", "cycle"));
	rule.AddAntecedent(new IsClause("num_wheels", "3"));
	rule.AddAntecedent(new IsClause("motor", "no"));
	rule.setConsequent(new IsClause("vehicle", "Tricycle"));
	rie.AddRule(rule);

	rule = new Rule("Motorcycle");
	rule.AddAntecedent(new IsClause("vehicleType", "cycle"));
	rule.AddAntecedent(new IsClause("num_wheels", "2"));
	rule.AddAntecedent(new IsClause("motor", "yes"));
	rule.setConsequent(new IsClause("vehicle", "Motorcycle"));
	rie.AddRule(rule);

	rule = new Rule("SportsCar");
	rule.AddAntecedent(new IsClause("vehicleType", "automobile"));
	rule.AddAntecedent(new IsClause("size", "medium"));
	rule.AddAntecedent(new IsClause("num_doors", "2"));
	rule.setConsequent(new IsClause("vehicle", "Sports_Car"));
	rie.AddRule(rule);

	rule = new Rule("Sedan");
	rule.AddAntecedent(new IsClause("vehicleType", "automobile"));
	rule.AddAntecedent(new IsClause("size", "medium"));
	rule.AddAntecedent(new IsClause("num_doors", "4"));
	rule.setConsequent(new IsClause("vehicle", "Sedan"));
	rie.AddRule(rule);

	rule = new Rule("MiniVan");
	rule.AddAntecedent(new IsClause("vehicleType", "automobile"));
	rule.AddAntecedent(new IsClause("size", "medium"));
	rule.AddAntecedent(new IsClause("num_doors", "3"));
	rule.setConsequent(new IsClause("vehicle", "MiniVan"));
	rie.AddRule(rule);

	rule = new Rule("SUV");
	rule.AddAntecedent(new IsClause("vehicleType", "automobile"));
	rule.AddAntecedent(new IsClause("size", "large"));
	rule.AddAntecedent(new IsClause("num_doors", "4"));
	rule.setConsequent(new IsClause("vehicle", "SUV"));
	rie.AddRule(rule);

	rule = new Rule("Cycle");
	rule.AddAntecedent(new LessClause("num_wheels", "4"));
	rule.setConsequent(new IsClause("vehicleType", "cycle"));
	rie.AddRule(rule);

	rule = new Rule("Automobile");
	rule.AddAntecedent(new IsClause("num_wheels", "4"));
	rule.AddAntecedent(new IsClause("motor", "yes"));
	rule.setConsequent(new IsClause("vehicleType", "automobile"));
	rie.AddRule(rule);

	return rie;
}

The sample code below shows how to use forward chaining in the rule engine to derive more facts from the known facts using rules:

RuleInferenceEngine rie = getInferenceEngine();
rie.AddFact(new IsClause("num_wheels", "4"));
rie.AddFact(new IsClause("motor", "yes"));
rie.AddFact(new IsClause("num_doors", "3"));
rie.AddFact(new IsClause("size", "medium"));

console.WriteLine("before inference");
console.WriteLine("{0}", rie.Facts);
console.WriteLine("");

rie.Infer(); //forward chain

console.WriteLine("after inference");
console.WriteLine("{0}", rie.Facts);
console.WriteLine("");

The sample code below shows how to use the backward chaining to reach conclusion for a target variable given a set of known facts:

RuleInferenceEngine rie = getInferenceEngine();
rie.AddFact(new IsClause("num_wheels", "4"));
rie.AddFact(new IsClause("motor", "yes"));
rie.AddFact(new IsClause("num_doors", "3"));
rie.AddFact(new IsClause("size", "medium"));

console.WriteLine("Infer: vehicle");

List<Clause> unproved_conditions = new List<Clause>();

Clause conclusion = rie.Infer("vehicle", unproved_conditions);

console.WriteLine("Conclusion: " + conclusion);

Assert.Equal(conclusion.Value, "MiniVan");

The sample code below shows how to use the rule engine to ask more questions when it fails to reach conclusion for the target variable given a limited set of known facts:

RuleInferenceEngine rie = getInferenceEngine();

console.WriteLine("Infer with All Facts Cleared:");
rie.ClearFacts();

List<Clause> unproved_conditions = new List<Clause>();

Clause conclusion = null;
while (conclusion == null)
{
	conclusion = rie.Infer("vehicle", unproved_conditions);
	if (conclusion == null)
	{
		if (unproved_conditions.Count == 0)
		{
			break;
		}
		Clause c = unproved_conditions[0];
		console.WriteLine("ask: " + c + "?");
		unproved_conditions.Clear();
		console.WriteLine("What is " + c.Variable + "?");
		String value = Console.ReadLine();
		rie.AddFact(new IsClause(c.Variable, value));
	}
}

console.WriteLine("Conclusion: " + conclusion);
console.WriteLine("Memory: ");
console.WriteLine("{0}", rie.Facts);
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].