Skip to content

Commit 4e38847

Browse files
committed
deploy to nuget and update docs
1 parent add334b commit 4e38847

File tree

3 files changed

+158
-1
lines changed

3 files changed

+158
-1
lines changed

Diff for: .gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ bin/
33
**/obj/
44
**/bin/
55
.vs/
6+
build/
67

78
# Mobile Tools for Java (J2ME)
89
.mtj.tmp/

Diff for: README.md

+155-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,158 @@
11
# cs-expert-system-shell
2-
C# implementation of an expert system shell
2+
C# implementation of an expert system shell, targeting .Net Core 1.1
33

44
[![Build Status](https://travis-ci.org/chen0040/cs-expert-system-shell.svg?branch=master)](https://travis-ci.org/chen0040/cs-expert-system-shell)
5+
6+
# Install
7+
8+
Run the following command to install:
9+
10+
Install-Package cs-expert-system-shell
11+
12+
# Usage
13+
14+
The sample code below shows how to create a rule engine and initialize it with a set of rules:
15+
16+
```cs
17+
using chen0040.ExpertSystem;
18+
public RuleInferenceEngine getInferenceEngine()
19+
{
20+
RuleInferenceEngine rie = new RuleInferenceEngine();
21+
22+
Rule rule = new Rule("Bicycle");
23+
rule.AddAntecedent(new IsClause("vehicleType", "cycle"));
24+
rule.AddAntecedent(new IsClause("num_wheels", "2"));
25+
rule.AddAntecedent(new IsClause("motor", "no"));
26+
rule.setConsequent(new IsClause("vehicle", "Bicycle"));
27+
rie.AddRule(rule);
28+
29+
rule = new Rule("Tricycle");
30+
rule.AddAntecedent(new IsClause("vehicleType", "cycle"));
31+
rule.AddAntecedent(new IsClause("num_wheels", "3"));
32+
rule.AddAntecedent(new IsClause("motor", "no"));
33+
rule.setConsequent(new IsClause("vehicle", "Tricycle"));
34+
rie.AddRule(rule);
35+
36+
rule = new Rule("Motorcycle");
37+
rule.AddAntecedent(new IsClause("vehicleType", "cycle"));
38+
rule.AddAntecedent(new IsClause("num_wheels", "2"));
39+
rule.AddAntecedent(new IsClause("motor", "yes"));
40+
rule.setConsequent(new IsClause("vehicle", "Motorcycle"));
41+
rie.AddRule(rule);
42+
43+
rule = new Rule("SportsCar");
44+
rule.AddAntecedent(new IsClause("vehicleType", "automobile"));
45+
rule.AddAntecedent(new IsClause("size", "medium"));
46+
rule.AddAntecedent(new IsClause("num_doors", "2"));
47+
rule.setConsequent(new IsClause("vehicle", "Sports_Car"));
48+
rie.AddRule(rule);
49+
50+
rule = new Rule("Sedan");
51+
rule.AddAntecedent(new IsClause("vehicleType", "automobile"));
52+
rule.AddAntecedent(new IsClause("size", "medium"));
53+
rule.AddAntecedent(new IsClause("num_doors", "4"));
54+
rule.setConsequent(new IsClause("vehicle", "Sedan"));
55+
rie.AddRule(rule);
56+
57+
rule = new Rule("MiniVan");
58+
rule.AddAntecedent(new IsClause("vehicleType", "automobile"));
59+
rule.AddAntecedent(new IsClause("size", "medium"));
60+
rule.AddAntecedent(new IsClause("num_doors", "3"));
61+
rule.setConsequent(new IsClause("vehicle", "MiniVan"));
62+
rie.AddRule(rule);
63+
64+
rule = new Rule("SUV");
65+
rule.AddAntecedent(new IsClause("vehicleType", "automobile"));
66+
rule.AddAntecedent(new IsClause("size", "large"));
67+
rule.AddAntecedent(new IsClause("num_doors", "4"));
68+
rule.setConsequent(new IsClause("vehicle", "SUV"));
69+
rie.AddRule(rule);
70+
71+
rule = new Rule("Cycle");
72+
rule.AddAntecedent(new LessClause("num_wheels", "4"));
73+
rule.setConsequent(new IsClause("vehicleType", "cycle"));
74+
rie.AddRule(rule);
75+
76+
rule = new Rule("Automobile");
77+
rule.AddAntecedent(new IsClause("num_wheels", "4"));
78+
rule.AddAntecedent(new IsClause("motor", "yes"));
79+
rule.setConsequent(new IsClause("vehicleType", "automobile"));
80+
rie.AddRule(rule);
81+
82+
return rie;
83+
}
84+
```
85+
86+
The sample code below shows how to use forward chaining in the rule engine to derive more facts from the known facts using rules:
87+
88+
```cs
89+
RuleInferenceEngine rie = getInferenceEngine();
90+
rie.AddFact(new IsClause("num_wheels", "4"));
91+
rie.AddFact(new IsClause("motor", "yes"));
92+
rie.AddFact(new IsClause("num_doors", "3"));
93+
rie.AddFact(new IsClause("size", "medium"));
94+
95+
console.WriteLine("before inference");
96+
console.WriteLine("{0}", rie.Facts);
97+
console.WriteLine("");
98+
99+
rie.Infer(); //forward chain
100+
101+
console.WriteLine("after inference");
102+
console.WriteLine("{0}", rie.Facts);
103+
console.WriteLine("");
104+
```
105+
106+
The sample code below shows how to use the backward chaining to reach conclusion for a target variable given a set of known facts:
107+
108+
```cs
109+
RuleInferenceEngine rie = getInferenceEngine();
110+
rie.AddFact(new IsClause("num_wheels", "4"));
111+
rie.AddFact(new IsClause("motor", "yes"));
112+
rie.AddFact(new IsClause("num_doors", "3"));
113+
rie.AddFact(new IsClause("size", "medium"));
114+
115+
console.WriteLine("Infer: vehicle");
116+
117+
List<Clause> unproved_conditions = new List<Clause>();
118+
119+
Clause conclusion = rie.Infer("vehicle", unproved_conditions);
120+
121+
console.WriteLine("Conclusion: " + conclusion);
122+
123+
Assert.Equal(conclusion.Value, "MiniVan");
124+
```
125+
126+
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:
127+
128+
```cs
129+
RuleInferenceEngine rie = getInferenceEngine();
130+
131+
console.WriteLine("Infer with All Facts Cleared:");
132+
rie.ClearFacts();
133+
134+
List<Clause> unproved_conditions = new List<Clause>();
135+
136+
Clause conclusion = null;
137+
while (conclusion == null)
138+
{
139+
conclusion = rie.Infer("vehicle", unproved_conditions);
140+
if (conclusion == null)
141+
{
142+
if (unproved_conditions.Count == 0)
143+
{
144+
break;
145+
}
146+
Clause c = unproved_conditions[0];
147+
console.WriteLine("ask: " + c + "?");
148+
unproved_conditions.Clear();
149+
console.WriteLine("What is " + c.Variable + "?");
150+
String value = Console.ReadLine();
151+
rie.AddFact(new IsClause(c.Variable, value));
152+
}
153+
}
154+
155+
console.WriteLine("Conclusion: " + conclusion);
156+
console.WriteLine("Memory: ");
157+
console.WriteLine("{0}", rie.Facts);
158+
```

Diff for: deploy.ps1

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
dotnet pack cs-expert-system-shell/cs-expert-system-shell.csproj /p:PackageVersion=1.0.1 --configuration release --include-source --output ../build
2+
nuget push build/cs-expert-system-shell.1.0.1.nupkg -Source https://www.nuget.org/api/v2/package

0 commit comments

Comments
 (0)